Commit Diff


commit - c0fbba878a5f41c852d4e4b03127be7590fbbf35
commit + ea4bde5f1831b651791caeaf373d7f6b0ad7708c
blob - 5788340e22b05d662638bb8a941dffbe8e5afb40
blob + 439b49b9f14e187ea50d7935017c02b225f96ae0
--- device/command.pb.go
+++ device/command.pb.go
@@ -23,34 +23,58 @@ const (
 type Capability int32
 
 const (
-	Capability_READ    Capability = 0
-	Capability_WRITE   Capability = 1
-	Capability_DEBUG   Capability = 2
-	Capability_ADMIN   Capability = 3
-	Capability_SETUP   Capability = 4
-	Capability_SET_SKU Capability = 5
-	Capability_REFRESH Capability = 6
+	Capability_READ             Capability = 0
+	Capability_READ_INTERNAL    Capability = 13
+	Capability_READ_PRIVATE     Capability = 7
+	Capability_LOCAL            Capability = 14
+	Capability_WRITE            Capability = 1
+	Capability_WRITE_PERSISTENT Capability = 11
+	Capability_DEBUG            Capability = 2
+	Capability_ADMIN            Capability = 3
+	Capability_SETUP            Capability = 4
+	Capability_SET_SKU          Capability = 5
+	Capability_REFRESH          Capability = 6
+	Capability_FUSE             Capability = 8
+	Capability_RESET            Capability = 9
+	Capability_TEST             Capability = 10
+	Capability_SSH              Capability = 12
 )
 
 // Enum value maps for Capability.
 var (
 	Capability_name = map[int32]string{
-		0: "READ",
-		1: "WRITE",
-		2: "DEBUG",
-		3: "ADMIN",
-		4: "SETUP",
-		5: "SET_SKU",
-		6: "REFRESH",
+		0:  "READ",
+		13: "READ_INTERNAL",
+		7:  "READ_PRIVATE",
+		14: "LOCAL",
+		1:  "WRITE",
+		11: "WRITE_PERSISTENT",
+		2:  "DEBUG",
+		3:  "ADMIN",
+		4:  "SETUP",
+		5:  "SET_SKU",
+		6:  "REFRESH",
+		8:  "FUSE",
+		9:  "RESET",
+		10: "TEST",
+		12: "SSH",
 	}
 	Capability_value = map[string]int32{
-		"READ":    0,
-		"WRITE":   1,
-		"DEBUG":   2,
-		"ADMIN":   3,
-		"SETUP":   4,
-		"SET_SKU": 5,
-		"REFRESH": 6,
+		"READ":             0,
+		"READ_INTERNAL":    13,
+		"READ_PRIVATE":     7,
+		"LOCAL":            14,
+		"WRITE":            1,
+		"WRITE_PERSISTENT": 11,
+		"DEBUG":            2,
+		"ADMIN":            3,
+		"SETUP":            4,
+		"SET_SKU":          5,
+		"REFRESH":          6,
+		"FUSE":             8,
+		"RESET":            9,
+		"TEST":             10,
+		"SSH":              12,
 	}
 )
 
@@ -148,15 +172,22 @@ var file_spacex_api_device_command_proto_rawDesc = []b
 	0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63,
 	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x61,
 	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69,
-	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2a, 0x5c, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
-	0x6c, 0x69, 0x74, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x09,
-	0x0a, 0x05, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42,
-	0x55, 0x47, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x03, 0x12,
-	0x09, 0x0a, 0x05, 0x53, 0x45, 0x54, 0x55, 0x50, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45,
-	0x54, 0x5f, 0x53, 0x4b, 0x55, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x46, 0x52, 0x45,
-	0x53, 0x48, 0x10, 0x06, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63,
-	0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2a, 0xca, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12,
+	0x11, 0x0a, 0x0d, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c,
+	0x10, 0x0d, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41,
+	0x54, 0x45, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x0e, 0x12,
+	0x09, 0x0a, 0x05, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x52,
+	0x49, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x0b,
+	0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x41,
+	0x44, 0x4d, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x54, 0x55, 0x50, 0x10,
+	0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x4b, 0x55, 0x10, 0x05, 0x12, 0x0b,
+	0x0a, 0x07, 0x52, 0x45, 0x46, 0x52, 0x45, 0x53, 0x48, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x46,
+	0x55, 0x53, 0x45, 0x10, 0x08, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x09,
+	0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x53, 0x54, 0x10, 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x53,
+	0x48, 0x10, 0x0c, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
blob - d22feeb981c1a4e49c2b326964d964127318d198
blob + 22c28a309374da79f29cb801c643e872de7ca5df
--- device/common.pb.go
+++ device/common.pb.go
@@ -20,6 +20,70 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+type BootReason int32
+
+const (
+	BootReason_BOOT_REASON_UNKNOWN BootReason = 0
+	BootReason_FORGOTTEN           BootReason = 1
+	BootReason_POWER_CYCLE         BootReason = 2
+	BootReason_COMMAND             BootReason = 3
+	BootReason_SOFTWARE_UPDATE     BootReason = 4
+	BootReason_CONFIG_UPDATE       BootReason = 5
+	BootReason_UPTIME_FDIR         BootReason = 6
+	BootReason_REPEATER_FDIR       BootReason = 7
+)
+
+// Enum value maps for BootReason.
+var (
+	BootReason_name = map[int32]string{
+		0: "BOOT_REASON_UNKNOWN",
+		1: "FORGOTTEN",
+		2: "POWER_CYCLE",
+		3: "COMMAND",
+		4: "SOFTWARE_UPDATE",
+		5: "CONFIG_UPDATE",
+		6: "UPTIME_FDIR",
+		7: "REPEATER_FDIR",
+	}
+	BootReason_value = map[string]int32{
+		"BOOT_REASON_UNKNOWN": 0,
+		"FORGOTTEN":           1,
+		"POWER_CYCLE":         2,
+		"COMMAND":             3,
+		"SOFTWARE_UPDATE":     4,
+		"CONFIG_UPDATE":       5,
+		"UPTIME_FDIR":         6,
+		"REPEATER_FDIR":       7,
+	}
+)
+
+func (x BootReason) Enum() *BootReason {
+	p := new(BootReason)
+	*p = x
+	return p
+}
+
+func (x BootReason) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (BootReason) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_common_proto_enumTypes[0].Descriptor()
+}
+
+func (BootReason) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_common_proto_enumTypes[0]
+}
+
+func (x BootReason) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use BootReason.Descriptor instead.
+func (BootReason) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{0}
+}
+
 type EthernetNetworkInterface_Duplex int32
 
 const (
@@ -53,11 +117,11 @@ func (x EthernetNetworkInterface_Duplex) String() stri
 }
 
 func (EthernetNetworkInterface_Duplex) Descriptor() protoreflect.EnumDescriptor {
-	return file_spacex_api_device_common_proto_enumTypes[0].Descriptor()
+	return file_spacex_api_device_common_proto_enumTypes[1].Descriptor()
 }
 
 func (EthernetNetworkInterface_Duplex) Type() protoreflect.EnumType {
-	return &file_spacex_api_device_common_proto_enumTypes[0]
+	return &file_spacex_api_device_common_proto_enumTypes[1]
 }
 
 func (x EthernetNetworkInterface_Duplex) Number() protoreflect.EnumNumber {
@@ -66,7 +130,7 @@ func (x EthernetNetworkInterface_Duplex) Number() prot
 
 // Deprecated: Use EthernetNetworkInterface_Duplex.Descriptor instead.
 func (EthernetNetworkInterface_Duplex) EnumDescriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{11, 0}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{12, 0}
 }
 
 type DeviceInfo struct {
@@ -74,10 +138,19 @@ type DeviceInfo struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id              string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	HardwareVersion string `protobuf:"bytes,2,opt,name=hardware_version,json=hardwareVersion,proto3" json:"hardware_version,omitempty"`
-	SoftwareVersion string `protobuf:"bytes,3,opt,name=software_version,json=softwareVersion,proto3" json:"software_version,omitempty"`
-	CountryCode     string `protobuf:"bytes,4,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	Id                      string    `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	HardwareVersion         string    `protobuf:"bytes,2,opt,name=hardware_version,json=hardwareVersion,proto3" json:"hardware_version,omitempty"`
+	SoftwareVersion         string    `protobuf:"bytes,3,opt,name=software_version,json=softwareVersion,proto3" json:"software_version,omitempty"`
+	ManufacturedVersion     string    `protobuf:"bytes,11,opt,name=manufactured_version,json=manufacturedVersion,proto3" json:"manufactured_version,omitempty"`
+	GenerationNumber        int64     `protobuf:"varint,12,opt,name=generation_number,json=generationNumber,proto3" json:"generation_number,omitempty"`
+	CountryCode             string    `protobuf:"bytes,4,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	UtcOffsetS              int32     `protobuf:"varint,5,opt,name=utc_offset_s,json=utcOffsetS,proto3" json:"utc_offset_s,omitempty"`
+	SoftwarePartitionsEqual bool      `protobuf:"varint,6,opt,name=software_partitions_equal,json=softwarePartitionsEqual,proto3" json:"software_partitions_equal,omitempty"`
+	IsDev                   bool      `protobuf:"varint,7,opt,name=is_dev,json=isDev,proto3" json:"is_dev,omitempty"`
+	Bootcount               int32     `protobuf:"varint,8,opt,name=bootcount,proto3" json:"bootcount,omitempty"`
+	AntiRollbackVersion     int32     `protobuf:"varint,9,opt,name=anti_rollback_version,json=antiRollbackVersion,proto3" json:"anti_rollback_version,omitempty"`
+	IsHitl                  bool      `protobuf:"varint,10,opt,name=is_hitl,json=isHitl,proto3" json:"is_hitl,omitempty"`
+	Boot                    *BootInfo `protobuf:"bytes,1001,opt,name=boot,proto3" json:"boot,omitempty"`
 }
 
 func (x *DeviceInfo) Reset() {
@@ -133,6 +206,20 @@ func (x *DeviceInfo) GetSoftwareVersion() string {
 	return ""
 }
 
+func (x *DeviceInfo) GetManufacturedVersion() string {
+	if x != nil {
+		return x.ManufacturedVersion
+	}
+	return ""
+}
+
+func (x *DeviceInfo) GetGenerationNumber() int64 {
+	if x != nil {
+		return x.GenerationNumber
+	}
+	return 0
+}
+
 func (x *DeviceInfo) GetCountryCode() string {
 	if x != nil {
 		return x.CountryCode
@@ -140,6 +227,55 @@ func (x *DeviceInfo) GetCountryCode() string {
 	return ""
 }
 
+func (x *DeviceInfo) GetUtcOffsetS() int32 {
+	if x != nil {
+		return x.UtcOffsetS
+	}
+	return 0
+}
+
+func (x *DeviceInfo) GetSoftwarePartitionsEqual() bool {
+	if x != nil {
+		return x.SoftwarePartitionsEqual
+	}
+	return false
+}
+
+func (x *DeviceInfo) GetIsDev() bool {
+	if x != nil {
+		return x.IsDev
+	}
+	return false
+}
+
+func (x *DeviceInfo) GetBootcount() int32 {
+	if x != nil {
+		return x.Bootcount
+	}
+	return 0
+}
+
+func (x *DeviceInfo) GetAntiRollbackVersion() int32 {
+	if x != nil {
+		return x.AntiRollbackVersion
+	}
+	return 0
+}
+
+func (x *DeviceInfo) GetIsHitl() bool {
+	if x != nil {
+		return x.IsHitl
+	}
+	return false
+}
+
+func (x *DeviceInfo) GetBoot() *BootInfo {
+	if x != nil {
+		return x.Boot
+	}
+	return nil
+}
+
 type DeviceState struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -331,7 +467,78 @@ func (x *GetNextIdResponse) GetId() uint64 {
 func (x *GetNextIdResponse) GetEpochId() uint64 {
 	if x != nil {
 		return x.EpochId
+	}
+	return 0
+}
+
+type BootInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	CountByReason      map[int32]int32 `protobuf:"bytes,1,rep,name=count_by_reason,json=countByReason,proto3" json:"count_by_reason,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	CountByReasonDelta map[int32]int32 `protobuf:"bytes,4,rep,name=count_by_reason_delta,json=countByReasonDelta,proto3" json:"count_by_reason_delta,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	LastReason         BootReason      `protobuf:"varint,2,opt,name=last_reason,json=lastReason,proto3,enum=SpaceX.API.Device.BootReason" json:"last_reason,omitempty"`
+	LastCount          int32           `protobuf:"varint,3,opt,name=last_count,json=lastCount,proto3" json:"last_count,omitempty"`
+}
+
+func (x *BootInfo) Reset() {
+	*x = BootInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BootInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BootInfo) ProtoMessage() {}
+
+func (x *BootInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use BootInfo.ProtoReflect.Descriptor instead.
+func (*BootInfo) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *BootInfo) GetCountByReason() map[int32]int32 {
+	if x != nil {
+		return x.CountByReason
 	}
+	return nil
+}
+
+func (x *BootInfo) GetCountByReasonDelta() map[int32]int32 {
+	if x != nil {
+		return x.CountByReasonDelta
+	}
+	return nil
+}
+
+func (x *BootInfo) GetLastReason() BootReason {
+	if x != nil {
+		return x.LastReason
+	}
+	return BootReason_BOOT_REASON_UNKNOWN
+}
+
+func (x *BootInfo) GetLastCount() int32 {
+	if x != nil {
+		return x.LastCount
+	}
 	return 0
 }
 
@@ -348,7 +555,7 @@ type PingTarget struct {
 func (x *PingTarget) Reset() {
 	*x = PingTarget{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[5]
+		mi := &file_spacex_api_device_common_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -361,7 +568,7 @@ func (x *PingTarget) String() string {
 func (*PingTarget) ProtoMessage() {}
 
 func (x *PingTarget) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[5]
+	mi := &file_spacex_api_device_common_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -374,7 +581,7 @@ func (x *PingTarget) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use PingTarget.ProtoReflect.Descriptor instead.
 func (*PingTarget) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{5}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *PingTarget) GetService() string {
@@ -411,7 +618,7 @@ type PingResult struct {
 func (x *PingResult) Reset() {
 	*x = PingResult{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[6]
+		mi := &file_spacex_api_device_common_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -424,7 +631,7 @@ func (x *PingResult) String() string {
 func (*PingResult) ProtoMessage() {}
 
 func (x *PingResult) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[6]
+	mi := &file_spacex_api_device_common_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -437,7 +644,7 @@ func (x *PingResult) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use PingResult.ProtoReflect.Descriptor instead.
 func (*PingResult) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{6}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *PingResult) GetTarget() *PingTarget {
@@ -474,7 +681,7 @@ type BondingChallenge struct {
 func (x *BondingChallenge) Reset() {
 	*x = BondingChallenge{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[7]
+		mi := &file_spacex_api_device_common_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -487,7 +694,7 @@ func (x *BondingChallenge) String() string {
 func (*BondingChallenge) ProtoMessage() {}
 
 func (x *BondingChallenge) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[7]
+	mi := &file_spacex_api_device_common_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -500,7 +707,7 @@ func (x *BondingChallenge) ProtoReflect() protoreflect
 
 // Deprecated: Use BondingChallenge.ProtoReflect.Descriptor instead.
 func (*BondingChallenge) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{7}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *BondingChallenge) GetDishId() string {
@@ -535,7 +742,7 @@ type AuthenticateRequest struct {
 func (x *AuthenticateRequest) Reset() {
 	*x = AuthenticateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[8]
+		mi := &file_spacex_api_device_common_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -548,7 +755,7 @@ func (x *AuthenticateRequest) String() string {
 func (*AuthenticateRequest) ProtoMessage() {}
 
 func (x *AuthenticateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[8]
+	mi := &file_spacex_api_device_common_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -561,7 +768,7 @@ func (x *AuthenticateRequest) ProtoReflect() protorefl
 
 // Deprecated: Use AuthenticateRequest.ProtoReflect.Descriptor instead.
 func (*AuthenticateRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{8}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *AuthenticateRequest) GetChallenge() *SignedData {
@@ -583,7 +790,7 @@ type ChallengeResponse struct {
 func (x *ChallengeResponse) Reset() {
 	*x = ChallengeResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[9]
+		mi := &file_spacex_api_device_common_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -596,7 +803,7 @@ func (x *ChallengeResponse) String() string {
 func (*ChallengeResponse) ProtoMessage() {}
 
 func (x *ChallengeResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[9]
+	mi := &file_spacex_api_device_common_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -609,7 +816,7 @@ func (x *ChallengeResponse) ProtoReflect() protoreflec
 
 // Deprecated: Use ChallengeResponse.ProtoReflect.Descriptor instead.
 func (*ChallengeResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{9}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *ChallengeResponse) GetSignature() []byte {
@@ -632,18 +839,20 @@ type NetworkInterface struct {
 	unknownFields protoimpl.UnknownFields
 
 	Name    string                    `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Up      bool                      `protobuf:"varint,4,opt,name=up,proto3" json:"up,omitempty"`
 	RxStats *NetworkInterface_RxStats `protobuf:"bytes,2,opt,name=rx_stats,json=rxStats,proto3" json:"rx_stats,omitempty"`
 	TxStats *NetworkInterface_TxStats `protobuf:"bytes,3,opt,name=tx_stats,json=txStats,proto3" json:"tx_stats,omitempty"`
 	// Types that are assignable to Interface:
 	//
 	//	*NetworkInterface_Ethernet
+	//	*NetworkInterface_Wifi
 	Interface isNetworkInterface_Interface `protobuf_oneof:"interface"`
 }
 
 func (x *NetworkInterface) Reset() {
 	*x = NetworkInterface{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[10]
+		mi := &file_spacex_api_device_common_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -656,7 +865,7 @@ func (x *NetworkInterface) String() string {
 func (*NetworkInterface) ProtoMessage() {}
 
 func (x *NetworkInterface) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[10]
+	mi := &file_spacex_api_device_common_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -669,7 +878,7 @@ func (x *NetworkInterface) ProtoReflect() protoreflect
 
 // Deprecated: Use NetworkInterface.ProtoReflect.Descriptor instead.
 func (*NetworkInterface) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{10}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *NetworkInterface) GetName() string {
@@ -679,6 +888,13 @@ func (x *NetworkInterface) GetName() string {
 	return ""
 }
 
+func (x *NetworkInterface) GetUp() bool {
+	if x != nil {
+		return x.Up
+	}
+	return false
+}
+
 func (x *NetworkInterface) GetRxStats() *NetworkInterface_RxStats {
 	if x != nil {
 		return x.RxStats
@@ -707,6 +923,13 @@ func (x *NetworkInterface) GetEthernet() *EthernetNetw
 	return nil
 }
 
+func (x *NetworkInterface) GetWifi() *WifiNetworkInterface {
+	if x, ok := x.GetInterface().(*NetworkInterface_Wifi); ok {
+		return x.Wifi
+	}
+	return nil
+}
+
 type isNetworkInterface_Interface interface {
 	isNetworkInterface_Interface()
 }
@@ -715,8 +938,14 @@ type NetworkInterface_Ethernet struct {
 	Ethernet *EthernetNetworkInterface `protobuf:"bytes,1000,opt,name=ethernet,proto3,oneof"`
 }
 
+type NetworkInterface_Wifi struct {
+	Wifi *WifiNetworkInterface `protobuf:"bytes,1001,opt,name=wifi,proto3,oneof"`
+}
+
 func (*NetworkInterface_Ethernet) isNetworkInterface_Interface() {}
 
+func (*NetworkInterface_Wifi) isNetworkInterface_Interface() {}
+
 type EthernetNetworkInterface struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -731,7 +960,7 @@ type EthernetNetworkInterface struct {
 func (x *EthernetNetworkInterface) Reset() {
 	*x = EthernetNetworkInterface{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[11]
+		mi := &file_spacex_api_device_common_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -744,7 +973,7 @@ func (x *EthernetNetworkInterface) String() string {
 func (*EthernetNetworkInterface) ProtoMessage() {}
 
 func (x *EthernetNetworkInterface) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[11]
+	mi := &file_spacex_api_device_common_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -757,7 +986,7 @@ func (x *EthernetNetworkInterface) ProtoReflect() prot
 
 // Deprecated: Use EthernetNetworkInterface.ProtoReflect.Descriptor instead.
 func (*EthernetNetworkInterface) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{11}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *EthernetNetworkInterface) GetLinkDetected() bool {
@@ -786,8 +1015,447 @@ func (x *EthernetNetworkInterface) GetDuplex() Etherne
 		return x.Duplex
 	}
 	return EthernetNetworkInterface_UNKNOWN
+}
+
+type WifiNetworkInterface struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ThermalStatus       *WifiNetworkInterface_ThermalStatus       `protobuf:"bytes,1,opt,name=thermal_status,json=thermalStatus,proto3" json:"thermal_status,omitempty"`
+	InvalidPacketCounts *WifiNetworkInterface_InvalidPacketCounts `protobuf:"bytes,2,opt,name=invalid_packet_counts,json=invalidPacketCounts,proto3" json:"invalid_packet_counts,omitempty"`
+	Channel             uint32                                    `protobuf:"varint,3,opt,name=channel,proto3" json:"channel,omitempty"`
+	MissedBeacons       uint32                                    `protobuf:"varint,8,opt,name=missed_beacons,json=missedBeacons,proto3" json:"missed_beacons,omitempty"`
+	LinkQuality         float64                                   `protobuf:"fixed64,4,opt,name=link_quality,json=linkQuality,proto3" json:"link_quality,omitempty"`
+	SignalLevel         float64                                   `protobuf:"fixed64,5,opt,name=signal_level,json=signalLevel,proto3" json:"signal_level,omitempty"`
+	NoiseLevel          float64                                   `protobuf:"fixed64,6,opt,name=noise_level,json=noiseLevel,proto3" json:"noise_level,omitempty"`
+	AntennaeStatus      *WifiNetworkInterface_AntennaeStatus      `protobuf:"bytes,9,opt,name=antennae_status,json=antennaeStatus,proto3" json:"antennae_status,omitempty"`
 }
 
+func (x *WifiNetworkInterface) Reset() {
+	*x = WifiNetworkInterface{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNetworkInterface) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNetworkInterface) ProtoMessage() {}
+
+func (x *WifiNetworkInterface) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNetworkInterface.ProtoReflect.Descriptor instead.
+func (*WifiNetworkInterface) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *WifiNetworkInterface) GetThermalStatus() *WifiNetworkInterface_ThermalStatus {
+	if x != nil {
+		return x.ThermalStatus
+	}
+	return nil
+}
+
+func (x *WifiNetworkInterface) GetInvalidPacketCounts() *WifiNetworkInterface_InvalidPacketCounts {
+	if x != nil {
+		return x.InvalidPacketCounts
+	}
+	return nil
+}
+
+func (x *WifiNetworkInterface) GetChannel() uint32 {
+	if x != nil {
+		return x.Channel
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface) GetMissedBeacons() uint32 {
+	if x != nil {
+		return x.MissedBeacons
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface) GetLinkQuality() float64 {
+	if x != nil {
+		return x.LinkQuality
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface) GetSignalLevel() float64 {
+	if x != nil {
+		return x.SignalLevel
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface) GetNoiseLevel() float64 {
+	if x != nil {
+		return x.NoiseLevel
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface) GetAntennaeStatus() *WifiNetworkInterface_AntennaeStatus {
+	if x != nil {
+		return x.AntennaeStatus
+	}
+	return nil
+}
+
+type LLAPosition struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Lat float64 `protobuf:"fixed64,1,opt,name=lat,proto3" json:"lat,omitempty"`
+	Lon float64 `protobuf:"fixed64,2,opt,name=lon,proto3" json:"lon,omitempty"`
+	Alt float64 `protobuf:"fixed64,3,opt,name=alt,proto3" json:"alt,omitempty"`
+}
+
+func (x *LLAPosition) Reset() {
+	*x = LLAPosition{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *LLAPosition) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LLAPosition) ProtoMessage() {}
+
+func (x *LLAPosition) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use LLAPosition.ProtoReflect.Descriptor instead.
+func (*LLAPosition) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *LLAPosition) GetLat() float64 {
+	if x != nil {
+		return x.Lat
+	}
+	return 0
+}
+
+func (x *LLAPosition) GetLon() float64 {
+	if x != nil {
+		return x.Lon
+	}
+	return 0
+}
+
+func (x *LLAPosition) GetAlt() float64 {
+	if x != nil {
+		return x.Alt
+	}
+	return 0
+}
+
+type ECEFPosition struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	X float64 `protobuf:"fixed64,1,opt,name=x,proto3" json:"x,omitempty"`
+	Y float64 `protobuf:"fixed64,2,opt,name=y,proto3" json:"y,omitempty"`
+	Z float64 `protobuf:"fixed64,3,opt,name=z,proto3" json:"z,omitempty"`
+}
+
+func (x *ECEFPosition) Reset() {
+	*x = ECEFPosition{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ECEFPosition) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ECEFPosition) ProtoMessage() {}
+
+func (x *ECEFPosition) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ECEFPosition.ProtoReflect.Descriptor instead.
+func (*ECEFPosition) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *ECEFPosition) GetX() float64 {
+	if x != nil {
+		return x.X
+	}
+	return 0
+}
+
+func (x *ECEFPosition) GetY() float64 {
+	if x != nil {
+		return x.Y
+	}
+	return 0
+}
+
+func (x *ECEFPosition) GetZ() float64 {
+	if x != nil {
+		return x.Z
+	}
+	return 0
+}
+
+type InitiateRemoteSshRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *InitiateRemoteSshRequest) Reset() {
+	*x = InitiateRemoteSshRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InitiateRemoteSshRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InitiateRemoteSshRequest) ProtoMessage() {}
+
+func (x *InitiateRemoteSshRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use InitiateRemoteSshRequest.ProtoReflect.Descriptor instead.
+func (*InitiateRemoteSshRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{16}
+}
+
+type InitiateRemoteSshResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Port    uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+	Stsafe  []byte `protobuf:"bytes,3,opt,name=stsafe,proto3" json:"stsafe,omitempty"`
+}
+
+func (x *InitiateRemoteSshResponse) Reset() {
+	*x = InitiateRemoteSshResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InitiateRemoteSshResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InitiateRemoteSshResponse) ProtoMessage() {}
+
+func (x *InitiateRemoteSshResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use InitiateRemoteSshResponse.ProtoReflect.Descriptor instead.
+func (*InitiateRemoteSshResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *InitiateRemoteSshResponse) GetPort() uint32 {
+	if x != nil {
+		return x.Port
+	}
+	return 0
+}
+
+func (x *InitiateRemoteSshResponse) GetAddress() string {
+	if x != nil {
+		return x.Address
+	}
+	return ""
+}
+
+func (x *InitiateRemoteSshResponse) GetStsafe() []byte {
+	if x != nil {
+		return x.Stsafe
+	}
+	return nil
+}
+
+type SoftwareUpdateRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	StreamId uint64 `protobuf:"varint,1,opt,name=stream_id,json=streamId,proto3" json:"stream_id,omitempty"`
+	Data     []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+	Open     bool   `protobuf:"varint,3,opt,name=open,proto3" json:"open,omitempty"`
+	Close    bool   `protobuf:"varint,4,opt,name=close,proto3" json:"close,omitempty"`
+}
+
+func (x *SoftwareUpdateRequest) Reset() {
+	*x = SoftwareUpdateRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SoftwareUpdateRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SoftwareUpdateRequest) ProtoMessage() {}
+
+func (x *SoftwareUpdateRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SoftwareUpdateRequest.ProtoReflect.Descriptor instead.
+func (*SoftwareUpdateRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *SoftwareUpdateRequest) GetStreamId() uint64 {
+	if x != nil {
+		return x.StreamId
+	}
+	return 0
+}
+
+func (x *SoftwareUpdateRequest) GetData() []byte {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+func (x *SoftwareUpdateRequest) GetOpen() bool {
+	if x != nil {
+		return x.Open
+	}
+	return false
+}
+
+func (x *SoftwareUpdateRequest) GetClose() bool {
+	if x != nil {
+		return x.Close
+	}
+	return false
+}
+
+type SoftwareUpdateResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SoftwareUpdateResponse) Reset() {
+	*x = SoftwareUpdateResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SoftwareUpdateResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SoftwareUpdateResponse) ProtoMessage() {}
+
+func (x *SoftwareUpdateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SoftwareUpdateResponse.ProtoReflect.Descriptor instead.
+func (*SoftwareUpdateResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{19}
+}
+
 type NetworkInterface_RxStats struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -801,7 +1469,7 @@ type NetworkInterface_RxStats struct {
 func (x *NetworkInterface_RxStats) Reset() {
 	*x = NetworkInterface_RxStats{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[12]
+		mi := &file_spacex_api_device_common_proto_msgTypes[22]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -814,7 +1482,7 @@ func (x *NetworkInterface_RxStats) String() string {
 func (*NetworkInterface_RxStats) ProtoMessage() {}
 
 func (x *NetworkInterface_RxStats) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[12]
+	mi := &file_spacex_api_device_common_proto_msgTypes[22]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -827,7 +1495,7 @@ func (x *NetworkInterface_RxStats) ProtoReflect() prot
 
 // Deprecated: Use NetworkInterface_RxStats.ProtoReflect.Descriptor instead.
 func (*NetworkInterface_RxStats) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{10, 0}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{11, 0}
 }
 
 func (x *NetworkInterface_RxStats) GetBytes() uint64 {
@@ -863,7 +1531,7 @@ type NetworkInterface_TxStats struct {
 func (x *NetworkInterface_TxStats) Reset() {
 	*x = NetworkInterface_TxStats{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_common_proto_msgTypes[13]
+		mi := &file_spacex_api_device_common_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -876,7 +1544,7 @@ func (x *NetworkInterface_TxStats) String() string {
 func (*NetworkInterface_TxStats) ProtoMessage() {}
 
 func (x *NetworkInterface_TxStats) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_common_proto_msgTypes[13]
+	mi := &file_spacex_api_device_common_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -889,7 +1557,7 @@ func (x *NetworkInterface_TxStats) ProtoReflect() prot
 
 // Deprecated: Use NetworkInterface_TxStats.ProtoReflect.Descriptor instead.
 func (*NetworkInterface_TxStats) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{10, 1}
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{11, 1}
 }
 
 func (x *NetworkInterface_TxStats) GetBytes() uint64 {
@@ -906,110 +1574,484 @@ func (x *NetworkInterface_TxStats) GetPackets() uint64
 	return 0
 }
 
+type WifiNetworkInterface_ThermalStatus struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Level uint32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"`
+	// Deprecated: Do not use.
+	Temp           uint32  `protobuf:"varint,2,opt,name=temp,proto3" json:"temp,omitempty"`
+	Temp2          float64 `protobuf:"fixed64,3,opt,name=temp2,proto3" json:"temp2,omitempty"`
+	PowerReduction uint32  `protobuf:"varint,4,opt,name=power_reduction,json=powerReduction,proto3" json:"power_reduction,omitempty"`
+	DutyCycle      uint32  `protobuf:"varint,5,opt,name=duty_cycle,json=dutyCycle,proto3" json:"duty_cycle,omitempty"`
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) Reset() {
+	*x = WifiNetworkInterface_ThermalStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNetworkInterface_ThermalStatus) ProtoMessage() {}
+
+func (x *WifiNetworkInterface_ThermalStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNetworkInterface_ThermalStatus.ProtoReflect.Descriptor instead.
+func (*WifiNetworkInterface_ThermalStatus) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{13, 0}
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) GetLevel() uint32 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+// Deprecated: Do not use.
+func (x *WifiNetworkInterface_ThermalStatus) GetTemp() uint32 {
+	if x != nil {
+		return x.Temp
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) GetTemp2() float64 {
+	if x != nil {
+		return x.Temp2
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) GetPowerReduction() uint32 {
+	if x != nil {
+		return x.PowerReduction
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_ThermalStatus) GetDutyCycle() uint32 {
+	if x != nil {
+		return x.DutyCycle
+	}
+	return 0
+}
+
+type WifiNetworkInterface_InvalidPacketCounts struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RxInvalidNwid      uint32 `protobuf:"varint,1,opt,name=rx_invalid_nwid,json=rxInvalidNwid,proto3" json:"rx_invalid_nwid,omitempty"`
+	RxInvalidCrypt     uint32 `protobuf:"varint,2,opt,name=rx_invalid_crypt,json=rxInvalidCrypt,proto3" json:"rx_invalid_crypt,omitempty"`
+	RxInvalidFrag      uint32 `protobuf:"varint,3,opt,name=rx_invalid_frag,json=rxInvalidFrag,proto3" json:"rx_invalid_frag,omitempty"`
+	TxExcessiveRetries uint32 `protobuf:"varint,4,opt,name=tx_excessive_retries,json=txExcessiveRetries,proto3" json:"tx_excessive_retries,omitempty"`
+	InvalidMisc        uint32 `protobuf:"varint,5,opt,name=invalid_misc,json=invalidMisc,proto3" json:"invalid_misc,omitempty"`
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) Reset() {
+	*x = WifiNetworkInterface_InvalidPacketCounts{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNetworkInterface_InvalidPacketCounts) ProtoMessage() {}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNetworkInterface_InvalidPacketCounts.ProtoReflect.Descriptor instead.
+func (*WifiNetworkInterface_InvalidPacketCounts) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{13, 1}
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) GetRxInvalidNwid() uint32 {
+	if x != nil {
+		return x.RxInvalidNwid
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) GetRxInvalidCrypt() uint32 {
+	if x != nil {
+		return x.RxInvalidCrypt
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) GetRxInvalidFrag() uint32 {
+	if x != nil {
+		return x.RxInvalidFrag
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) GetTxExcessiveRetries() uint32 {
+	if x != nil {
+		return x.TxExcessiveRetries
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_InvalidPacketCounts) GetInvalidMisc() uint32 {
+	if x != nil {
+		return x.InvalidMisc
+	}
+	return 0
+}
+
+type WifiNetworkInterface_AntennaeStatus struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Rssi1 float32 `protobuf:"fixed32,1,opt,name=rssi1,proto3" json:"rssi1,omitempty"`
+	Rssi2 float32 `protobuf:"fixed32,2,opt,name=rssi2,proto3" json:"rssi2,omitempty"`
+	Rssi3 float32 `protobuf:"fixed32,3,opt,name=rssi3,proto3" json:"rssi3,omitempty"`
+}
+
+func (x *WifiNetworkInterface_AntennaeStatus) Reset() {
+	*x = WifiNetworkInterface_AntennaeStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_common_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNetworkInterface_AntennaeStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNetworkInterface_AntennaeStatus) ProtoMessage() {}
+
+func (x *WifiNetworkInterface_AntennaeStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_common_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNetworkInterface_AntennaeStatus.ProtoReflect.Descriptor instead.
+func (*WifiNetworkInterface_AntennaeStatus) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_common_proto_rawDescGZIP(), []int{13, 2}
+}
+
+func (x *WifiNetworkInterface_AntennaeStatus) GetRssi1() float32 {
+	if x != nil {
+		return x.Rssi1
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_AntennaeStatus) GetRssi2() float32 {
+	if x != nil {
+		return x.Rssi2
+	}
+	return 0
+}
+
+func (x *WifiNetworkInterface_AntennaeStatus) GetRssi3() float32 {
+	if x != nil {
+		return x.Rssi3
+	}
+	return 0
+}
+
 var File_spacex_api_device_common_proto protoreflect.FileDescriptor
 
 var file_spacex_api_device_common_proto_rawDesc = []byte{
 	0x0a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
 	0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x12, 0x11, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
+	0x69, 0x63, 0x65, 0x22, 0x87, 0x04, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
 	0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
 	0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76,
 	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61,
 	0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a,
 	0x10, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
 	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
-	0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e,
+	0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x14, 0x6d, 0x61, 0x6e, 0x75,
+	0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74,
+	0x75, 0x72, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e,
 	0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x28, 0x0a, 0x0b, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x75, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x53, 0x22, 0x3e, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44,
-	0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61,
-	0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
-	0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74,
-	0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x11, 0x47, 0x65, 0x74,
-	0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e,
-	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19,
-	0x0a, 0x08, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
-	0x52, 0x07, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x0a, 0x50, 0x69, 0x6e,
-	0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
-	0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
-	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x7d, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x52,
-	0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61,
-	0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08,
-	0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08,
-	0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65,
-	0x6e, 0x63, 0x79, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6c, 0x61, 0x74,
-	0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0x5a, 0x0a, 0x10, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e,
-	0x67, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x69,
-	0x73, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x73,
-	0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x66, 0x69, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05,
-	0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6e, 0x6f, 0x6e,
-	0x63, 0x65, 0x22, 0x52, 0x0a, 0x13, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
-	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x68, 0x61,
-	0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x75,
+	0x74, 0x63, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x0a, 0x75, 0x74, 0x63, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x12, 0x3a, 0x0a,
+	0x19, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x17, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f,
+	0x64, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x65, 0x76,
+	0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32,
+	0x0a, 0x15, 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f,
+	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x61,
+	0x6e, 0x74, 0x69, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x6c, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x48, 0x69, 0x74, 0x6c, 0x12, 0x30, 0x0a, 0x04, 0x62,
+	0x6f, 0x6f, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42,
+	0x6f, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x74, 0x22, 0x28, 0x0a,
+	0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08,
+	0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07,
+	0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x22, 0x3e, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x65,
+	0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67,
+	0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69,
+	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x65,
+	0x78, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x11, 0x47,
+	0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x19, 0x0a, 0x08, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x04, 0x52, 0x07, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x64, 0x22, 0xb2, 0x03, 0x0a, 0x08,
+	0x42, 0x6f, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x56, 0x0a, 0x0f, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e,
+	0x12, 0x66, 0x0a, 0x15, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x61,
+	0x73, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x33, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x42, 0x79, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x52, 0x65, 0x61,
+	0x73, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74,
+	0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0a, 0x6c, 0x61,
+	0x73, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74,
+	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x61,
+	0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x42, 0x79, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x45, 0x0a, 0x17, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x42, 0x79, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+	0x22, 0x5c, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18,
+	0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x7d,
+	0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x35, 0x0a, 0x06,
+	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53,
 	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61,
-	0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x5e, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65,
-	0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73,
-	0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09,
-	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72,
-	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
-	0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0xa8, 0x03, 0x0a, 0x10, 0x4e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-	0x46, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74,
-	0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07,
-	0x72, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x74, 0x78, 0x5f, 0x73, 0x74,
-	0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x54,
-	0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07, 0x74, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12,
-	0x4a, 0x0a, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x18, 0xe8, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x48,
-	0x00, 0x52, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x1a, 0x5c, 0x0a, 0x07, 0x52,
-	0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07,
-	0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70,
-	0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f,
-	0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72,
-	0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0x39, 0x0a, 0x07, 0x54, 0x78, 0x53,
-	0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
-	0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x61, 0x63,
-	0x6b, 0x65, 0x74, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
-	0x65, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x23,
-	0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x69, 0x6e, 0x6b, 0x44, 0x65, 0x74, 0x65, 0x63,
-	0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x6d, 0x62, 0x70,
-	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x70, 0x65, 0x65, 0x64, 0x4d, 0x62,
-	0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
-	0x61, 0x75, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f,
-	0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x32, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x44,
-	0x75, 0x70, 0x6c, 0x65, 0x78, 0x52, 0x06, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x22, 0x29, 0x0a,
-	0x06, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
-	0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x01, 0x12, 0x08,
-	0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63,
-	0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0x5a, 0x0a,
+	0x10, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67,
+	0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x77, 0x69,
+	0x66, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x66,
+	0x69, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x13, 0x41, 0x75, 0x74,
+	0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x3b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61,
+	0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x5e, 0x0a,
+	0x11, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f,
+	0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72,
+	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0xf8, 0x03,
+	0x0a, 0x10, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
+	0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x46, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x73, 0x74, 0x61,
+	0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x78,
+	0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07, 0x72, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x46,
+	0x0a, 0x08, 0x74, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07, 0x74,
+	0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e,
+	0x65, 0x74, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x74,
+	0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74,
+	0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e,
+	0x65, 0x74, 0x12, 0x3e, 0x0a, 0x04, 0x77, 0x69, 0x66, 0x69, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x04, 0x77, 0x69,
+	0x66, 0x69, 0x1a, 0x5c, 0x0a, 0x07, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a,
+	0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79,
+	0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x21, 0x0a,
+	0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73,
+	0x1a, 0x39, 0x0a, 0x07, 0x54, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62,
+	0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x04, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x69,
+	0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x45, 0x74, 0x68,
+	0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x65,
+	0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x69,
+	0x6e, 0x6b, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x70,
+	0x65, 0x65, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x75, 0x74,
+	0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74,
+	0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x64, 0x75, 0x70, 0x6c,
+	0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x74, 0x68,
+	0x65, 0x72, 0x6e, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x52, 0x06, 0x64, 0x75,
+	0x70, 0x6c, 0x65, 0x78, 0x22, 0x29, 0x0a, 0x06, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x0b,
+	0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48,
+	0x41, 0x4c, 0x46, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x02, 0x22,
+	0xcd, 0x07, 0x0a, 0x14, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49,
+	0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x74, 0x68, 0x65, 0x72,
+	0x6d, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x35, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61,
+	0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6f, 0x0a, 0x15, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x49,
+	0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e,
+	0x74, 0x73, 0x52, 0x13, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65,
+	0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e,
+	0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+	0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x65, 0x61, 0x63,
+	0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x69, 0x73, 0x73, 0x65,
+	0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69, 0x6e, 0x6b,
+	0x5f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b,
+	0x6c, 0x69, 0x6e, 0x6b, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73,
+	0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f,
+	0x0a, 0x0b, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0a, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12,
+	0x5f, 0x0a, 0x0f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+	0x65, 0x2e, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x52, 0x0e, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x1a, 0x9b, 0x01, 0x0a, 0x0d, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x04, 0x74, 0x65, 0x6d, 0x70,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x74, 0x65, 0x6d, 0x70,
+	0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x6d, 0x70, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x05, 0x74, 0x65, 0x6d, 0x70, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f,
+	0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x0e, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0xe4,
+	0x01, 0x0a, 0x13, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
+	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x76,
+	0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6e, 0x77, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x0d, 0x72, 0x78, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4e, 0x77, 0x69, 0x64, 0x12, 0x28,
+	0x0a, 0x10, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x72, 0x79,
+	0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x78, 0x49, 0x6e, 0x76, 0x61,
+	0x6c, 0x69, 0x64, 0x43, 0x72, 0x79, 0x70, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x78, 0x5f, 0x69,
+	0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x0d, 0x72, 0x78, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67,
+	0x12, 0x30, 0x0a, 0x14, 0x74, 0x78, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65,
+	0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12,
+	0x74, 0x78, 0x45, 0x78, 0x63, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x74, 0x72, 0x69,
+	0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6d, 0x69,
+	0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x4d, 0x69, 0x73, 0x63, 0x1a, 0x52, 0x0a, 0x0e, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61,
+	0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x73, 0x69, 0x31,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x72, 0x73, 0x73, 0x69, 0x31, 0x12, 0x14, 0x0a,
+	0x05, 0x72, 0x73, 0x73, 0x69, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x72, 0x73,
+	0x73, 0x69, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x73, 0x69, 0x33, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x05, 0x72, 0x73, 0x73, 0x69, 0x33, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22,
+	0x43, 0x0a, 0x0b, 0x4c, 0x4c, 0x41, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10,
+	0x0a, 0x03, 0x6c, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c, 0x61, 0x74,
+	0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c,
+	0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x03, 0x61, 0x6c, 0x74, 0x22, 0x38, 0x0a, 0x0c, 0x45, 0x43, 0x45, 0x46, 0x50, 0x6f, 0x73, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x79,
+	0x12, 0x0c, 0x0a, 0x01, 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x7a, 0x22, 0x1a,
+	0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+	0x53, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x19, 0x49, 0x6e,
+	0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61,
+	0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64,
+	0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x73, 0x61, 0x66, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x73, 0x61, 0x66, 0x65, 0x22, 0x72, 0x0a,
+	0x15, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63,
+	0x6c, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x73,
+	0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x9e, 0x01, 0x0a, 0x0a,
+	0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f,
+	0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
+	0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4f, 0x52, 0x47, 0x4f, 0x54, 0x54, 0x45, 0x4e,
+	0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x43, 0x59, 0x43, 0x4c,
+	0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x03,
+	0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x55, 0x50, 0x44,
+	0x41, 0x54, 0x45, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f,
+	0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x50, 0x54, 0x49,
+	0x4d, 0x45, 0x5f, 0x46, 0x44, 0x49, 0x52, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x50,
+	0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x46, 0x44, 0x49, 0x52, 0x10, 0x07, 0x42, 0x17, 0x5a, 0x15,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1024,37 +2066,59 @@ func file_spacex_api_device_common_proto_rawDescGZIP()
 	return file_spacex_api_device_common_proto_rawDescData
 }
 
-var file_spacex_api_device_common_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_spacex_api_device_common_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
+var file_spacex_api_device_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_spacex_api_device_common_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
 var file_spacex_api_device_common_proto_goTypes = []interface{}{
-	(EthernetNetworkInterface_Duplex)(0), // 0: SpaceX.API.Device.EthernetNetworkInterface.Duplex
-	(*DeviceInfo)(nil),                   // 1: SpaceX.API.Device.DeviceInfo
-	(*DeviceState)(nil),                  // 2: SpaceX.API.Device.DeviceState
-	(*SignedData)(nil),                   // 3: SpaceX.API.Device.SignedData
-	(*GetNextIdRequest)(nil),             // 4: SpaceX.API.Device.GetNextIdRequest
-	(*GetNextIdResponse)(nil),            // 5: SpaceX.API.Device.GetNextIdResponse
-	(*PingTarget)(nil),                   // 6: SpaceX.API.Device.PingTarget
-	(*PingResult)(nil),                   // 7: SpaceX.API.Device.PingResult
-	(*BondingChallenge)(nil),             // 8: SpaceX.API.Device.BondingChallenge
-	(*AuthenticateRequest)(nil),          // 9: SpaceX.API.Device.AuthenticateRequest
-	(*ChallengeResponse)(nil),            // 10: SpaceX.API.Device.ChallengeResponse
-	(*NetworkInterface)(nil),             // 11: SpaceX.API.Device.NetworkInterface
-	(*EthernetNetworkInterface)(nil),     // 12: SpaceX.API.Device.EthernetNetworkInterface
-	(*NetworkInterface_RxStats)(nil),     // 13: SpaceX.API.Device.NetworkInterface.RxStats
-	(*NetworkInterface_TxStats)(nil),     // 14: SpaceX.API.Device.NetworkInterface.TxStats
+	(BootReason)(0),                                  // 0: SpaceX.API.Device.BootReason
+	(EthernetNetworkInterface_Duplex)(0),             // 1: SpaceX.API.Device.EthernetNetworkInterface.Duplex
+	(*DeviceInfo)(nil),                               // 2: SpaceX.API.Device.DeviceInfo
+	(*DeviceState)(nil),                              // 3: SpaceX.API.Device.DeviceState
+	(*SignedData)(nil),                               // 4: SpaceX.API.Device.SignedData
+	(*GetNextIdRequest)(nil),                         // 5: SpaceX.API.Device.GetNextIdRequest
+	(*GetNextIdResponse)(nil),                        // 6: SpaceX.API.Device.GetNextIdResponse
+	(*BootInfo)(nil),                                 // 7: SpaceX.API.Device.BootInfo
+	(*PingTarget)(nil),                               // 8: SpaceX.API.Device.PingTarget
+	(*PingResult)(nil),                               // 9: SpaceX.API.Device.PingResult
+	(*BondingChallenge)(nil),                         // 10: SpaceX.API.Device.BondingChallenge
+	(*AuthenticateRequest)(nil),                      // 11: SpaceX.API.Device.AuthenticateRequest
+	(*ChallengeResponse)(nil),                        // 12: SpaceX.API.Device.ChallengeResponse
+	(*NetworkInterface)(nil),                         // 13: SpaceX.API.Device.NetworkInterface
+	(*EthernetNetworkInterface)(nil),                 // 14: SpaceX.API.Device.EthernetNetworkInterface
+	(*WifiNetworkInterface)(nil),                     // 15: SpaceX.API.Device.WifiNetworkInterface
+	(*LLAPosition)(nil),                              // 16: SpaceX.API.Device.LLAPosition
+	(*ECEFPosition)(nil),                             // 17: SpaceX.API.Device.ECEFPosition
+	(*InitiateRemoteSshRequest)(nil),                 // 18: SpaceX.API.Device.InitiateRemoteSshRequest
+	(*InitiateRemoteSshResponse)(nil),                // 19: SpaceX.API.Device.InitiateRemoteSshResponse
+	(*SoftwareUpdateRequest)(nil),                    // 20: SpaceX.API.Device.SoftwareUpdateRequest
+	(*SoftwareUpdateResponse)(nil),                   // 21: SpaceX.API.Device.SoftwareUpdateResponse
+	nil,                                              // 22: SpaceX.API.Device.BootInfo.CountByReasonEntry
+	nil,                                              // 23: SpaceX.API.Device.BootInfo.CountByReasonDeltaEntry
+	(*NetworkInterface_RxStats)(nil),                 // 24: SpaceX.API.Device.NetworkInterface.RxStats
+	(*NetworkInterface_TxStats)(nil),                 // 25: SpaceX.API.Device.NetworkInterface.TxStats
+	(*WifiNetworkInterface_ThermalStatus)(nil),       // 26: SpaceX.API.Device.WifiNetworkInterface.ThermalStatus
+	(*WifiNetworkInterface_InvalidPacketCounts)(nil), // 27: SpaceX.API.Device.WifiNetworkInterface.InvalidPacketCounts
+	(*WifiNetworkInterface_AntennaeStatus)(nil),      // 28: SpaceX.API.Device.WifiNetworkInterface.AntennaeStatus
 }
 var file_spacex_api_device_common_proto_depIdxs = []int32{
-	6,  // 0: SpaceX.API.Device.PingResult.target:type_name -> SpaceX.API.Device.PingTarget
-	3,  // 1: SpaceX.API.Device.AuthenticateRequest.challenge:type_name -> SpaceX.API.Device.SignedData
-	13, // 2: SpaceX.API.Device.NetworkInterface.rx_stats:type_name -> SpaceX.API.Device.NetworkInterface.RxStats
-	14, // 3: SpaceX.API.Device.NetworkInterface.tx_stats:type_name -> SpaceX.API.Device.NetworkInterface.TxStats
-	12, // 4: SpaceX.API.Device.NetworkInterface.ethernet:type_name -> SpaceX.API.Device.EthernetNetworkInterface
-	0,  // 5: SpaceX.API.Device.EthernetNetworkInterface.duplex:type_name -> SpaceX.API.Device.EthernetNetworkInterface.Duplex
-	6,  // [6:6] is the sub-list for method output_type
-	6,  // [6:6] is the sub-list for method input_type
-	6,  // [6:6] is the sub-list for extension type_name
-	6,  // [6:6] is the sub-list for extension extendee
-	0,  // [0:6] is the sub-list for field type_name
+	7,  // 0: SpaceX.API.Device.DeviceInfo.boot:type_name -> SpaceX.API.Device.BootInfo
+	22, // 1: SpaceX.API.Device.BootInfo.count_by_reason:type_name -> SpaceX.API.Device.BootInfo.CountByReasonEntry
+	23, // 2: SpaceX.API.Device.BootInfo.count_by_reason_delta:type_name -> SpaceX.API.Device.BootInfo.CountByReasonDeltaEntry
+	0,  // 3: SpaceX.API.Device.BootInfo.last_reason:type_name -> SpaceX.API.Device.BootReason
+	8,  // 4: SpaceX.API.Device.PingResult.target:type_name -> SpaceX.API.Device.PingTarget
+	4,  // 5: SpaceX.API.Device.AuthenticateRequest.challenge:type_name -> SpaceX.API.Device.SignedData
+	24, // 6: SpaceX.API.Device.NetworkInterface.rx_stats:type_name -> SpaceX.API.Device.NetworkInterface.RxStats
+	25, // 7: SpaceX.API.Device.NetworkInterface.tx_stats:type_name -> SpaceX.API.Device.NetworkInterface.TxStats
+	14, // 8: SpaceX.API.Device.NetworkInterface.ethernet:type_name -> SpaceX.API.Device.EthernetNetworkInterface
+	15, // 9: SpaceX.API.Device.NetworkInterface.wifi:type_name -> SpaceX.API.Device.WifiNetworkInterface
+	1,  // 10: SpaceX.API.Device.EthernetNetworkInterface.duplex:type_name -> SpaceX.API.Device.EthernetNetworkInterface.Duplex
+	26, // 11: SpaceX.API.Device.WifiNetworkInterface.thermal_status:type_name -> SpaceX.API.Device.WifiNetworkInterface.ThermalStatus
+	27, // 12: SpaceX.API.Device.WifiNetworkInterface.invalid_packet_counts:type_name -> SpaceX.API.Device.WifiNetworkInterface.InvalidPacketCounts
+	28, // 13: SpaceX.API.Device.WifiNetworkInterface.antennae_status:type_name -> SpaceX.API.Device.WifiNetworkInterface.AntennaeStatus
+	14, // [14:14] is the sub-list for method output_type
+	14, // [14:14] is the sub-list for method input_type
+	14, // [14:14] is the sub-list for extension type_name
+	14, // [14:14] is the sub-list for extension extendee
+	0,  // [0:14] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_common_proto_init() }
@@ -1124,7 +2188,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PingTarget); i {
+			switch v := v.(*BootInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1136,7 +2200,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PingResult); i {
+			switch v := v.(*PingTarget); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1148,7 +2212,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BondingChallenge); i {
+			switch v := v.(*PingResult); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1160,7 +2224,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AuthenticateRequest); i {
+			switch v := v.(*BondingChallenge); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1172,7 +2236,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChallengeResponse); i {
+			switch v := v.(*AuthenticateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1184,7 +2248,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NetworkInterface); i {
+			switch v := v.(*ChallengeResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1196,7 +2260,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*EthernetNetworkInterface); i {
+			switch v := v.(*NetworkInterface); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1208,7 +2272,7 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NetworkInterface_RxStats); i {
+			switch v := v.(*EthernetNetworkInterface); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1220,6 +2284,102 @@ func file_spacex_api_device_common_proto_init() {
 			}
 		}
 		file_spacex_api_device_common_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNetworkInterface); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*LLAPosition); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ECEFPosition); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InitiateRemoteSshRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InitiateRemoteSshResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SoftwareUpdateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SoftwareUpdateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*NetworkInterface_RxStats); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*NetworkInterface_TxStats); i {
 			case 0:
 				return &v.state
@@ -1231,17 +2391,54 @@ func file_spacex_api_device_common_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_common_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNetworkInterface_ThermalStatus); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNetworkInterface_InvalidPacketCounts); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_common_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNetworkInterface_AntennaeStatus); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
-	file_spacex_api_device_common_proto_msgTypes[10].OneofWrappers = []interface{}{
+	file_spacex_api_device_common_proto_msgTypes[11].OneofWrappers = []interface{}{
 		(*NetworkInterface_Ethernet)(nil),
+		(*NetworkInterface_Wifi)(nil),
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_common_proto_rawDesc,
-			NumEnums:      1,
-			NumMessages:   14,
+			NumEnums:      2,
+			NumMessages:   27,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
blob - 44c322e88b68755c9bc1ddbbb58d8e29a3ec4d6f
blob + b0a7b32d96a67681d898c69fa0a8a7f534910c46
--- device/device.pb.go
+++ device/device.pb.go
@@ -19,8 +19,176 @@ const (
 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
 	// Verify that runtime/protoimpl is sufficiently up-to-date.
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type PositionSource int32
+
+const (
+	PositionSource_AUTO     PositionSource = 0
+	PositionSource_NONE     PositionSource = 1
+	PositionSource_UT_INFO  PositionSource = 2
+	PositionSource_EXTERNAL PositionSource = 3
+	PositionSource_GPS      PositionSource = 4
+	PositionSource_STARLINK PositionSource = 5
+)
+
+// Enum value maps for PositionSource.
+var (
+	PositionSource_name = map[int32]string{
+		0: "AUTO",
+		1: "NONE",
+		2: "UT_INFO",
+		3: "EXTERNAL",
+		4: "GPS",
+		5: "STARLINK",
+	}
+	PositionSource_value = map[string]int32{
+		"AUTO":     0,
+		"NONE":     1,
+		"UT_INFO":  2,
+		"EXTERNAL": 3,
+		"GPS":      4,
+		"STARLINK": 5,
+	}
+)
+
+func (x PositionSource) Enum() *PositionSource {
+	p := new(PositionSource)
+	*p = x
+	return p
+}
+
+func (x PositionSource) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PositionSource) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_device_proto_enumTypes[0].Descriptor()
+}
+
+func (PositionSource) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_device_proto_enumTypes[0]
+}
+
+func (x PositionSource) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use PositionSource.Descriptor instead.
+func (PositionSource) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{0}
+}
+
+type SpeedtestError int32
+
+const (
+	SpeedtestError_SPEEDTEST_ERROR_NONE      SpeedtestError = 0
+	SpeedtestError_SPEEDTEST_ERROR_UNKNOWN   SpeedtestError = 1
+	SpeedtestError_SPEEDTEST_ERROR_TOKEN     SpeedtestError = 2
+	SpeedtestError_SPEEDTEST_ERROR_API       SpeedtestError = 3
+	SpeedtestError_SPEEDTEST_ERROR_NO_RESULT SpeedtestError = 4
+	SpeedtestError_SPEEDTEST_ERROR_OFFLINE   SpeedtestError = 5
+)
+
+// Enum value maps for SpeedtestError.
+var (
+	SpeedtestError_name = map[int32]string{
+		0: "SPEEDTEST_ERROR_NONE",
+		1: "SPEEDTEST_ERROR_UNKNOWN",
+		2: "SPEEDTEST_ERROR_TOKEN",
+		3: "SPEEDTEST_ERROR_API",
+		4: "SPEEDTEST_ERROR_NO_RESULT",
+		5: "SPEEDTEST_ERROR_OFFLINE",
+	}
+	SpeedtestError_value = map[string]int32{
+		"SPEEDTEST_ERROR_NONE":      0,
+		"SPEEDTEST_ERROR_UNKNOWN":   1,
+		"SPEEDTEST_ERROR_TOKEN":     2,
+		"SPEEDTEST_ERROR_API":       3,
+		"SPEEDTEST_ERROR_NO_RESULT": 4,
+		"SPEEDTEST_ERROR_OFFLINE":   5,
+	}
+)
+
+func (x SpeedtestError) Enum() *SpeedtestError {
+	p := new(SpeedtestError)
+	*p = x
+	return p
+}
+
+func (x SpeedtestError) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SpeedtestError) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_device_proto_enumTypes[1].Descriptor()
+}
+
+func (SpeedtestError) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_device_proto_enumTypes[1]
+}
+
+func (x SpeedtestError) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SpeedtestError.Descriptor instead.
+func (SpeedtestError) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{1}
+}
+
+type ClientPlatform_Platform int32
+
+const (
+	ClientPlatform_UNKNOWN ClientPlatform_Platform = 0
+	ClientPlatform_IOS     ClientPlatform_Platform = 1
+	ClientPlatform_ANDROID ClientPlatform_Platform = 2
+	ClientPlatform_WEB     ClientPlatform_Platform = 3
+)
+
+// Enum value maps for ClientPlatform_Platform.
+var (
+	ClientPlatform_Platform_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "IOS",
+		2: "ANDROID",
+		3: "WEB",
+	}
+	ClientPlatform_Platform_value = map[string]int32{
+		"UNKNOWN": 0,
+		"IOS":     1,
+		"ANDROID": 2,
+		"WEB":     3,
+	}
 )
 
+func (x ClientPlatform_Platform) Enum() *ClientPlatform_Platform {
+	p := new(ClientPlatform_Platform)
+	*p = x
+	return p
+}
+
+func (x ClientPlatform_Platform) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ClientPlatform_Platform) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_device_proto_enumTypes[2].Descriptor()
+}
+
+func (ClientPlatform_Platform) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_device_proto_enumTypes[2]
+}
+
+func (x ClientPlatform_Platform) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ClientPlatform_Platform.Descriptor instead.
+func (ClientPlatform_Platform) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{22, 0}
+}
+
 type ToDevice struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -182,6 +350,7 @@ type Request struct {
 	//	*Request_SignedRequest
 	//	*Request_GetNextId
 	//	*Request_Authenticate
+	//	*Request_EnableDebugTelem
 	//	*Request_FactoryReset
 	//	*Request_GetDeviceInfo
 	//	*Request_GetHistory
@@ -195,13 +364,39 @@ type Request struct {
 	//	*Request_SetTrustedKeys
 	//	*Request_SpeedTest
 	//	*Request_Update
+	//	*Request_GetLocation
+	//	*Request_GetHeapDump
+	//	*Request_RestartControl
+	//	*Request_Fuse
+	//	*Request_GetPersistentStats
+	//	*Request_GetConnections
+	//	*Request_StartSpeedtest
+	//	*Request_GetSpeedtestStatus
+	//	*Request_ReportClientSpeedtest
+	//	*Request_InitiateRemoteSsh
+	//	*Request_SelfTest
+	//	*Request_SetTestMode
+	//	*Request_SoftwareUpdate
 	//	*Request_DishStow
+	//	*Request_StartDishSelfTest
+	//	*Request_DishGetContext
+	//	*Request_DishGetObstructionMap
+	//	*Request_DishSetEmc
+	//	*Request_DishGetEmc
+	//	*Request_DishSetConfig
+	//	*Request_DishGetConfig
 	//	*Request_TransceiverIfLoopbackTest
 	//	*Request_TransceiverGetStatus
+	//	*Request_TransceiverGetTelemetry
 	//	*Request_WifiGetClients
+	//	*Request_WifiGetDiagnostics
 	//	*Request_WifiGetPingMetrics
 	//	*Request_WifiSetConfig
+	//	*Request_WifiGetConfig
 	//	*Request_WifiSetup
+	//	*Request_WifiSetMeshDeviceTrust
+	//	*Request_WifiSetMeshConfig
+	//	*Request_WifiGetClientHistory
 	Request isRequest_Request `protobuf_oneof:"request"`
 }
 
@@ -286,6 +481,13 @@ func (x *Request) GetAuthenticate() *AuthenticateReque
 	return nil
 }
 
+func (x *Request) GetEnableDebugTelem() *EnableDebugTelemRequest {
+	if x, ok := x.GetRequest().(*Request_EnableDebugTelem); ok {
+		return x.EnableDebugTelem
+	}
+	return nil
+}
+
 func (x *Request) GetFactoryReset() *FactoryResetRequest {
 	if x, ok := x.GetRequest().(*Request_FactoryReset); ok {
 		return x.FactoryReset
@@ -377,6 +579,97 @@ func (x *Request) GetUpdate() *UpdateRequest {
 	return nil
 }
 
+func (x *Request) GetGetLocation() *GetLocationRequest {
+	if x, ok := x.GetRequest().(*Request_GetLocation); ok {
+		return x.GetLocation
+	}
+	return nil
+}
+
+func (x *Request) GetGetHeapDump() *GetHeapDumpRequest {
+	if x, ok := x.GetRequest().(*Request_GetHeapDump); ok {
+		return x.GetHeapDump
+	}
+	return nil
+}
+
+func (x *Request) GetRestartControl() *RestartControlRequest {
+	if x, ok := x.GetRequest().(*Request_RestartControl); ok {
+		return x.RestartControl
+	}
+	return nil
+}
+
+func (x *Request) GetFuse() *FuseRequest {
+	if x, ok := x.GetRequest().(*Request_Fuse); ok {
+		return x.Fuse
+	}
+	return nil
+}
+
+func (x *Request) GetGetPersistentStats() *GetPersistentStatsRequest {
+	if x, ok := x.GetRequest().(*Request_GetPersistentStats); ok {
+		return x.GetPersistentStats
+	}
+	return nil
+}
+
+func (x *Request) GetGetConnections() *GetConnectionsRequest {
+	if x, ok := x.GetRequest().(*Request_GetConnections); ok {
+		return x.GetConnections
+	}
+	return nil
+}
+
+func (x *Request) GetStartSpeedtest() *StartSpeedtestRequest {
+	if x, ok := x.GetRequest().(*Request_StartSpeedtest); ok {
+		return x.StartSpeedtest
+	}
+	return nil
+}
+
+func (x *Request) GetGetSpeedtestStatus() *GetSpeedtestStatusRequest {
+	if x, ok := x.GetRequest().(*Request_GetSpeedtestStatus); ok {
+		return x.GetSpeedtestStatus
+	}
+	return nil
+}
+
+func (x *Request) GetReportClientSpeedtest() *ReportClientSpeedtestRequest {
+	if x, ok := x.GetRequest().(*Request_ReportClientSpeedtest); ok {
+		return x.ReportClientSpeedtest
+	}
+	return nil
+}
+
+func (x *Request) GetInitiateRemoteSsh() *InitiateRemoteSshRequest {
+	if x, ok := x.GetRequest().(*Request_InitiateRemoteSsh); ok {
+		return x.InitiateRemoteSsh
+	}
+	return nil
+}
+
+func (x *Request) GetSelfTest() *SelfTestRequest {
+	if x, ok := x.GetRequest().(*Request_SelfTest); ok {
+		return x.SelfTest
+	}
+	return nil
+}
+
+func (x *Request) GetSetTestMode() *SetTestModeRequest {
+	if x, ok := x.GetRequest().(*Request_SetTestMode); ok {
+		return x.SetTestMode
+	}
+	return nil
+}
+
+func (x *Request) GetSoftwareUpdate() *SoftwareUpdateRequest {
+	if x, ok := x.GetRequest().(*Request_SoftwareUpdate); ok {
+		return x.SoftwareUpdate
+	}
+	return nil
+}
+
 func (x *Request) GetDishStow() *DishStowRequest {
 	if x, ok := x.GetRequest().(*Request_DishStow); ok {
 		return x.DishStow
@@ -384,6 +677,55 @@ func (x *Request) GetDishStow() *DishStowRequest {
 	return nil
 }
 
+func (x *Request) GetStartDishSelfTest() *StartDishSelfTestRequest {
+	if x, ok := x.GetRequest().(*Request_StartDishSelfTest); ok {
+		return x.StartDishSelfTest
+	}
+	return nil
+}
+
+func (x *Request) GetDishGetContext() *DishGetContextRequest {
+	if x, ok := x.GetRequest().(*Request_DishGetContext); ok {
+		return x.DishGetContext
+	}
+	return nil
+}
+
+func (x *Request) GetDishGetObstructionMap() *DishGetObstructionMapRequest {
+	if x, ok := x.GetRequest().(*Request_DishGetObstructionMap); ok {
+		return x.DishGetObstructionMap
+	}
+	return nil
+}
+
+func (x *Request) GetDishSetEmc() *DishSetEmcRequest {
+	if x, ok := x.GetRequest().(*Request_DishSetEmc); ok {
+		return x.DishSetEmc
+	}
+	return nil
+}
+
+func (x *Request) GetDishGetEmc() *DishGetEmcRequest {
+	if x, ok := x.GetRequest().(*Request_DishGetEmc); ok {
+		return x.DishGetEmc
+	}
+	return nil
+}
+
+func (x *Request) GetDishSetConfig() *DishSetConfigRequest {
+	if x, ok := x.GetRequest().(*Request_DishSetConfig); ok {
+		return x.DishSetConfig
+	}
+	return nil
+}
+
+func (x *Request) GetDishGetConfig() *DishGetConfigRequest {
+	if x, ok := x.GetRequest().(*Request_DishGetConfig); ok {
+		return x.DishGetConfig
+	}
+	return nil
+}
+
 func (x *Request) GetTransceiverIfLoopbackTest() *TransceiverIFLoopbackTestRequest {
 	if x, ok := x.GetRequest().(*Request_TransceiverIfLoopbackTest); ok {
 		return x.TransceiverIfLoopbackTest
@@ -398,6 +740,13 @@ func (x *Request) GetTransceiverGetStatus() *Transceiv
 	return nil
 }
 
+func (x *Request) GetTransceiverGetTelemetry() *TransceiverGetTelemetryRequest {
+	if x, ok := x.GetRequest().(*Request_TransceiverGetTelemetry); ok {
+		return x.TransceiverGetTelemetry
+	}
+	return nil
+}
+
 func (x *Request) GetWifiGetClients() *WifiGetClientsRequest {
 	if x, ok := x.GetRequest().(*Request_WifiGetClients); ok {
 		return x.WifiGetClients
@@ -405,6 +754,13 @@ func (x *Request) GetWifiGetClients() *WifiGetClientsR
 	return nil
 }
 
+func (x *Request) GetWifiGetDiagnostics() *WifiGetDiagnosticsRequest {
+	if x, ok := x.GetRequest().(*Request_WifiGetDiagnostics); ok {
+		return x.WifiGetDiagnostics
+	}
+	return nil
+}
+
 func (x *Request) GetWifiGetPingMetrics() *WifiGetPingMetricsRequest {
 	if x, ok := x.GetRequest().(*Request_WifiGetPingMetrics); ok {
 		return x.WifiGetPingMetrics
@@ -419,6 +775,13 @@ func (x *Request) GetWifiSetConfig() *WifiSetConfigReq
 	return nil
 }
 
+func (x *Request) GetWifiGetConfig() *WifiGetConfigRequest {
+	if x, ok := x.GetRequest().(*Request_WifiGetConfig); ok {
+		return x.WifiGetConfig
+	}
+	return nil
+}
+
 func (x *Request) GetWifiSetup() *WifiSetupRequest {
 	if x, ok := x.GetRequest().(*Request_WifiSetup); ok {
 		return x.WifiSetup
@@ -426,6 +789,27 @@ func (x *Request) GetWifiSetup() *WifiSetupRequest {
 	return nil
 }
 
+func (x *Request) GetWifiSetMeshDeviceTrust() *WifiSetMeshDeviceTrustRequest {
+	if x, ok := x.GetRequest().(*Request_WifiSetMeshDeviceTrust); ok {
+		return x.WifiSetMeshDeviceTrust
+	}
+	return nil
+}
+
+func (x *Request) GetWifiSetMeshConfig() *WifiSetMeshConfigRequest {
+	if x, ok := x.GetRequest().(*Request_WifiSetMeshConfig); ok {
+		return x.WifiSetMeshConfig
+	}
+	return nil
+}
+
+func (x *Request) GetWifiGetClientHistory() *WifiGetClientHistoryRequest {
+	if x, ok := x.GetRequest().(*Request_WifiGetClientHistory); ok {
+		return x.WifiGetClientHistory
+	}
+	return nil
+}
+
 type isRequest_Request interface {
 	isRequest_Request()
 }
@@ -440,6 +824,10 @@ type Request_GetNextId struct {
 
 type Request_Authenticate struct {
 	Authenticate *AuthenticateRequest `protobuf:"bytes,1005,opt,name=authenticate,proto3,oneof"`
+}
+
+type Request_EnableDebugTelem struct {
+	EnableDebugTelem *EnableDebugTelemRequest `protobuf:"bytes,1034,opt,name=enable_debug_telem,json=enableDebugTelem,proto3,oneof"`
 }
 
 type Request_FactoryReset struct {
@@ -494,10 +882,90 @@ type Request_Update struct {
 	Update *UpdateRequest `protobuf:"bytes,1014,opt,name=update,proto3,oneof"`
 }
 
+type Request_GetLocation struct {
+	GetLocation *GetLocationRequest `protobuf:"bytes,1017,opt,name=get_location,json=getLocation,proto3,oneof"`
+}
+
+type Request_GetHeapDump struct {
+	GetHeapDump *GetHeapDumpRequest `protobuf:"bytes,1019,opt,name=get_heap_dump,json=getHeapDump,proto3,oneof"`
+}
+
+type Request_RestartControl struct {
+	RestartControl *RestartControlRequest `protobuf:"bytes,1020,opt,name=restart_control,json=restartControl,proto3,oneof"`
+}
+
+type Request_Fuse struct {
+	Fuse *FuseRequest `protobuf:"bytes,1021,opt,name=fuse,proto3,oneof"`
+}
+
+type Request_GetPersistentStats struct {
+	GetPersistentStats *GetPersistentStatsRequest `protobuf:"bytes,1022,opt,name=get_persistent_stats,json=getPersistentStats,proto3,oneof"`
+}
+
+type Request_GetConnections struct {
+	GetConnections *GetConnectionsRequest `protobuf:"bytes,1023,opt,name=get_connections,json=getConnections,proto3,oneof"`
+}
+
+type Request_StartSpeedtest struct {
+	StartSpeedtest *StartSpeedtestRequest `protobuf:"bytes,1027,opt,name=start_speedtest,json=startSpeedtest,proto3,oneof"`
+}
+
+type Request_GetSpeedtestStatus struct {
+	GetSpeedtestStatus *GetSpeedtestStatusRequest `protobuf:"bytes,1028,opt,name=get_speedtest_status,json=getSpeedtestStatus,proto3,oneof"`
+}
+
+type Request_ReportClientSpeedtest struct {
+	ReportClientSpeedtest *ReportClientSpeedtestRequest `protobuf:"bytes,1029,opt,name=report_client_speedtest,json=reportClientSpeedtest,proto3,oneof"`
+}
+
+type Request_InitiateRemoteSsh struct {
+	InitiateRemoteSsh *InitiateRemoteSshRequest `protobuf:"bytes,1030,opt,name=initiate_remote_ssh,json=initiateRemoteSsh,proto3,oneof"`
+}
+
+type Request_SelfTest struct {
+	SelfTest *SelfTestRequest `protobuf:"bytes,1031,opt,name=self_test,json=selfTest,proto3,oneof"`
+}
+
+type Request_SetTestMode struct {
+	SetTestMode *SetTestModeRequest `protobuf:"bytes,1032,opt,name=set_test_mode,json=setTestMode,proto3,oneof"`
+}
+
+type Request_SoftwareUpdate struct {
+	SoftwareUpdate *SoftwareUpdateRequest `protobuf:"bytes,1033,opt,name=software_update,json=softwareUpdate,proto3,oneof"`
+}
+
 type Request_DishStow struct {
 	DishStow *DishStowRequest `protobuf:"bytes,2002,opt,name=dish_stow,json=dishStow,proto3,oneof"`
 }
 
+type Request_StartDishSelfTest struct {
+	StartDishSelfTest *StartDishSelfTestRequest `protobuf:"bytes,2012,opt,name=start_dish_self_test,json=startDishSelfTest,proto3,oneof"`
+}
+
+type Request_DishGetContext struct {
+	DishGetContext *DishGetContextRequest `protobuf:"bytes,2003,opt,name=dish_get_context,json=dishGetContext,proto3,oneof"`
+}
+
+type Request_DishGetObstructionMap struct {
+	DishGetObstructionMap *DishGetObstructionMapRequest `protobuf:"bytes,2008,opt,name=dish_get_obstruction_map,json=dishGetObstructionMap,proto3,oneof"`
+}
+
+type Request_DishSetEmc struct {
+	DishSetEmc *DishSetEmcRequest `protobuf:"bytes,2007,opt,name=dish_set_emc,json=dishSetEmc,proto3,oneof"`
+}
+
+type Request_DishGetEmc struct {
+	DishGetEmc *DishGetEmcRequest `protobuf:"bytes,2009,opt,name=dish_get_emc,json=dishGetEmc,proto3,oneof"`
+}
+
+type Request_DishSetConfig struct {
+	DishSetConfig *DishSetConfigRequest `protobuf:"bytes,2010,opt,name=dish_set_config,json=dishSetConfig,proto3,oneof"`
+}
+
+type Request_DishGetConfig struct {
+	DishGetConfig *DishGetConfigRequest `protobuf:"bytes,2011,opt,name=dish_get_config,json=dishGetConfig,proto3,oneof"`
+}
+
 type Request_TransceiverIfLoopbackTest struct {
 	TransceiverIfLoopbackTest *TransceiverIFLoopbackTestRequest `protobuf:"bytes,4001,opt,name=transceiver_if_loopback_test,json=transceiverIfLoopbackTest,proto3,oneof"`
 }
@@ -506,10 +974,18 @@ type Request_TransceiverGetStatus struct {
 	TransceiverGetStatus *TransceiverGetStatusRequest `protobuf:"bytes,4003,opt,name=transceiver_get_status,json=transceiverGetStatus,proto3,oneof"`
 }
 
+type Request_TransceiverGetTelemetry struct {
+	TransceiverGetTelemetry *TransceiverGetTelemetryRequest `protobuf:"bytes,4004,opt,name=transceiver_get_telemetry,json=transceiverGetTelemetry,proto3,oneof"`
+}
+
 type Request_WifiGetClients struct {
 	WifiGetClients *WifiGetClientsRequest `protobuf:"bytes,3002,opt,name=wifi_get_clients,json=wifiGetClients,proto3,oneof"`
 }
 
+type Request_WifiGetDiagnostics struct {
+	WifiGetDiagnostics *WifiGetDiagnosticsRequest `protobuf:"bytes,3008,opt,name=wifi_get_diagnostics,json=wifiGetDiagnostics,proto3,oneof"`
+}
+
 type Request_WifiGetPingMetrics struct {
 	WifiGetPingMetrics *WifiGetPingMetricsRequest `protobuf:"bytes,3007,opt,name=wifi_get_ping_metrics,json=wifiGetPingMetrics,proto3,oneof"`
 }
@@ -518,16 +994,34 @@ type Request_WifiSetConfig struct {
 	WifiSetConfig *WifiSetConfigRequest `protobuf:"bytes,3001,opt,name=wifi_set_config,json=wifiSetConfig,proto3,oneof"`
 }
 
+type Request_WifiGetConfig struct {
+	WifiGetConfig *WifiGetConfigRequest `protobuf:"bytes,3009,opt,name=wifi_get_config,json=wifiGetConfig,proto3,oneof"`
+}
+
 type Request_WifiSetup struct {
 	WifiSetup *WifiSetupRequest `protobuf:"bytes,3003,opt,name=wifi_setup,json=wifiSetup,proto3,oneof"`
 }
 
+type Request_WifiSetMeshDeviceTrust struct {
+	WifiSetMeshDeviceTrust *WifiSetMeshDeviceTrustRequest `protobuf:"bytes,3012,opt,name=wifi_set_mesh_device_trust,json=wifiSetMeshDeviceTrust,proto3,oneof"`
+}
+
+type Request_WifiSetMeshConfig struct {
+	WifiSetMeshConfig *WifiSetMeshConfigRequest `protobuf:"bytes,3013,opt,name=wifi_set_mesh_config,json=wifiSetMeshConfig,proto3,oneof"`
+}
+
+type Request_WifiGetClientHistory struct {
+	WifiGetClientHistory *WifiGetClientHistoryRequest `protobuf:"bytes,3015,opt,name=wifi_get_client_history,json=wifiGetClientHistory,proto3,oneof"`
+}
+
 func (*Request_SignedRequest) isRequest_Request() {}
 
 func (*Request_GetNextId) isRequest_Request() {}
 
 func (*Request_Authenticate) isRequest_Request() {}
 
+func (*Request_EnableDebugTelem) isRequest_Request() {}
+
 func (*Request_FactoryReset) isRequest_Request() {}
 
 func (*Request_GetDeviceInfo) isRequest_Request() {}
@@ -554,30 +1048,84 @@ func (*Request_SpeedTest) isRequest_Request() {}
 
 func (*Request_Update) isRequest_Request() {}
 
+func (*Request_GetLocation) isRequest_Request() {}
+
+func (*Request_GetHeapDump) isRequest_Request() {}
+
+func (*Request_RestartControl) isRequest_Request() {}
+
+func (*Request_Fuse) isRequest_Request() {}
+
+func (*Request_GetPersistentStats) isRequest_Request() {}
+
+func (*Request_GetConnections) isRequest_Request() {}
+
+func (*Request_StartSpeedtest) isRequest_Request() {}
+
+func (*Request_GetSpeedtestStatus) isRequest_Request() {}
+
+func (*Request_ReportClientSpeedtest) isRequest_Request() {}
+
+func (*Request_InitiateRemoteSsh) isRequest_Request() {}
+
+func (*Request_SelfTest) isRequest_Request() {}
+
+func (*Request_SetTestMode) isRequest_Request() {}
+
+func (*Request_SoftwareUpdate) isRequest_Request() {}
+
 func (*Request_DishStow) isRequest_Request() {}
 
+func (*Request_StartDishSelfTest) isRequest_Request() {}
+
+func (*Request_DishGetContext) isRequest_Request() {}
+
+func (*Request_DishGetObstructionMap) isRequest_Request() {}
+
+func (*Request_DishSetEmc) isRequest_Request() {}
+
+func (*Request_DishGetEmc) isRequest_Request() {}
+
+func (*Request_DishSetConfig) isRequest_Request() {}
+
+func (*Request_DishGetConfig) isRequest_Request() {}
+
 func (*Request_TransceiverIfLoopbackTest) isRequest_Request() {}
 
 func (*Request_TransceiverGetStatus) isRequest_Request() {}
 
+func (*Request_TransceiverGetTelemetry) isRequest_Request() {}
+
 func (*Request_WifiGetClients) isRequest_Request() {}
 
+func (*Request_WifiGetDiagnostics) isRequest_Request() {}
+
 func (*Request_WifiGetPingMetrics) isRequest_Request() {}
 
 func (*Request_WifiSetConfig) isRequest_Request() {}
 
+func (*Request_WifiGetConfig) isRequest_Request() {}
+
 func (*Request_WifiSetup) isRequest_Request() {}
 
+func (*Request_WifiSetMeshDeviceTrust) isRequest_Request() {}
+
+func (*Request_WifiSetMeshConfig) isRequest_Request() {}
+
+func (*Request_WifiGetClientHistory) isRequest_Request() {}
+
 type Response struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id     uint64         `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
-	Status *status.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	Id         uint64         `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	Status     *status.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	ApiVersion uint64         `protobuf:"varint,3,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"`
 	// Types that are assignable to Response:
 	//
 	//	*Response_GetNextId
+	//	*Response_EnableDebugTelem
 	//	*Response_FactoryReset
 	//	*Response_GetDeviceInfo
 	//	*Response_GetLog
@@ -589,19 +1137,45 @@ type Response struct {
 	//	*Response_SetSku
 	//	*Response_SetTrustedKeys
 	//	*Response_Update
+	//	*Response_GetLocation
+	//	*Response_GetHeapDump
+	//	*Response_RestartControl
+	//	*Response_Fuse
+	//	*Response_GetConnections
+	//	*Response_StartSpeedtest
+	//	*Response_GetSpeedtestStatus
+	//	*Response_ReportClientSpeedtest
+	//	*Response_InitiateRemoteSsh
+	//	*Response_SelfTest
+	//	*Response_SetTestMode
+	//	*Response_SoftwareUpdate
 	//	*Response_DishAuthenticate
+	//	*Response_DishGetContext
 	//	*Response_DishGetHistory
 	//	*Response_DishGetStatus
+	//	*Response_DishGetObstructionMap
 	//	*Response_DishStow
+	//	*Response_StartDishSelfTest
+	//	*Response_DishSetEmc
+	//	*Response_DishGetEmc
+	//	*Response_DishSetConfig
+	//	*Response_DishGetConfig
 	//	*Response_TransceiverIfLoopbackTest
 	//	*Response_TransceiverGetStatus
+	//	*Response_TransceiverGetTelemetry
 	//	*Response_WifiAuthenticate
 	//	*Response_WifiGetClients
+	//	*Response_WifiGetDiagnostics
 	//	*Response_WifiGetHistory
 	//	*Response_WifiGetPingMetrics
 	//	*Response_WifiGetStatus
 	//	*Response_WifiSetConfig
+	//	*Response_WifiGetConfig
 	//	*Response_WifiSetup
+	//	*Response_WifiGetPersistentStats
+	//	*Response_WifiSetMeshDeviceTrust
+	//	*Response_WifiSetMeshConfig
+	//	*Response_WifiGetClientHistory
 	Response isResponse_Response `protobuf_oneof:"response"`
 }
 
@@ -651,6 +1225,13 @@ func (x *Response) GetStatus() *status.Status {
 	return nil
 }
 
+func (x *Response) GetApiVersion() uint64 {
+	if x != nil {
+		return x.ApiVersion
+	}
+	return 0
+}
+
 func (m *Response) GetResponse() isResponse_Response {
 	if m != nil {
 		return m.Response
@@ -665,6 +1246,13 @@ func (x *Response) GetGetNextId() *GetNextIdResponse {
 	return nil
 }
 
+func (x *Response) GetEnableDebugTelem() *EnableDebugTelemResponse {
+	if x, ok := x.GetResponse().(*Response_EnableDebugTelem); ok {
+		return x.EnableDebugTelem
+	}
+	return nil
+}
+
 func (x *Response) GetFactoryReset() *FactoryResetResponse {
 	if x, ok := x.GetResponse().(*Response_FactoryReset); ok {
 		return x.FactoryReset
@@ -738,10 +1326,94 @@ func (x *Response) GetSetTrustedKeys() *SetTrustedKeys
 func (x *Response) GetUpdate() *UpdateResponse {
 	if x, ok := x.GetResponse().(*Response_Update); ok {
 		return x.Update
+	}
+	return nil
+}
+
+func (x *Response) GetGetLocation() *GetLocationResponse {
+	if x, ok := x.GetResponse().(*Response_GetLocation); ok {
+		return x.GetLocation
+	}
+	return nil
+}
+
+func (x *Response) GetGetHeapDump() *GetHeapDumpResponse {
+	if x, ok := x.GetResponse().(*Response_GetHeapDump); ok {
+		return x.GetHeapDump
+	}
+	return nil
+}
+
+func (x *Response) GetRestartControl() *RestartControlResponse {
+	if x, ok := x.GetResponse().(*Response_RestartControl); ok {
+		return x.RestartControl
+	}
+	return nil
+}
+
+func (x *Response) GetFuse() *FuseResponse {
+	if x, ok := x.GetResponse().(*Response_Fuse); ok {
+		return x.Fuse
+	}
+	return nil
+}
+
+func (x *Response) GetGetConnections() *GetConnectionsResponse {
+	if x, ok := x.GetResponse().(*Response_GetConnections); ok {
+		return x.GetConnections
+	}
+	return nil
+}
+
+func (x *Response) GetStartSpeedtest() *StartSpeedtestResponse {
+	if x, ok := x.GetResponse().(*Response_StartSpeedtest); ok {
+		return x.StartSpeedtest
+	}
+	return nil
+}
+
+func (x *Response) GetGetSpeedtestStatus() *GetSpeedtestStatusResponse {
+	if x, ok := x.GetResponse().(*Response_GetSpeedtestStatus); ok {
+		return x.GetSpeedtestStatus
+	}
+	return nil
+}
+
+func (x *Response) GetReportClientSpeedtest() *ReportClientSpeedtestResponse {
+	if x, ok := x.GetResponse().(*Response_ReportClientSpeedtest); ok {
+		return x.ReportClientSpeedtest
 	}
 	return nil
 }
 
+func (x *Response) GetInitiateRemoteSsh() *InitiateRemoteSshResponse {
+	if x, ok := x.GetResponse().(*Response_InitiateRemoteSsh); ok {
+		return x.InitiateRemoteSsh
+	}
+	return nil
+}
+
+func (x *Response) GetSelfTest() *SelfTestResponse {
+	if x, ok := x.GetResponse().(*Response_SelfTest); ok {
+		return x.SelfTest
+	}
+	return nil
+}
+
+func (x *Response) GetSetTestMode() *SetTestModeResponse {
+	if x, ok := x.GetResponse().(*Response_SetTestMode); ok {
+		return x.SetTestMode
+	}
+	return nil
+}
+
+func (x *Response) GetSoftwareUpdate() *SoftwareUpdateResponse {
+	if x, ok := x.GetResponse().(*Response_SoftwareUpdate); ok {
+		return x.SoftwareUpdate
+	}
+	return nil
+}
+
 func (x *Response) GetDishAuthenticate() *DishAuthenticateResponse {
 	if x, ok := x.GetResponse().(*Response_DishAuthenticate); ok {
 		return x.DishAuthenticate
@@ -749,6 +1421,13 @@ func (x *Response) GetDishAuthenticate() *DishAuthenti
 	return nil
 }
 
+func (x *Response) GetDishGetContext() *DishGetContextResponse {
+	if x, ok := x.GetResponse().(*Response_DishGetContext); ok {
+		return x.DishGetContext
+	}
+	return nil
+}
+
 func (x *Response) GetDishGetHistory() *DishGetHistoryResponse {
 	if x, ok := x.GetResponse().(*Response_DishGetHistory); ok {
 		return x.DishGetHistory
@@ -763,6 +1442,13 @@ func (x *Response) GetDishGetStatus() *DishGetStatusRe
 	return nil
 }
 
+func (x *Response) GetDishGetObstructionMap() *DishGetObstructionMapResponse {
+	if x, ok := x.GetResponse().(*Response_DishGetObstructionMap); ok {
+		return x.DishGetObstructionMap
+	}
+	return nil
+}
+
 func (x *Response) GetDishStow() *DishStowResponse {
 	if x, ok := x.GetResponse().(*Response_DishStow); ok {
 		return x.DishStow
@@ -770,6 +1456,41 @@ func (x *Response) GetDishStow() *DishStowResponse {
 	return nil
 }
 
+func (x *Response) GetStartDishSelfTest() *StartDishSelfTestResponse {
+	if x, ok := x.GetResponse().(*Response_StartDishSelfTest); ok {
+		return x.StartDishSelfTest
+	}
+	return nil
+}
+
+func (x *Response) GetDishSetEmc() *DishSetEmcResponse {
+	if x, ok := x.GetResponse().(*Response_DishSetEmc); ok {
+		return x.DishSetEmc
+	}
+	return nil
+}
+
+func (x *Response) GetDishGetEmc() *DishGetEmcResponse {
+	if x, ok := x.GetResponse().(*Response_DishGetEmc); ok {
+		return x.DishGetEmc
+	}
+	return nil
+}
+
+func (x *Response) GetDishSetConfig() *DishSetConfigResponse {
+	if x, ok := x.GetResponse().(*Response_DishSetConfig); ok {
+		return x.DishSetConfig
+	}
+	return nil
+}
+
+func (x *Response) GetDishGetConfig() *DishGetConfigResponse {
+	if x, ok := x.GetResponse().(*Response_DishGetConfig); ok {
+		return x.DishGetConfig
+	}
+	return nil
+}
+
 func (x *Response) GetTransceiverIfLoopbackTest() *TransceiverIFLoopbackTestResponse {
 	if x, ok := x.GetResponse().(*Response_TransceiverIfLoopbackTest); ok {
 		return x.TransceiverIfLoopbackTest
@@ -784,6 +1505,13 @@ func (x *Response) GetTransceiverGetStatus() *Transcei
 	return nil
 }
 
+func (x *Response) GetTransceiverGetTelemetry() *TransceiverGetTelemetryResponse {
+	if x, ok := x.GetResponse().(*Response_TransceiverGetTelemetry); ok {
+		return x.TransceiverGetTelemetry
+	}
+	return nil
+}
+
 func (x *Response) GetWifiAuthenticate() *WifiAuthenticateResponse {
 	if x, ok := x.GetResponse().(*Response_WifiAuthenticate); ok {
 		return x.WifiAuthenticate
@@ -798,6 +1526,13 @@ func (x *Response) GetWifiGetClients() *WifiGetClients
 	return nil
 }
 
+func (x *Response) GetWifiGetDiagnostics() *WifiGetDiagnosticsResponse {
+	if x, ok := x.GetResponse().(*Response_WifiGetDiagnostics); ok {
+		return x.WifiGetDiagnostics
+	}
+	return nil
+}
+
 func (x *Response) GetWifiGetHistory() *WifiGetHistoryResponse {
 	if x, ok := x.GetResponse().(*Response_WifiGetHistory); ok {
 		return x.WifiGetHistory
@@ -826,6 +1561,13 @@ func (x *Response) GetWifiSetConfig() *WifiSetConfigRe
 	return nil
 }
 
+func (x *Response) GetWifiGetConfig() *WifiGetConfigResponse {
+	if x, ok := x.GetResponse().(*Response_WifiGetConfig); ok {
+		return x.WifiGetConfig
+	}
+	return nil
+}
+
 func (x *Response) GetWifiSetup() *WifiSetupResponse {
 	if x, ok := x.GetResponse().(*Response_WifiSetup); ok {
 		return x.WifiSetup
@@ -833,6 +1575,34 @@ func (x *Response) GetWifiSetup() *WifiSetupResponse {
 	return nil
 }
 
+func (x *Response) GetWifiGetPersistentStats() *WifiGetPersistentStatsResponse {
+	if x, ok := x.GetResponse().(*Response_WifiGetPersistentStats); ok {
+		return x.WifiGetPersistentStats
+	}
+	return nil
+}
+
+func (x *Response) GetWifiSetMeshDeviceTrust() *WifiSetMeshDeviceTrustResponse {
+	if x, ok := x.GetResponse().(*Response_WifiSetMeshDeviceTrust); ok {
+		return x.WifiSetMeshDeviceTrust
+	}
+	return nil
+}
+
+func (x *Response) GetWifiSetMeshConfig() *WifiSetMeshConfigResponse {
+	if x, ok := x.GetResponse().(*Response_WifiSetMeshConfig); ok {
+		return x.WifiSetMeshConfig
+	}
+	return nil
+}
+
+func (x *Response) GetWifiGetClientHistory() *WifiGetClientHistoryResponse {
+	if x, ok := x.GetResponse().(*Response_WifiGetClientHistory); ok {
+		return x.WifiGetClientHistory
+	}
+	return nil
+}
+
 type isResponse_Response interface {
 	isResponse_Response()
 }
@@ -841,6 +1611,10 @@ type Response_GetNextId struct {
 	GetNextId *GetNextIdResponse `protobuf:"bytes,1006,opt,name=get_next_id,json=getNextId,proto3,oneof"`
 }
 
+type Response_EnableDebugTelem struct {
+	EnableDebugTelem *EnableDebugTelemResponse `protobuf:"bytes,1034,opt,name=enable_debug_telem,json=enableDebugTelem,proto3,oneof"`
+}
+
 type Response_FactoryReset struct {
 	FactoryReset *FactoryResetResponse `protobuf:"bytes,1011,opt,name=factory_reset,json=factoryReset,proto3,oneof"`
 }
@@ -885,10 +1659,62 @@ type Response_Update struct {
 	Update *UpdateResponse `protobuf:"bytes,1014,opt,name=update,proto3,oneof"`
 }
 
+type Response_GetLocation struct {
+	GetLocation *GetLocationResponse `protobuf:"bytes,1017,opt,name=get_location,json=getLocation,proto3,oneof"`
+}
+
+type Response_GetHeapDump struct {
+	GetHeapDump *GetHeapDumpResponse `protobuf:"bytes,1019,opt,name=get_heap_dump,json=getHeapDump,proto3,oneof"`
+}
+
+type Response_RestartControl struct {
+	RestartControl *RestartControlResponse `protobuf:"bytes,1020,opt,name=restart_control,json=restartControl,proto3,oneof"`
+}
+
+type Response_Fuse struct {
+	Fuse *FuseResponse `protobuf:"bytes,1021,opt,name=fuse,proto3,oneof"`
+}
+
+type Response_GetConnections struct {
+	GetConnections *GetConnectionsResponse `protobuf:"bytes,1023,opt,name=get_connections,json=getConnections,proto3,oneof"`
+}
+
+type Response_StartSpeedtest struct {
+	StartSpeedtest *StartSpeedtestResponse `protobuf:"bytes,1027,opt,name=start_speedtest,json=startSpeedtest,proto3,oneof"`
+}
+
+type Response_GetSpeedtestStatus struct {
+	GetSpeedtestStatus *GetSpeedtestStatusResponse `protobuf:"bytes,1028,opt,name=get_speedtest_status,json=getSpeedtestStatus,proto3,oneof"`
+}
+
+type Response_ReportClientSpeedtest struct {
+	ReportClientSpeedtest *ReportClientSpeedtestResponse `protobuf:"bytes,1029,opt,name=report_client_speedtest,json=reportClientSpeedtest,proto3,oneof"`
+}
+
+type Response_InitiateRemoteSsh struct {
+	InitiateRemoteSsh *InitiateRemoteSshResponse `protobuf:"bytes,1030,opt,name=initiate_remote_ssh,json=initiateRemoteSsh,proto3,oneof"`
+}
+
+type Response_SelfTest struct {
+	SelfTest *SelfTestResponse `protobuf:"bytes,1031,opt,name=self_test,json=selfTest,proto3,oneof"`
+}
+
+type Response_SetTestMode struct {
+	SetTestMode *SetTestModeResponse `protobuf:"bytes,1032,opt,name=set_test_mode,json=setTestMode,proto3,oneof"`
+}
+
+type Response_SoftwareUpdate struct {
+	SoftwareUpdate *SoftwareUpdateResponse `protobuf:"bytes,1033,opt,name=software_update,json=softwareUpdate,proto3,oneof"`
+}
+
 type Response_DishAuthenticate struct {
 	DishAuthenticate *DishAuthenticateResponse `protobuf:"bytes,2005,opt,name=dish_authenticate,json=dishAuthenticate,proto3,oneof"`
 }
 
+type Response_DishGetContext struct {
+	DishGetContext *DishGetContextResponse `protobuf:"bytes,2003,opt,name=dish_get_context,json=dishGetContext,proto3,oneof"`
+}
+
 type Response_DishGetHistory struct {
 	DishGetHistory *DishGetHistoryResponse `protobuf:"bytes,2006,opt,name=dish_get_history,json=dishGetHistory,proto3,oneof"`
 }
@@ -897,10 +1723,34 @@ type Response_DishGetStatus struct {
 	DishGetStatus *DishGetStatusResponse `protobuf:"bytes,2004,opt,name=dish_get_status,json=dishGetStatus,proto3,oneof"`
 }
 
+type Response_DishGetObstructionMap struct {
+	DishGetObstructionMap *DishGetObstructionMapResponse `protobuf:"bytes,2008,opt,name=dish_get_obstruction_map,json=dishGetObstructionMap,proto3,oneof"`
+}
+
 type Response_DishStow struct {
 	DishStow *DishStowResponse `protobuf:"bytes,2002,opt,name=dish_stow,json=dishStow,proto3,oneof"`
 }
 
+type Response_StartDishSelfTest struct {
+	StartDishSelfTest *StartDishSelfTestResponse `protobuf:"bytes,2012,opt,name=start_dish_self_test,json=startDishSelfTest,proto3,oneof"`
+}
+
+type Response_DishSetEmc struct {
+	DishSetEmc *DishSetEmcResponse `protobuf:"bytes,2007,opt,name=dish_set_emc,json=dishSetEmc,proto3,oneof"`
+}
+
+type Response_DishGetEmc struct {
+	DishGetEmc *DishGetEmcResponse `protobuf:"bytes,2009,opt,name=dish_get_emc,json=dishGetEmc,proto3,oneof"`
+}
+
+type Response_DishSetConfig struct {
+	DishSetConfig *DishSetConfigResponse `protobuf:"bytes,2010,opt,name=dish_set_config,json=dishSetConfig,proto3,oneof"`
+}
+
+type Response_DishGetConfig struct {
+	DishGetConfig *DishGetConfigResponse `protobuf:"bytes,2011,opt,name=dish_get_config,json=dishGetConfig,proto3,oneof"`
+}
+
 type Response_TransceiverIfLoopbackTest struct {
 	TransceiverIfLoopbackTest *TransceiverIFLoopbackTestResponse `protobuf:"bytes,4001,opt,name=transceiver_if_loopback_test,json=transceiverIfLoopbackTest,proto3,oneof"`
 }
@@ -909,6 +1759,10 @@ type Response_TransceiverGetStatus struct {
 	TransceiverGetStatus *TransceiverGetStatusResponse `protobuf:"bytes,4003,opt,name=transceiver_get_status,json=transceiverGetStatus,proto3,oneof"`
 }
 
+type Response_TransceiverGetTelemetry struct {
+	TransceiverGetTelemetry *TransceiverGetTelemetryResponse `protobuf:"bytes,4004,opt,name=transceiver_get_telemetry,json=transceiverGetTelemetry,proto3,oneof"`
+}
+
 type Response_WifiAuthenticate struct {
 	WifiAuthenticate *WifiAuthenticateResponse `protobuf:"bytes,3005,opt,name=wifi_authenticate,json=wifiAuthenticate,proto3,oneof"`
 }
@@ -917,6 +1771,10 @@ type Response_WifiGetClients struct {
 	WifiGetClients *WifiGetClientsResponse `protobuf:"bytes,3002,opt,name=wifi_get_clients,json=wifiGetClients,proto3,oneof"`
 }
 
+type Response_WifiGetDiagnostics struct {
+	WifiGetDiagnostics *WifiGetDiagnosticsResponse `protobuf:"bytes,3008,opt,name=wifi_get_diagnostics,json=wifiGetDiagnostics,proto3,oneof"`
+}
+
 type Response_WifiGetHistory struct {
 	WifiGetHistory *WifiGetHistoryResponse `protobuf:"bytes,3006,opt,name=wifi_get_history,json=wifiGetHistory,proto3,oneof"`
 }
@@ -933,12 +1791,34 @@ type Response_WifiSetConfig struct {
 	WifiSetConfig *WifiSetConfigResponse `protobuf:"bytes,3001,opt,name=wifi_set_config,json=wifiSetConfig,proto3,oneof"`
 }
 
+type Response_WifiGetConfig struct {
+	WifiGetConfig *WifiGetConfigResponse `protobuf:"bytes,3009,opt,name=wifi_get_config,json=wifiGetConfig,proto3,oneof"`
+}
+
 type Response_WifiSetup struct {
 	WifiSetup *WifiSetupResponse `protobuf:"bytes,3003,opt,name=wifi_setup,json=wifiSetup,proto3,oneof"`
 }
 
+type Response_WifiGetPersistentStats struct {
+	WifiGetPersistentStats *WifiGetPersistentStatsResponse `protobuf:"bytes,3022,opt,name=wifi_get_persistent_stats,json=wifiGetPersistentStats,proto3,oneof"`
+}
+
+type Response_WifiSetMeshDeviceTrust struct {
+	WifiSetMeshDeviceTrust *WifiSetMeshDeviceTrustResponse `protobuf:"bytes,3012,opt,name=wifi_set_mesh_device_trust,json=wifiSetMeshDeviceTrust,proto3,oneof"`
+}
+
+type Response_WifiSetMeshConfig struct {
+	WifiSetMeshConfig *WifiSetMeshConfigResponse `protobuf:"bytes,3013,opt,name=wifi_set_mesh_config,json=wifiSetMeshConfig,proto3,oneof"`
+}
+
+type Response_WifiGetClientHistory struct {
+	WifiGetClientHistory *WifiGetClientHistoryResponse `protobuf:"bytes,3015,opt,name=wifi_get_client_history,json=wifiGetClientHistory,proto3,oneof"`
+}
+
 func (*Response_GetNextId) isResponse_Response() {}
 
+func (*Response_EnableDebugTelem) isResponse_Response() {}
+
 func (*Response_FactoryReset) isResponse_Response() {}
 
 func (*Response_GetDeviceInfo) isResponse_Response() {}
@@ -960,23 +1840,65 @@ func (*Response_SetSku) isResponse_Response() {}
 func (*Response_SetTrustedKeys) isResponse_Response() {}
 
 func (*Response_Update) isResponse_Response() {}
+
+func (*Response_GetLocation) isResponse_Response() {}
+
+func (*Response_GetHeapDump) isResponse_Response() {}
+
+func (*Response_RestartControl) isResponse_Response() {}
+
+func (*Response_Fuse) isResponse_Response() {}
+
+func (*Response_GetConnections) isResponse_Response() {}
+
+func (*Response_StartSpeedtest) isResponse_Response() {}
+
+func (*Response_GetSpeedtestStatus) isResponse_Response() {}
+
+func (*Response_ReportClientSpeedtest) isResponse_Response() {}
+
+func (*Response_InitiateRemoteSsh) isResponse_Response() {}
+
+func (*Response_SelfTest) isResponse_Response() {}
+
+func (*Response_SetTestMode) isResponse_Response() {}
+
+func (*Response_SoftwareUpdate) isResponse_Response() {}
 
 func (*Response_DishAuthenticate) isResponse_Response() {}
 
+func (*Response_DishGetContext) isResponse_Response() {}
+
 func (*Response_DishGetHistory) isResponse_Response() {}
 
 func (*Response_DishGetStatus) isResponse_Response() {}
 
+func (*Response_DishGetObstructionMap) isResponse_Response() {}
+
 func (*Response_DishStow) isResponse_Response() {}
 
+func (*Response_StartDishSelfTest) isResponse_Response() {}
+
+func (*Response_DishSetEmc) isResponse_Response() {}
+
+func (*Response_DishGetEmc) isResponse_Response() {}
+
+func (*Response_DishSetConfig) isResponse_Response() {}
+
+func (*Response_DishGetConfig) isResponse_Response() {}
+
 func (*Response_TransceiverIfLoopbackTest) isResponse_Response() {}
 
 func (*Response_TransceiverGetStatus) isResponse_Response() {}
 
+func (*Response_TransceiverGetTelemetry) isResponse_Response() {}
+
 func (*Response_WifiAuthenticate) isResponse_Response() {}
 
 func (*Response_WifiGetClients) isResponse_Response() {}
 
+func (*Response_WifiGetDiagnostics) isResponse_Response() {}
+
 func (*Response_WifiGetHistory) isResponse_Response() {}
 
 func (*Response_WifiGetPingMetrics) isResponse_Response() {}
@@ -985,8 +1907,18 @@ func (*Response_WifiGetStatus) isResponse_Response() {
 
 func (*Response_WifiSetConfig) isResponse_Response() {}
 
+func (*Response_WifiGetConfig) isResponse_Response() {}
+
 func (*Response_WifiSetup) isResponse_Response() {}
 
+func (*Response_WifiGetPersistentStats) isResponse_Response() {}
+
+func (*Response_WifiSetMeshDeviceTrust) isResponse_Response() {}
+
+func (*Response_WifiSetMeshConfig) isResponse_Response() {}
+
+func (*Response_WifiGetClientHistory) isResponse_Response() {}
+
 type Event struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -996,6 +1928,7 @@ type Event struct {
 	//
 	//	*Event_WifiNewClientConnected
 	//	*Event_WifiAccountBonding
+	//	*Event_WifiNewPeer
 	Event isEvent_Event `protobuf_oneof:"event"`
 }
 
@@ -1052,6 +1985,13 @@ func (x *Event) GetWifiAccountBonding() *WifiAccountBo
 	return nil
 }
 
+func (x *Event) GetWifiNewPeer() *WifiNewPeerEvent {
+	if x, ok := x.GetEvent().(*Event_WifiNewPeer); ok {
+		return x.WifiNewPeer
+	}
+	return nil
+}
+
 type isEvent_Event interface {
 	isEvent_Event()
 }
@@ -1064,18 +2004,26 @@ type Event_WifiAccountBonding struct {
 	WifiAccountBonding *WifiAccountBondingEvent `protobuf:"bytes,3002,opt,name=wifi_account_bonding,json=wifiAccountBonding,proto3,oneof"`
 }
 
+type Event_WifiNewPeer struct {
+	WifiNewPeer *WifiNewPeerEvent `protobuf:"bytes,3003,opt,name=wifi_new_peer,json=wifiNewPeer,proto3,oneof"`
+}
+
 func (*Event_WifiNewClientConnected) isEvent_Event() {}
 
 func (*Event_WifiAccountBonding) isEvent_Event() {}
 
-type FactoryResetRequest struct {
+func (*Event_WifiNewPeer) isEvent_Event() {}
+
+type EnableDebugTelemRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	DurationM uint32 `protobuf:"varint,1,opt,name=duration_m,json=durationM,proto3" json:"duration_m,omitempty"`
 }
 
-func (x *FactoryResetRequest) Reset() {
-	*x = FactoryResetRequest{}
+func (x *EnableDebugTelemRequest) Reset() {
+	*x = EnableDebugTelemRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_device_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1083,13 +2031,13 @@ func (x *FactoryResetRequest) Reset() {
 	}
 }
 
-func (x *FactoryResetRequest) String() string {
+func (x *EnableDebugTelemRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*FactoryResetRequest) ProtoMessage() {}
+func (*EnableDebugTelemRequest) ProtoMessage() {}
 
-func (x *FactoryResetRequest) ProtoReflect() protoreflect.Message {
+func (x *EnableDebugTelemRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_device_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1101,19 +2049,26 @@ func (x *FactoryResetRequest) ProtoReflect() protorefl
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use FactoryResetRequest.ProtoReflect.Descriptor instead.
-func (*FactoryResetRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use EnableDebugTelemRequest.ProtoReflect.Descriptor instead.
+func (*EnableDebugTelemRequest) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{5}
 }
 
-type FactoryResetResponse struct {
+func (x *EnableDebugTelemRequest) GetDurationM() uint32 {
+	if x != nil {
+		return x.DurationM
+	}
+	return 0
+}
+
+type EnableDebugTelemResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 }
 
-func (x *FactoryResetResponse) Reset() {
-	*x = FactoryResetResponse{}
+func (x *EnableDebugTelemResponse) Reset() {
+	*x = EnableDebugTelemResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_device_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1121,13 +2076,13 @@ func (x *FactoryResetResponse) Reset() {
 	}
 }
 
-func (x *FactoryResetResponse) String() string {
+func (x *EnableDebugTelemResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*FactoryResetResponse) ProtoMessage() {}
+func (*EnableDebugTelemResponse) ProtoMessage() {}
 
-func (x *FactoryResetResponse) ProtoReflect() protoreflect.Message {
+func (x *EnableDebugTelemResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_device_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1139,19 +2094,19 @@ func (x *FactoryResetResponse) ProtoReflect() protoref
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use FactoryResetResponse.ProtoReflect.Descriptor instead.
-func (*FactoryResetResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use EnableDebugTelemResponse.ProtoReflect.Descriptor instead.
+func (*EnableDebugTelemResponse) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{6}
 }
 
-type GetHistoryRequest struct {
+type FactoryResetRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 }
 
-func (x *GetHistoryRequest) Reset() {
-	*x = GetHistoryRequest{}
+func (x *FactoryResetRequest) Reset() {
+	*x = FactoryResetRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_device_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1159,13 +2114,13 @@ func (x *GetHistoryRequest) Reset() {
 	}
 }
 
-func (x *GetHistoryRequest) String() string {
+func (x *FactoryResetRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetHistoryRequest) ProtoMessage() {}
+func (*FactoryResetRequest) ProtoMessage() {}
 
-func (x *GetHistoryRequest) ProtoReflect() protoreflect.Message {
+func (x *FactoryResetRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_device_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1177,19 +2132,19 @@ func (x *GetHistoryRequest) ProtoReflect() protoreflec
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetHistoryRequest.ProtoReflect.Descriptor instead.
-func (*GetHistoryRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use FactoryResetRequest.ProtoReflect.Descriptor instead.
+func (*FactoryResetRequest) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{7}
 }
 
-type GetLogRequest struct {
+type FactoryResetResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 }
 
-func (x *GetLogRequest) Reset() {
-	*x = GetLogRequest{}
+func (x *FactoryResetResponse) Reset() {
+	*x = FactoryResetResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_device_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1197,13 +2152,13 @@ func (x *GetLogRequest) Reset() {
 	}
 }
 
-func (x *GetLogRequest) String() string {
+func (x *FactoryResetResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetLogRequest) ProtoMessage() {}
+func (*FactoryResetResponse) ProtoMessage() {}
 
-func (x *GetLogRequest) ProtoReflect() protoreflect.Message {
+func (x *FactoryResetResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_device_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1215,16 +2170,168 @@ func (x *GetLogRequest) ProtoReflect() protoreflect.Me
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetLogRequest.ProtoReflect.Descriptor instead.
-func (*GetLogRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use FactoryResetResponse.ProtoReflect.Descriptor instead.
+func (*FactoryResetResponse) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{8}
 }
 
-type GetLogResponse struct {
+type FuseRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+}
+
+func (x *FuseRequest) Reset() {
+	*x = FuseRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FuseRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FuseRequest) ProtoMessage() {}
+
+func (x *FuseRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FuseRequest.ProtoReflect.Descriptor instead.
+func (*FuseRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{9}
+}
+
+type FuseResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *FuseResponse) Reset() {
+	*x = FuseResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FuseResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FuseResponse) ProtoMessage() {}
+
+func (x *FuseResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FuseResponse.ProtoReflect.Descriptor instead.
+func (*FuseResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{10}
+}
+
+type GetHistoryRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetHistoryRequest) Reset() {
+	*x = GetHistoryRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetHistoryRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetHistoryRequest) ProtoMessage() {}
+
+func (x *GetHistoryRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetHistoryRequest.ProtoReflect.Descriptor instead.
+func (*GetHistoryRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{11}
+}
+
+type GetLogRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetLogRequest) Reset() {
+	*x = GetLogRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetLogRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetLogRequest) ProtoMessage() {}
 
+func (x *GetLogRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetLogRequest.ProtoReflect.Descriptor instead.
+func (*GetLogRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{12}
+}
+
+type GetLogResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
 	Syslog     string `protobuf:"bytes,1,opt,name=syslog,proto3" json:"syslog,omitempty"`
 	OfflineLog string `protobuf:"bytes,2,opt,name=offline_log,json=offlineLog,proto3" json:"offline_log,omitempty"`
 }
@@ -1232,7 +2339,7 @@ type GetLogResponse struct {
 func (x *GetLogResponse) Reset() {
 	*x = GetLogResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[9]
+		mi := &file_spacex_api_device_device_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1245,7 +2352,7 @@ func (x *GetLogResponse) String() string {
 func (*GetLogResponse) ProtoMessage() {}
 
 func (x *GetLogResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[9]
+	mi := &file_spacex_api_device_device_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1258,7 +2365,7 @@ func (x *GetLogResponse) ProtoReflect() protoreflect.M
 
 // Deprecated: Use GetLogResponse.ProtoReflect.Descriptor instead.
 func (*GetLogResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{9}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *GetLogResponse) GetSyslog() string {
@@ -1284,7 +2391,7 @@ type GetPingRequest struct {
 func (x *GetPingRequest) Reset() {
 	*x = GetPingRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[10]
+		mi := &file_spacex_api_device_device_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1297,7 +2404,7 @@ func (x *GetPingRequest) String() string {
 func (*GetPingRequest) ProtoMessage() {}
 
 func (x *GetPingRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[10]
+	mi := &file_spacex_api_device_device_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1310,7 +2417,7 @@ func (x *GetPingRequest) ProtoReflect() protoreflect.M
 
 // Deprecated: Use GetPingRequest.ProtoReflect.Descriptor instead.
 func (*GetPingRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{10}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{14}
 }
 
 type GetPingResponse struct {
@@ -1324,7 +2431,7 @@ type GetPingResponse struct {
 func (x *GetPingResponse) Reset() {
 	*x = GetPingResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[11]
+		mi := &file_spacex_api_device_device_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1337,7 +2444,7 @@ func (x *GetPingResponse) String() string {
 func (*GetPingResponse) ProtoMessage() {}
 
 func (x *GetPingResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[11]
+	mi := &file_spacex_api_device_device_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1350,7 +2457,7 @@ func (x *GetPingResponse) ProtoReflect() protoreflect.
 
 // Deprecated: Use GetPingResponse.ProtoReflect.Descriptor instead.
 func (*GetPingResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{11}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *GetPingResponse) GetResults() map[string]*PingResult {
@@ -1371,7 +2478,7 @@ type PingHostRequest struct {
 func (x *PingHostRequest) Reset() {
 	*x = PingHostRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[12]
+		mi := &file_spacex_api_device_device_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1384,7 +2491,7 @@ func (x *PingHostRequest) String() string {
 func (*PingHostRequest) ProtoMessage() {}
 
 func (x *PingHostRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[12]
+	mi := &file_spacex_api_device_device_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1397,7 +2504,7 @@ func (x *PingHostRequest) ProtoReflect() protoreflect.
 
 // Deprecated: Use PingHostRequest.ProtoReflect.Descriptor instead.
 func (*PingHostRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{12}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *PingHostRequest) GetAddress() string {
@@ -1418,7 +2525,7 @@ type PingHostResponse struct {
 func (x *PingHostResponse) Reset() {
 	*x = PingHostResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[13]
+		mi := &file_spacex_api_device_device_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1431,7 +2538,7 @@ func (x *PingHostResponse) String() string {
 func (*PingHostResponse) ProtoMessage() {}
 
 func (x *PingHostResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[13]
+	mi := &file_spacex_api_device_device_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1444,7 +2551,7 @@ func (x *PingHostResponse) ProtoReflect() protoreflect
 
 // Deprecated: Use PingHostResponse.ProtoReflect.Descriptor instead.
 func (*PingHostResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{13}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *PingHostResponse) GetResult() *PingResult {
@@ -1463,7 +2570,7 @@ type GetStatusRequest struct {
 func (x *GetStatusRequest) Reset() {
 	*x = GetStatusRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[14]
+		mi := &file_spacex_api_device_device_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1476,7 +2583,7 @@ func (x *GetStatusRequest) String() string {
 func (*GetStatusRequest) ProtoMessage() {}
 
 func (x *GetStatusRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[14]
+	mi := &file_spacex_api_device_device_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1489,7 +2596,7 @@ func (x *GetStatusRequest) ProtoReflect() protoreflect
 
 // Deprecated: Use GetStatusRequest.ProtoReflect.Descriptor instead.
 func (*GetStatusRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{14}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{18}
 }
 
 type RebootRequest struct {
@@ -1501,7 +2608,7 @@ type RebootRequest struct {
 func (x *RebootRequest) Reset() {
 	*x = RebootRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[15]
+		mi := &file_spacex_api_device_device_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1514,7 +2621,7 @@ func (x *RebootRequest) String() string {
 func (*RebootRequest) ProtoMessage() {}
 
 func (x *RebootRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[15]
+	mi := &file_spacex_api_device_device_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1527,7 +2634,7 @@ func (x *RebootRequest) ProtoReflect() protoreflect.Me
 
 // Deprecated: Use RebootRequest.ProtoReflect.Descriptor instead.
 func (*RebootRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{15}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{19}
 }
 
 type RebootResponse struct {
@@ -1539,7 +2646,7 @@ type RebootResponse struct {
 func (x *RebootResponse) Reset() {
 	*x = RebootResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[16]
+		mi := &file_spacex_api_device_device_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1552,7 +2659,7 @@ func (x *RebootResponse) String() string {
 func (*RebootResponse) ProtoMessage() {}
 
 func (x *RebootResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[16]
+	mi := &file_spacex_api_device_device_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1565,19 +2672,158 @@ func (x *RebootResponse) ProtoReflect() protoreflect.M
 
 // Deprecated: Use RebootResponse.ProtoReflect.Descriptor instead.
 func (*RebootResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{16}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{20}
+}
+
+type SpeedTestStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	StartTime    uint64  `protobuf:"varint,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
+	UploadMbps   float32 `protobuf:"fixed32,1,opt,name=upload_mbps,json=uploadMbps,proto3" json:"upload_mbps,omitempty"`
+	DownloadMbps float32 `protobuf:"fixed32,2,opt,name=download_mbps,json=downloadMbps,proto3" json:"download_mbps,omitempty"`
+	LatencyMs    float32 `protobuf:"fixed32,3,opt,name=latency_ms,json=latencyMs,proto3" json:"latency_ms,omitempty"`
+}
+
+func (x *SpeedTestStats) Reset() {
+	*x = SpeedTestStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SpeedTestStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpeedTestStats) ProtoMessage() {}
+
+func (x *SpeedTestStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpeedTestStats.ProtoReflect.Descriptor instead.
+func (*SpeedTestStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *SpeedTestStats) GetStartTime() uint64 {
+	if x != nil {
+		return x.StartTime
+	}
+	return 0
+}
+
+func (x *SpeedTestStats) GetUploadMbps() float32 {
+	if x != nil {
+		return x.UploadMbps
+	}
+	return 0
 }
 
+func (x *SpeedTestStats) GetDownloadMbps() float32 {
+	if x != nil {
+		return x.DownloadMbps
+	}
+	return 0
+}
+
+func (x *SpeedTestStats) GetLatencyMs() float32 {
+	if x != nil {
+		return x.LatencyMs
+	}
+	return 0
+}
+
+type ClientPlatform struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Platform     ClientPlatform_Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=SpaceX.API.Device.ClientPlatform_Platform" json:"platform,omitempty"`
+	MajorVersion float32                 `protobuf:"fixed32,2,opt,name=major_version,json=majorVersion,proto3" json:"major_version,omitempty"`
+	MinorVersion float32                 `protobuf:"fixed32,3,opt,name=minor_version,json=minorVersion,proto3" json:"minor_version,omitempty"`
+}
+
+func (x *ClientPlatform) Reset() {
+	*x = ClientPlatform{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ClientPlatform) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ClientPlatform) ProtoMessage() {}
+
+func (x *ClientPlatform) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ClientPlatform.ProtoReflect.Descriptor instead.
+func (*ClientPlatform) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *ClientPlatform) GetPlatform() ClientPlatform_Platform {
+	if x != nil {
+		return x.Platform
+	}
+	return ClientPlatform_UNKNOWN
+}
+
+func (x *ClientPlatform) GetMajorVersion() float32 {
+	if x != nil {
+		return x.MajorVersion
+	}
+	return 0
+}
+
+func (x *ClientPlatform) GetMinorVersion() float32 {
+	if x != nil {
+		return x.MinorVersion
+	}
+	return 0
+}
+
 type SpeedTestRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	Id              uint32          `protobuf:"varint,4,opt,name=id,proto3" json:"id,omitempty"`
+	ClientSpeedtest *SpeedTestStats `protobuf:"bytes,1,opt,name=client_speedtest,json=clientSpeedtest,proto3" json:"client_speedtest,omitempty"`
+	ClientRssi      float32         `protobuf:"fixed32,2,opt,name=client_rssi,json=clientRssi,proto3" json:"client_rssi,omitempty"`
+	ClientPlatform  *ClientPlatform `protobuf:"bytes,3,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"`
 }
 
 func (x *SpeedTestRequest) Reset() {
 	*x = SpeedTestRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[17]
+		mi := &file_spacex_api_device_device_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1590,7 +2836,7 @@ func (x *SpeedTestRequest) String() string {
 func (*SpeedTestRequest) ProtoMessage() {}
 
 func (x *SpeedTestRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[17]
+	mi := &file_spacex_api_device_device_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1603,23 +2849,69 @@ func (x *SpeedTestRequest) ProtoReflect() protoreflect
 
 // Deprecated: Use SpeedTestRequest.ProtoReflect.Descriptor instead.
 func (*SpeedTestRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{17}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{23}
 }
 
+func (x *SpeedTestRequest) GetId() uint32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *SpeedTestRequest) GetClientSpeedtest() *SpeedTestStats {
+	if x != nil {
+		return x.ClientSpeedtest
+	}
+	return nil
+}
+
+func (x *SpeedTestRequest) GetClientRssi() float32 {
+	if x != nil {
+		return x.ClientRssi
+	}
+	return 0
+}
+
+func (x *SpeedTestRequest) GetClientPlatform() *ClientPlatform {
+	if x != nil {
+		return x.ClientPlatform
+	}
+	return nil
+}
+
 type SpeedTestResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	// Deprecated: Do not use.
 	DownloadBps float32 `protobuf:"fixed32,1,opt,name=download_bps,json=downloadBps,proto3" json:"download_bps,omitempty"`
-	UploadBps   float32 `protobuf:"fixed32,2,opt,name=upload_bps,json=uploadBps,proto3" json:"upload_bps,omitempty"`
-	LatencyS    float32 `protobuf:"fixed32,3,opt,name=latency_s,json=latencyS,proto3" json:"latency_s,omitempty"`
+	// Deprecated: Do not use.
+	UploadBps float32 `protobuf:"fixed32,2,opt,name=upload_bps,json=uploadBps,proto3" json:"upload_bps,omitempty"`
+	// Deprecated: Do not use.
+	LatencyS float32 `protobuf:"fixed32,3,opt,name=latency_s,json=latencyS,proto3" json:"latency_s,omitempty"`
+	// Deprecated: Do not use.
+	DownloadMbps float32 `protobuf:"fixed32,4,opt,name=download_mbps,json=downloadMbps,proto3" json:"download_mbps,omitempty"`
+	// Deprecated: Do not use.
+	UploadMbps float32 `protobuf:"fixed32,5,opt,name=upload_mbps,json=uploadMbps,proto3" json:"upload_mbps,omitempty"`
+	// Deprecated: Do not use.
+	LatencyMs              float32         `protobuf:"fixed32,6,opt,name=latency_ms,json=latencyMs,proto3" json:"latency_ms,omitempty"`
+	RouterSpeedtest        *SpeedTestStats `protobuf:"bytes,15,opt,name=router_speedtest,json=routerSpeedtest,proto3" json:"router_speedtest,omitempty"`
+	DownloadMbps_1TcpConn  float32         `protobuf:"fixed32,7,opt,name=download_mbps_1_tcp_conn,json=downloadMbps1TcpConn,proto3" json:"download_mbps_1_tcp_conn,omitempty"`
+	UploadMbps_1TcpConn    float32         `protobuf:"fixed32,8,opt,name=upload_mbps_1_tcp_conn,json=uploadMbps1TcpConn,proto3" json:"upload_mbps_1_tcp_conn,omitempty"`
+	DownloadMbps_4TcpConn  float32         `protobuf:"fixed32,9,opt,name=download_mbps_4_tcp_conn,json=downloadMbps4TcpConn,proto3" json:"download_mbps_4_tcp_conn,omitempty"`
+	UploadMbps_4TcpConn    float32         `protobuf:"fixed32,10,opt,name=upload_mbps_4_tcp_conn,json=uploadMbps4TcpConn,proto3" json:"upload_mbps_4_tcp_conn,omitempty"`
+	DownloadMbps_16TcpConn float32         `protobuf:"fixed32,11,opt,name=download_mbps_16_tcp_conn,json=downloadMbps16TcpConn,proto3" json:"download_mbps_16_tcp_conn,omitempty"`
+	UploadMbps_16TcpConn   float32         `protobuf:"fixed32,12,opt,name=upload_mbps_16_tcp_conn,json=uploadMbps16TcpConn,proto3" json:"upload_mbps_16_tcp_conn,omitempty"`
+	DownloadMbps_64TcpConn float32         `protobuf:"fixed32,13,opt,name=download_mbps_64_tcp_conn,json=downloadMbps64TcpConn,proto3" json:"download_mbps_64_tcp_conn,omitempty"`
+	UploadMbps_64TcpConn   float32         `protobuf:"fixed32,14,opt,name=upload_mbps_64_tcp_conn,json=uploadMbps64TcpConn,proto3" json:"upload_mbps_64_tcp_conn,omitempty"`
 }
 
 func (x *SpeedTestResponse) Reset() {
 	*x = SpeedTestResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[18]
+		mi := &file_spacex_api_device_device_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1632,7 +2924,7 @@ func (x *SpeedTestResponse) String() string {
 func (*SpeedTestResponse) ProtoMessage() {}
 
 func (x *SpeedTestResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[18]
+	mi := &file_spacex_api_device_device_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1645,9 +2937,10 @@ func (x *SpeedTestResponse) ProtoReflect() protoreflec
 
 // Deprecated: Use SpeedTestResponse.ProtoReflect.Descriptor instead.
 func (*SpeedTestResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{18}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{24}
 }
 
+// Deprecated: Do not use.
 func (x *SpeedTestResponse) GetDownloadBps() float32 {
 	if x != nil {
 		return x.DownloadBps
@@ -1655,6 +2948,7 @@ func (x *SpeedTestResponse) GetDownloadBps() float32 {
 	return 0
 }
 
+// Deprecated: Do not use.
 func (x *SpeedTestResponse) GetUploadBps() float32 {
 	if x != nil {
 		return x.UploadBps
@@ -1662,6 +2956,7 @@ func (x *SpeedTestResponse) GetUploadBps() float32 {
 	return 0
 }
 
+// Deprecated: Do not use.
 func (x *SpeedTestResponse) GetLatencyS() float32 {
 	if x != nil {
 		return x.LatencyS
@@ -1669,6 +2964,178 @@ func (x *SpeedTestResponse) GetLatencyS() float32 {
 	return 0
 }
 
+// Deprecated: Do not use.
+func (x *SpeedTestResponse) GetDownloadMbps() float32 {
+	if x != nil {
+		return x.DownloadMbps
+	}
+	return 0
+}
+
+// Deprecated: Do not use.
+func (x *SpeedTestResponse) GetUploadMbps() float32 {
+	if x != nil {
+		return x.UploadMbps
+	}
+	return 0
+}
+
+// Deprecated: Do not use.
+func (x *SpeedTestResponse) GetLatencyMs() float32 {
+	if x != nil {
+		return x.LatencyMs
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetRouterSpeedtest() *SpeedTestStats {
+	if x != nil {
+		return x.RouterSpeedtest
+	}
+	return nil
+}
+
+func (x *SpeedTestResponse) GetDownloadMbps_1TcpConn() float32 {
+	if x != nil {
+		return x.DownloadMbps_1TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetUploadMbps_1TcpConn() float32 {
+	if x != nil {
+		return x.UploadMbps_1TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetDownloadMbps_4TcpConn() float32 {
+	if x != nil {
+		return x.DownloadMbps_4TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetUploadMbps_4TcpConn() float32 {
+	if x != nil {
+		return x.UploadMbps_4TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetDownloadMbps_16TcpConn() float32 {
+	if x != nil {
+		return x.DownloadMbps_16TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetUploadMbps_16TcpConn() float32 {
+	if x != nil {
+		return x.UploadMbps_16TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetDownloadMbps_64TcpConn() float32 {
+	if x != nil {
+		return x.DownloadMbps_64TcpConn
+	}
+	return 0
+}
+
+func (x *SpeedTestResponse) GetUploadMbps_64TcpConn() float32 {
+	if x != nil {
+		return x.UploadMbps_64TcpConn
+	}
+	return 0
+}
+
+type GetConnectionsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetConnectionsRequest) Reset() {
+	*x = GetConnectionsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetConnectionsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetConnectionsRequest) ProtoMessage() {}
+
+func (x *GetConnectionsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetConnectionsRequest.ProtoReflect.Descriptor instead.
+func (*GetConnectionsRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{25}
+}
+
+type GetConnectionsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Services map[string]*GetConnectionsResponse_ServiceConnection `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *GetConnectionsResponse) Reset() {
+	*x = GetConnectionsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetConnectionsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetConnectionsResponse) ProtoMessage() {}
+
+func (x *GetConnectionsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetConnectionsResponse.ProtoReflect.Descriptor instead.
+func (*GetConnectionsResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *GetConnectionsResponse) GetServices() map[string]*GetConnectionsResponse_ServiceConnection {
+	if x != nil {
+		return x.Services
+	}
+	return nil
+}
+
 type GetDeviceInfoRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1678,7 +3145,7 @@ type GetDeviceInfoRequest struct {
 func (x *GetDeviceInfoRequest) Reset() {
 	*x = GetDeviceInfoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[19]
+		mi := &file_spacex_api_device_device_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1691,7 +3158,7 @@ func (x *GetDeviceInfoRequest) String() string {
 func (*GetDeviceInfoRequest) ProtoMessage() {}
 
 func (x *GetDeviceInfoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[19]
+	mi := &file_spacex_api_device_device_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1704,7 +3171,7 @@ func (x *GetDeviceInfoRequest) ProtoReflect() protoref
 
 // Deprecated: Use GetDeviceInfoRequest.ProtoReflect.Descriptor instead.
 func (*GetDeviceInfoRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{19}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{27}
 }
 
 type GetDeviceInfoResponse struct {
@@ -1718,7 +3185,7 @@ type GetDeviceInfoResponse struct {
 func (x *GetDeviceInfoResponse) Reset() {
 	*x = GetDeviceInfoResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[20]
+		mi := &file_spacex_api_device_device_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1731,7 +3198,7 @@ func (x *GetDeviceInfoResponse) String() string {
 func (*GetDeviceInfoResponse) ProtoMessage() {}
 
 func (x *GetDeviceInfoResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[20]
+	mi := &file_spacex_api_device_device_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1744,7 +3211,7 @@ func (x *GetDeviceInfoResponse) ProtoReflect() protore
 
 // Deprecated: Use GetDeviceInfoResponse.ProtoReflect.Descriptor instead.
 func (*GetDeviceInfoResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{20}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *GetDeviceInfoResponse) GetDeviceInfo() *DeviceInfo {
@@ -1765,7 +3232,7 @@ type SetTrustedKeysRequest struct {
 func (x *SetTrustedKeysRequest) Reset() {
 	*x = SetTrustedKeysRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[21]
+		mi := &file_spacex_api_device_device_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1778,7 +3245,7 @@ func (x *SetTrustedKeysRequest) String() string {
 func (*SetTrustedKeysRequest) ProtoMessage() {}
 
 func (x *SetTrustedKeysRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[21]
+	mi := &file_spacex_api_device_device_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1791,7 +3258,7 @@ func (x *SetTrustedKeysRequest) ProtoReflect() protore
 
 // Deprecated: Use SetTrustedKeysRequest.ProtoReflect.Descriptor instead.
 func (*SetTrustedKeysRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{21}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *SetTrustedKeysRequest) GetKeys() []*PublicKey {
@@ -1810,7 +3277,7 @@ type SetTrustedKeysResponse struct {
 func (x *SetTrustedKeysResponse) Reset() {
 	*x = SetTrustedKeysResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[22]
+		mi := &file_spacex_api_device_device_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1823,7 +3290,7 @@ func (x *SetTrustedKeysResponse) String() string {
 func (*SetTrustedKeysResponse) ProtoMessage() {}
 
 func (x *SetTrustedKeysResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[22]
+	mi := &file_spacex_api_device_device_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1836,7 +3303,7 @@ func (x *SetTrustedKeysResponse) ProtoReflect() protor
 
 // Deprecated: Use SetTrustedKeysResponse.ProtoReflect.Descriptor instead.
 func (*SetTrustedKeysResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{22}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{30}
 }
 
 type SetSkuRequest struct {
@@ -1847,12 +3314,14 @@ type SetSkuRequest struct {
 	Sku              string `protobuf:"bytes,1,opt,name=sku,proto3" json:"sku,omitempty"`
 	CountryCode      string `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
 	ApplyCountryCode bool   `protobuf:"varint,4,opt,name=apply_country_code,json=applyCountryCode,proto3" json:"apply_country_code,omitempty"`
+	PinCountryCode   bool   `protobuf:"varint,5,opt,name=pin_country_code,json=pinCountryCode,proto3" json:"pin_country_code,omitempty"`
+	CustomPowerTable bool   `protobuf:"varint,6,opt,name=custom_power_table,json=customPowerTable,proto3" json:"custom_power_table,omitempty"`
 }
 
 func (x *SetSkuRequest) Reset() {
 	*x = SetSkuRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[23]
+		mi := &file_spacex_api_device_device_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1865,7 +3334,7 @@ func (x *SetSkuRequest) String() string {
 func (*SetSkuRequest) ProtoMessage() {}
 
 func (x *SetSkuRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[23]
+	mi := &file_spacex_api_device_device_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1878,7 +3347,7 @@ func (x *SetSkuRequest) ProtoReflect() protoreflect.Me
 
 // Deprecated: Use SetSkuRequest.ProtoReflect.Descriptor instead.
 func (*SetSkuRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{23}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *SetSkuRequest) GetSku() string {
@@ -1902,6 +3371,20 @@ func (x *SetSkuRequest) GetApplyCountryCode() bool {
 	return false
 }
 
+func (x *SetSkuRequest) GetPinCountryCode() bool {
+	if x != nil {
+		return x.PinCountryCode
+	}
+	return false
+}
+
+func (x *SetSkuRequest) GetCustomPowerTable() bool {
+	if x != nil {
+		return x.CustomPowerTable
+	}
+	return false
+}
+
 type SetSkuResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1911,7 +3394,7 @@ type SetSkuResponse struct {
 func (x *SetSkuResponse) Reset() {
 	*x = SetSkuResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[24]
+		mi := &file_spacex_api_device_device_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1924,7 +3407,7 @@ func (x *SetSkuResponse) String() string {
 func (*SetSkuResponse) ProtoMessage() {}
 
 func (x *SetSkuResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[24]
+	mi := &file_spacex_api_device_device_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1937,7 +3420,7 @@ func (x *SetSkuResponse) ProtoReflect() protoreflect.M
 
 // Deprecated: Use SetSkuResponse.ProtoReflect.Descriptor instead.
 func (*SetSkuResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{24}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{32}
 }
 
 type UpdateRequest struct {
@@ -1949,7 +3432,7 @@ type UpdateRequest struct {
 func (x *UpdateRequest) Reset() {
 	*x = UpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[25]
+		mi := &file_spacex_api_device_device_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1962,7 +3445,7 @@ func (x *UpdateRequest) String() string {
 func (*UpdateRequest) ProtoMessage() {}
 
 func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[25]
+	mi := &file_spacex_api_device_device_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1975,7 +3458,7 @@ func (x *UpdateRequest) ProtoReflect() protoreflect.Me
 
 // Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead.
 func (*UpdateRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{25}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{33}
 }
 
 type UpdateResponse struct {
@@ -1987,7 +3470,7 @@ type UpdateResponse struct {
 func (x *UpdateResponse) Reset() {
 	*x = UpdateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[26]
+		mi := &file_spacex_api_device_device_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2000,7 +3483,7 @@ func (x *UpdateResponse) String() string {
 func (*UpdateResponse) ProtoMessage() {}
 
 func (x *UpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[26]
+	mi := &file_spacex_api_device_device_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2013,9 +3496,85 @@ func (x *UpdateResponse) ProtoReflect() protoreflect.M
 
 // Deprecated: Use UpdateResponse.ProtoReflect.Descriptor instead.
 func (*UpdateResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{26}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{34}
+}
+
+type RestartControlRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 }
 
+func (x *RestartControlRequest) Reset() {
+	*x = RestartControlRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *RestartControlRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RestartControlRequest) ProtoMessage() {}
+
+func (x *RestartControlRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[35]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RestartControlRequest.ProtoReflect.Descriptor instead.
+func (*RestartControlRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{35}
+}
+
+type RestartControlResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *RestartControlResponse) Reset() {
+	*x = RestartControlResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *RestartControlResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RestartControlResponse) ProtoMessage() {}
+
+func (x *RestartControlResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[36]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RestartControlResponse.ProtoReflect.Descriptor instead.
+func (*RestartControlResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{36}
+}
+
 type GetNetworkInterfacesRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2025,7 +3584,7 @@ type GetNetworkInterfacesRequest struct {
 func (x *GetNetworkInterfacesRequest) Reset() {
 	*x = GetNetworkInterfacesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[27]
+		mi := &file_spacex_api_device_device_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2038,7 +3597,7 @@ func (x *GetNetworkInterfacesRequest) String() string 
 func (*GetNetworkInterfacesRequest) ProtoMessage() {}
 
 func (x *GetNetworkInterfacesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[27]
+	mi := &file_spacex_api_device_device_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2051,7 +3610,7 @@ func (x *GetNetworkInterfacesRequest) ProtoReflect() p
 
 // Deprecated: Use GetNetworkInterfacesRequest.ProtoReflect.Descriptor instead.
 func (*GetNetworkInterfacesRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{27}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{37}
 }
 
 type GetNetworkInterfacesResponse struct {
@@ -2065,7 +3624,7 @@ type GetNetworkInterfacesResponse struct {
 func (x *GetNetworkInterfacesResponse) Reset() {
 	*x = GetNetworkInterfacesResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_device_proto_msgTypes[28]
+		mi := &file_spacex_api_device_device_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2078,7 +3637,7 @@ func (x *GetNetworkInterfacesResponse) String() string
 func (*GetNetworkInterfacesResponse) ProtoMessage() {}
 
 func (x *GetNetworkInterfacesResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_device_proto_msgTypes[28]
+	mi := &file_spacex_api_device_device_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2091,7 +3650,7 @@ func (x *GetNetworkInterfacesResponse) ProtoReflect() 
 
 // Deprecated: Use GetNetworkInterfacesResponse.ProtoReflect.Descriptor instead.
 func (*GetNetworkInterfacesResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{28}
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{38}
 }
 
 func (x *GetNetworkInterfacesResponse) GetNetworkInterfaces() []*NetworkInterface {
@@ -2101,394 +3660,2600 @@ func (x *GetNetworkInterfacesResponse) GetNetworkInter
 	return nil
 }
 
-var File_spacex_api_device_device_proto protoreflect.FileDescriptor
+type GetHeapDumpRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
 
-var file_spacex_api_device_device_proto_rawDesc = []byte{
-	0x0a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x12, 0x11, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x1a, 0x25, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x73, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x70, 0x61, 0x63,
-	0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f,
-	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x73, 0x70, 0x61,
-	0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63,
-	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x73, 0x70, 0x61,
-	0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x64,
-	0x69, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65,
-	0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x74, 0x72, 0x61,
-	0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c,
-	0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4d, 0x0a, 0x08,
-	0x54, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x0a,
-	0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
-	0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x22, 0xee, 0x0e, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e,
-	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19,
-	0x0a, 0x08, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04,
-	0x52, 0x07, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x72,
-	0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61,
-	0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
-	0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d,
-	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52,
-	0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46,
-	0x0a, 0x0b, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x64, 0x18, 0xee, 0x07,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74,
-	0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x65, 0x74,
-	0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e,
-	0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
-	0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79,
-	0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79,
-	0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x48, 0x0a, 0x0b, 0x67, 0x65, 0x74,
-	0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74,
-	0x6f, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x07, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0xf4,
-	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x4c, 0x6f,
-	0x67, 0x12, 0x67, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x08, 0x67, 0x65,
-	0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x42, 0x0a, 0x09, 0x70,
-	0x69, 0x6e, 0x67, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x12,
-	0x45, 0x0a, 0x0a, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xec, 0x07,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x65, 0x74,
-	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74,
-	0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f,
-	0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x62,
-	0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x6b, 0x75, 0x18, 0xf5,
-	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x74, 0x53, 0x6b,
-	0x75, 0x12, 0x55, 0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64,
-	0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x54, 0x72, 0x75,
-	0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x65,
-	0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x73, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12,
-	0x3b, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x09,
-	0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x74, 0x6f, 0x77, 0x18, 0xd2, 0x0f, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77,
-	0x12, 0x77, 0x0a, 0x1c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f,
-	0x69, 0x66, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x73, 0x74,
-	0x18, 0xa1, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e,
-	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x46, 0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63,
-	0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x19,
-	0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x66, 0x4c, 0x6f, 0x6f,
-	0x70, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x16, 0x74, 0x72, 0x61,
-	0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x18, 0xa3, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61,
-	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54,
-	0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x74, 0x72,
-	0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x55, 0x0a, 0x10, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63,
-	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x69, 0x66, 0x69, 0x47,
-	0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x15, 0x77, 0x69, 0x66,
-	0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69,
-	0x63, 0x73, 0x18, 0xbf, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69,
-	0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x47,
-	0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x52, 0x0a,
-	0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
-	0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
-	0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x12, 0x45, 0x0a, 0x0a, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18,
-	0xbb, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
-	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53,
-	0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x77,
-	0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x22, 0xea, 0x10, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x19, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x12, 0x47, 0x0a, 0x0b, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f,
-	0x69, 0x64, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65,
-	0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
-	0x00, 0x52, 0x09, 0x67, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x0d,
-	0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0xf3, 0x07,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79,
-	0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
-	0x0c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x53, 0x0a,
-	0x0f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
-	0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
-	0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x07, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0xf4, 0x07,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x4c, 0x6f,
-	0x67, 0x12, 0x68, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x67,
-	0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
-	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a,
-	0x09, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x6f,
-	0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0xe9, 0x07, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74,
-	0x12, 0x46, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xeb,
-	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54,
-	0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x09, 0x73,
-	0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x5f,
-	0x73, 0x6b, 0x75, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61,
-	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53,
-	0x65, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
-	0x06, 0x73, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x56, 0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x74,
-	0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65,
-	0x64, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
-	0x0e, 0x73, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12,
-	0x3c, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a,
-	0x11, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
-	0x74, 0x65, 0x18, 0xd5, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69,
-	0x73, 0x68, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x64, 0x69, 0x73, 0x68, 0x41, 0x75,
-	0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x10, 0x64, 0x69,
-	0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xd6,
-	0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65,
-	0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f,
-	0x72, 0x79, 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xd4, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65,
-	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x43, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x68, 0x5f,
-	0x73, 0x74, 0x6f, 0x77, 0x18, 0xd2, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70,
-	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
-	0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x12, 0x78, 0x0a, 0x1c,
-	0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x66, 0x5f, 0x6c,
-	0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xa1, 0x1f, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69,
-	0x76, 0x65, 0x72, 0x49, 0x46, 0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x65, 0x73,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x72, 0x61,
-	0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x66, 0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61,
-	0x63, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63,
-	0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x18, 0xa3, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e,
-	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e,
-	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x5b, 0x0a, 0x11, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
-	0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0xbd, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x57, 0x69, 0x66, 0x69, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x77, 0x69, 0x66,
-	0x69, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a,
-	0x10, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-	0x73, 0x18, 0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
-	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
-	0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c,
-	0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65,
-	0x74, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xbe, 0x17, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74,
-	0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x77,
-	0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x63, 0x0a,
-	0x15, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6d,
-	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0xbf, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74,
-	0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x12,
-	0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69,
-	0x63, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xbc, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65,
-	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f,
-	0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xb9, 0x17, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x77,
-	0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x0a,
-	0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0xbb, 0x17, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x66, 0x69, 0x53,
-	0x65, 0x74, 0x75, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0xdf, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x77, 0x69,
-	0x66, 0x69, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f,
-	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e,
-	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
-	0x52, 0x16, 0x77, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43,
-	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x14, 0x77, 0x69, 0x66, 0x69,
-	0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x18, 0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
-	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x76,
-	0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65,
-	0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73,
-	0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x61, 0x63,
-	0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f,
-	0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73,
-	0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x73, 0x6c, 0x6f,
-	0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6c, 0x6f, 0x67,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x4c,
-	0x6f, 0x67, 0x22, 0x10, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75,
-	0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65,
-	0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65,
-	0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
-	0x6c, 0x74, 0x73, 0x1a, 0x59, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
-	0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b,
-	0x0a, 0x0f, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x49, 0x0a, 0x10, 0x50,
-	0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x35, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
-	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x52, 0x65,
-	0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x52,
-	0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a,
-	0x10, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x22, 0x72, 0x0a, 0x11, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
-	0x61, 0x64, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x64, 0x6f,
-	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x6c,
-	0x6f, 0x61, 0x64, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x75,
-	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x70, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65,
-	0x6e, 0x63, 0x79, 0x5f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x6c, 0x61, 0x74,
-	0x65, 0x6e, 0x63, 0x79, 0x53, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a,
-	0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
+func (x *GetHeapDumpRequest) Reset() {
+	*x = GetHeapDumpRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetHeapDumpRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetHeapDumpRequest) ProtoMessage() {}
+
+func (x *GetHeapDumpRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[39]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetHeapDumpRequest.ProtoReflect.Descriptor instead.
+func (*GetHeapDumpRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{39}
+}
+
+type GetHeapDumpResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HeapDump string `protobuf:"bytes,1,opt,name=heap_dump,json=heapDump,proto3" json:"heap_dump,omitempty"`
+}
+
+func (x *GetHeapDumpResponse) Reset() {
+	*x = GetHeapDumpResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetHeapDumpResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetHeapDumpResponse) ProtoMessage() {}
+
+func (x *GetHeapDumpResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[40]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetHeapDumpResponse.ProtoReflect.Descriptor instead.
+func (*GetHeapDumpResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *GetHeapDumpResponse) GetHeapDump() string {
+	if x != nil {
+		return x.HeapDump
+	}
+	return ""
+}
+
+type GetLocationRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Source PositionSource `protobuf:"varint,1,opt,name=source,proto3,enum=SpaceX.API.Device.PositionSource" json:"source,omitempty"`
+}
+
+func (x *GetLocationRequest) Reset() {
+	*x = GetLocationRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetLocationRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetLocationRequest) ProtoMessage() {}
+
+func (x *GetLocationRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[41]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetLocationRequest.ProtoReflect.Descriptor instead.
+func (*GetLocationRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{41}
+}
+
+func (x *GetLocationRequest) GetSource() PositionSource {
+	if x != nil {
+		return x.Source
+	}
+	return PositionSource_AUTO
+}
+
+type GetLocationResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Lla    *LLAPosition   `protobuf:"bytes,1,opt,name=lla,proto3" json:"lla,omitempty"`
+	SigmaM float64        `protobuf:"fixed64,4,opt,name=sigma_m,json=sigmaM,proto3" json:"sigma_m,omitempty"`
+	Source PositionSource `protobuf:"varint,3,opt,name=source,proto3,enum=SpaceX.API.Device.PositionSource" json:"source,omitempty"`
+}
+
+func (x *GetLocationResponse) Reset() {
+	*x = GetLocationResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetLocationResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetLocationResponse) ProtoMessage() {}
+
+func (x *GetLocationResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[42]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetLocationResponse.ProtoReflect.Descriptor instead.
+func (*GetLocationResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *GetLocationResponse) GetLla() *LLAPosition {
+	if x != nil {
+		return x.Lla
+	}
+	return nil
+}
+
+func (x *GetLocationResponse) GetSigmaM() float64 {
+	if x != nil {
+		return x.SigmaM
+	}
+	return 0
+}
+
+func (x *GetLocationResponse) GetSource() PositionSource {
+	if x != nil {
+		return x.Source
+	}
+	return PositionSource_AUTO
+}
+
+type DishSetEmcRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Theta                     float64 `protobuf:"fixed64,1,opt,name=theta,proto3" json:"theta,omitempty"`
+	Phi                       float64 `protobuf:"fixed64,2,opt,name=phi,proto3" json:"phi,omitempty"`
+	RxChan                    uint32  `protobuf:"varint,3,opt,name=rx_chan,json=rxChan,proto3" json:"rx_chan,omitempty"`
+	TxChan                    uint32  `protobuf:"varint,4,opt,name=tx_chan,json=txChan,proto3" json:"tx_chan,omitempty"`
+	Modulation                uint32  `protobuf:"varint,5,opt,name=modulation,proto3" json:"modulation,omitempty"`
+	DesiredTiltAngle          float64 `protobuf:"fixed64,7,opt,name=desired_tilt_angle,json=desiredTiltAngle,proto3" json:"desired_tilt_angle,omitempty"`
+	ChanOverride              bool    `protobuf:"varint,8,opt,name=chan_override,json=chanOverride,proto3" json:"chan_override,omitempty"`
+	ThetaEnabled              bool    `protobuf:"varint,9,opt,name=theta_enabled,json=thetaEnabled,proto3" json:"theta_enabled,omitempty"`
+	PhiEnabled                bool    `protobuf:"varint,10,opt,name=phi_enabled,json=phiEnabled,proto3" json:"phi_enabled,omitempty"`
+	Idle                      bool    `protobuf:"varint,11,opt,name=idle,proto3" json:"idle,omitempty"`
+	FastSwitching             bool    `protobuf:"varint,12,opt,name=fast_switching,json=fastSwitching,proto3" json:"fast_switching,omitempty"`
+	SkySearch                 bool    `protobuf:"varint,13,opt,name=sky_search,json=skySearch,proto3" json:"sky_search,omitempty"`
+	ForcePllUnlock            bool    `protobuf:"varint,14,opt,name=force_pll_unlock,json=forcePllUnlock,proto3" json:"force_pll_unlock,omitempty"`
+	ForceEirpFailure          bool    `protobuf:"varint,15,opt,name=force_eirp_failure,json=forceEirpFailure,proto3" json:"force_eirp_failure,omitempty"`
+	SnowActiveOverride        bool    `protobuf:"varint,16,opt,name=snow_active_override,json=snowActiveOverride,proto3" json:"snow_active_override,omitempty"`
+	ManualTilting             bool    `protobuf:"varint,18,opt,name=manual_tilting,json=manualTilting,proto3" json:"manual_tilting,omitempty"`
+	TiltToStowed              bool    `protobuf:"varint,19,opt,name=tilt_to_stowed,json=tiltToStowed,proto3" json:"tilt_to_stowed,omitempty"`
+	Reboot                    bool    `protobuf:"varint,20,opt,name=reboot,proto3" json:"reboot,omitempty"`
+	ContinuousMotorTest       bool    `protobuf:"varint,21,opt,name=continuous_motor_test,json=continuousMotorTest,proto3" json:"continuous_motor_test,omitempty"`
+	DistanceOverrideMeters    float64 `protobuf:"fixed64,22,opt,name=distance_override_meters,json=distanceOverrideMeters,proto3" json:"distance_override_meters,omitempty"`
+	AmplitudeTaperOverride    uint32  `protobuf:"varint,23,opt,name=amplitude_taper_override,json=amplitudeTaperOverride,proto3" json:"amplitude_taper_override,omitempty"`
+	CountryCodeOverride       uint32  `protobuf:"varint,24,opt,name=country_code_override,json=countryCodeOverride,proto3" json:"country_code_override,omitempty"`
+	TxDutyCycleOverride       int32   `protobuf:"varint,25,opt,name=tx_duty_cycle_override,json=txDutyCycleOverride,proto3" json:"tx_duty_cycle_override,omitempty"`
+	RxDutyCycleOverride       int32   `protobuf:"varint,26,opt,name=rx_duty_cycle_override,json=rxDutyCycleOverride,proto3" json:"rx_duty_cycle_override,omitempty"`
+	EirpLegalLimitDbwOverride float64 `protobuf:"fixed64,27,opt,name=eirp_legal_limit_dbw_override,json=eirpLegalLimitDbwOverride,proto3" json:"eirp_legal_limit_dbw_override,omitempty"`
+}
+
+func (x *DishSetEmcRequest) Reset() {
+	*x = DishSetEmcRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishSetEmcRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishSetEmcRequest) ProtoMessage() {}
+
+func (x *DishSetEmcRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[43]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishSetEmcRequest.ProtoReflect.Descriptor instead.
+func (*DishSetEmcRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *DishSetEmcRequest) GetTheta() float64 {
+	if x != nil {
+		return x.Theta
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetPhi() float64 {
+	if x != nil {
+		return x.Phi
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetRxChan() uint32 {
+	if x != nil {
+		return x.RxChan
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetTxChan() uint32 {
+	if x != nil {
+		return x.TxChan
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetModulation() uint32 {
+	if x != nil {
+		return x.Modulation
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetDesiredTiltAngle() float64 {
+	if x != nil {
+		return x.DesiredTiltAngle
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetChanOverride() bool {
+	if x != nil {
+		return x.ChanOverride
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetThetaEnabled() bool {
+	if x != nil {
+		return x.ThetaEnabled
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetPhiEnabled() bool {
+	if x != nil {
+		return x.PhiEnabled
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetIdle() bool {
+	if x != nil {
+		return x.Idle
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetFastSwitching() bool {
+	if x != nil {
+		return x.FastSwitching
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetSkySearch() bool {
+	if x != nil {
+		return x.SkySearch
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetForcePllUnlock() bool {
+	if x != nil {
+		return x.ForcePllUnlock
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetForceEirpFailure() bool {
+	if x != nil {
+		return x.ForceEirpFailure
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetSnowActiveOverride() bool {
+	if x != nil {
+		return x.SnowActiveOverride
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetManualTilting() bool {
+	if x != nil {
+		return x.ManualTilting
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetTiltToStowed() bool {
+	if x != nil {
+		return x.TiltToStowed
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetReboot() bool {
+	if x != nil {
+		return x.Reboot
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetContinuousMotorTest() bool {
+	if x != nil {
+		return x.ContinuousMotorTest
+	}
+	return false
+}
+
+func (x *DishSetEmcRequest) GetDistanceOverrideMeters() float64 {
+	if x != nil {
+		return x.DistanceOverrideMeters
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetAmplitudeTaperOverride() uint32 {
+	if x != nil {
+		return x.AmplitudeTaperOverride
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetCountryCodeOverride() uint32 {
+	if x != nil {
+		return x.CountryCodeOverride
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetTxDutyCycleOverride() int32 {
+	if x != nil {
+		return x.TxDutyCycleOverride
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetRxDutyCycleOverride() int32 {
+	if x != nil {
+		return x.RxDutyCycleOverride
+	}
+	return 0
+}
+
+func (x *DishSetEmcRequest) GetEirpLegalLimitDbwOverride() float64 {
+	if x != nil {
+		return x.EirpLegalLimitDbwOverride
+	}
+	return 0
+}
+
+type DishSetEmcResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *DishSetEmcResponse) Reset() {
+	*x = DishSetEmcResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishSetEmcResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishSetEmcResponse) ProtoMessage() {}
+
+func (x *DishSetEmcResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[44]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishSetEmcResponse.ProtoReflect.Descriptor instead.
+func (*DishSetEmcResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{44}
+}
+
+type DishGetEmcRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *DishGetEmcRequest) Reset() {
+	*x = DishGetEmcRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetEmcRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetEmcRequest) ProtoMessage() {}
+
+func (x *DishGetEmcRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[45]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetEmcRequest.ProtoReflect.Descriptor instead.
+func (*DishGetEmcRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{45}
+}
+
+type DishGetEmcResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Uuid                      string  `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"`
+	Timestamp                 uint64  `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	CplaneUpdates             uint32  `protobuf:"varint,11,opt,name=cplane_updates,json=cplaneUpdates,proto3" json:"cplane_updates,omitempty"`
+	GpsLatitude               float64 `protobuf:"fixed64,16,opt,name=gps_latitude,json=gpsLatitude,proto3" json:"gps_latitude,omitempty"`
+	GpsLongitude              float64 `protobuf:"fixed64,17,opt,name=gps_longitude,json=gpsLongitude,proto3" json:"gps_longitude,omitempty"`
+	GpsPdop                   float64 `protobuf:"fixed64,18,opt,name=gps_pdop,json=gpsPdop,proto3" json:"gps_pdop,omitempty"`
+	RfMode                    uint32  `protobuf:"varint,19,opt,name=rf_mode,json=rfMode,proto3" json:"rf_mode,omitempty"`
+	Phi                       float64 `protobuf:"fixed64,20,opt,name=phi,proto3" json:"phi,omitempty"`
+	Theta                     float64 `protobuf:"fixed64,21,opt,name=theta,proto3" json:"theta,omitempty"`
+	RxChannel                 uint32  `protobuf:"varint,22,opt,name=rx_channel,json=rxChannel,proto3" json:"rx_channel,omitempty"`
+	TxChannel                 uint32  `protobuf:"varint,23,opt,name=tx_channel,json=txChannel,proto3" json:"tx_channel,omitempty"`
+	TDbfMax                   float32 `protobuf:"fixed32,24,opt,name=t_dbf_max,json=tDbfMax,proto3" json:"t_dbf_max,omitempty"`
+	TCenter                   float64 `protobuf:"fixed64,25,opt,name=t_center,json=tCenter,proto3" json:"t_center,omitempty"`
+	AutoPowerSnowMeltEnabled  bool    `protobuf:"varint,30,opt,name=auto_power_snow_melt_enabled,json=autoPowerSnowMeltEnabled,proto3" json:"auto_power_snow_melt_enabled,omitempty"`
+	Voltage                   float64 `protobuf:"fixed64,32,opt,name=voltage,proto3" json:"voltage,omitempty"`
+	RxBeamState               uint32  `protobuf:"varint,33,opt,name=rx_beam_state,json=rxBeamState,proto3" json:"rx_beam_state,omitempty"`
+	TxBeamState               uint32  `protobuf:"varint,34,opt,name=tx_beam_state,json=txBeamState,proto3" json:"tx_beam_state,omitempty"`
+	HalfDuplexState           uint32  `protobuf:"varint,35,opt,name=half_duplex_state,json=halfDuplexState,proto3" json:"half_duplex_state,omitempty"`
+	ManualTiltEnabled         bool    `protobuf:"varint,36,opt,name=manual_tilt_enabled,json=manualTiltEnabled,proto3" json:"manual_tilt_enabled,omitempty"`
+	TiltAngle                 float64 `protobuf:"fixed64,37,opt,name=tilt_angle,json=tiltAngle,proto3" json:"tilt_angle,omitempty"`
+	PllTxLockDetected         uint32  `protobuf:"varint,38,opt,name=pll_tx_lock_detected,json=pllTxLockDetected,proto3" json:"pll_tx_lock_detected,omitempty"`
+	EirpExceededThreshold     bool    `protobuf:"varint,39,opt,name=eirp_exceeded_threshold,json=eirpExceededThreshold,proto3" json:"eirp_exceeded_threshold,omitempty"`
+	EirpScaleOverride         float32 `protobuf:"fixed32,40,opt,name=eirp_scale_override,json=eirpScaleOverride,proto3" json:"eirp_scale_override,omitempty"`
+	IdleOverrideEnabled       bool    `protobuf:"varint,41,opt,name=idle_override_enabled,json=idleOverrideEnabled,proto3" json:"idle_override_enabled,omitempty"`
+	ThetaOverrideEnabled      bool    `protobuf:"varint,42,opt,name=theta_override_enabled,json=thetaOverrideEnabled,proto3" json:"theta_override_enabled,omitempty"`
+	ThetaOverrideValue        float64 `protobuf:"fixed64,43,opt,name=theta_override_value,json=thetaOverrideValue,proto3" json:"theta_override_value,omitempty"`
+	PhiOverrideEnabled        bool    `protobuf:"varint,44,opt,name=phi_override_enabled,json=phiOverrideEnabled,proto3" json:"phi_override_enabled,omitempty"`
+	PhiOverrideValue          float64 `protobuf:"fixed64,45,opt,name=phi_override_value,json=phiOverrideValue,proto3" json:"phi_override_value,omitempty"`
+	RxChanOverrideValue       uint32  `protobuf:"varint,46,opt,name=rx_chan_override_value,json=rxChanOverrideValue,proto3" json:"rx_chan_override_value,omitempty"`
+	TxChanOverrideValue       uint32  `protobuf:"varint,47,opt,name=tx_chan_override_value,json=txChanOverrideValue,proto3" json:"tx_chan_override_value,omitempty"`
+	SkySearchOverrideEnabled  bool    `protobuf:"varint,48,opt,name=sky_search_override_enabled,json=skySearchOverrideEnabled,proto3" json:"sky_search_override_enabled,omitempty"`
+	FastSwitchingEnabled      bool    `protobuf:"varint,49,opt,name=fast_switching_enabled,json=fastSwitchingEnabled,proto3" json:"fast_switching_enabled,omitempty"`
+	ModulationOverrideValue   uint32  `protobuf:"varint,50,opt,name=modulation_override_value,json=modulationOverrideValue,proto3" json:"modulation_override_value,omitempty"`
+	ForceEirpFailure          bool    `protobuf:"varint,51,opt,name=force_eirp_failure,json=forceEirpFailure,proto3" json:"force_eirp_failure,omitempty"`
+	ForcePllUnlock            bool    `protobuf:"varint,52,opt,name=force_pll_unlock,json=forcePllUnlock,proto3" json:"force_pll_unlock,omitempty"`
+	UtIneSuccess              uint32  `protobuf:"varint,53,opt,name=ut_ine_success,json=utIneSuccess,proto3" json:"ut_ine_success,omitempty"`
+	RfReady                   bool    `protobuf:"varint,54,opt,name=rf_ready,json=rfReady,proto3" json:"rf_ready,omitempty"`
+	TiltToStowed              bool    `protobuf:"varint,55,opt,name=tilt_to_stowed,json=tiltToStowed,proto3" json:"tilt_to_stowed,omitempty"`
+	Reboot                    bool    `protobuf:"varint,56,opt,name=reboot,proto3" json:"reboot,omitempty"`
+	ContinuousMotorTest       bool    `protobuf:"varint,57,opt,name=continuous_motor_test,json=continuousMotorTest,proto3" json:"continuous_motor_test,omitempty"`
+	DistanceOverrideMeters    float64 `protobuf:"fixed64,58,opt,name=distance_override_meters,json=distanceOverrideMeters,proto3" json:"distance_override_meters,omitempty"`
+	AmplitudeTaperOverride    uint32  `protobuf:"varint,59,opt,name=amplitude_taper_override,json=amplitudeTaperOverride,proto3" json:"amplitude_taper_override,omitempty"`
+	AmplitudeTaperEnabled     bool    `protobuf:"varint,60,opt,name=amplitude_taper_enabled,json=amplitudeTaperEnabled,proto3" json:"amplitude_taper_enabled,omitempty"`
+	AmplitudeTaperScale       float64 `protobuf:"fixed64,61,opt,name=amplitude_taper_scale,json=amplitudeTaperScale,proto3" json:"amplitude_taper_scale,omitempty"`
+	CountryCodeOverride       uint32  `protobuf:"varint,62,opt,name=country_code_override,json=countryCodeOverride,proto3" json:"country_code_override,omitempty"`
+	MaxPointingDistance       float64 `protobuf:"fixed64,63,opt,name=max_pointing_distance,json=maxPointingDistance,proto3" json:"max_pointing_distance,omitempty"`
+	DistanceScalingFactor     float64 `protobuf:"fixed64,64,opt,name=distance_scaling_factor,json=distanceScalingFactor,proto3" json:"distance_scaling_factor,omitempty"`
+	TxDutyCycleOverride       int32   `protobuf:"varint,65,opt,name=tx_duty_cycle_override,json=txDutyCycleOverride,proto3" json:"tx_duty_cycle_override,omitempty"`
+	RxDutyCycleOverride       int32   `protobuf:"varint,66,opt,name=rx_duty_cycle_override,json=rxDutyCycleOverride,proto3" json:"rx_duty_cycle_override,omitempty"`
+	TxTimeMs                  float32 `protobuf:"fixed32,67,opt,name=tx_time_ms,json=txTimeMs,proto3" json:"tx_time_ms,omitempty"`
+	RxTimeMs                  float32 `protobuf:"fixed32,68,opt,name=rx_time_ms,json=rxTimeMs,proto3" json:"rx_time_ms,omitempty"`
+	EirpLegalLimitDbw         float64 `protobuf:"fixed64,69,opt,name=eirp_legal_limit_dbw,json=eirpLegalLimitDbw,proto3" json:"eirp_legal_limit_dbw,omitempty"`
+	EirpLegalLimitDbwOverride float64 `protobuf:"fixed64,70,opt,name=eirp_legal_limit_dbw_override,json=eirpLegalLimitDbwOverride,proto3" json:"eirp_legal_limit_dbw_override,omitempty"`
+}
+
+func (x *DishGetEmcResponse) Reset() {
+	*x = DishGetEmcResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetEmcResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetEmcResponse) ProtoMessage() {}
+
+func (x *DishGetEmcResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[46]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetEmcResponse.ProtoReflect.Descriptor instead.
+func (*DishGetEmcResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{46}
+}
+
+func (x *DishGetEmcResponse) GetUuid() string {
+	if x != nil {
+		return x.Uuid
+	}
+	return ""
+}
+
+func (x *DishGetEmcResponse) GetTimestamp() uint64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetCplaneUpdates() uint32 {
+	if x != nil {
+		return x.CplaneUpdates
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetGpsLatitude() float64 {
+	if x != nil {
+		return x.GpsLatitude
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetGpsLongitude() float64 {
+	if x != nil {
+		return x.GpsLongitude
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetGpsPdop() float64 {
+	if x != nil {
+		return x.GpsPdop
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRfMode() uint32 {
+	if x != nil {
+		return x.RfMode
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetPhi() float64 {
+	if x != nil {
+		return x.Phi
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTheta() float64 {
+	if x != nil {
+		return x.Theta
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRxChannel() uint32 {
+	if x != nil {
+		return x.RxChannel
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTxChannel() uint32 {
+	if x != nil {
+		return x.TxChannel
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTDbfMax() float32 {
+	if x != nil {
+		return x.TDbfMax
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTCenter() float64 {
+	if x != nil {
+		return x.TCenter
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetAutoPowerSnowMeltEnabled() bool {
+	if x != nil {
+		return x.AutoPowerSnowMeltEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetVoltage() float64 {
+	if x != nil {
+		return x.Voltage
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRxBeamState() uint32 {
+	if x != nil {
+		return x.RxBeamState
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTxBeamState() uint32 {
+	if x != nil {
+		return x.TxBeamState
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetHalfDuplexState() uint32 {
+	if x != nil {
+		return x.HalfDuplexState
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetManualTiltEnabled() bool {
+	if x != nil {
+		return x.ManualTiltEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetTiltAngle() float64 {
+	if x != nil {
+		return x.TiltAngle
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetPllTxLockDetected() uint32 {
+	if x != nil {
+		return x.PllTxLockDetected
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetEirpExceededThreshold() bool {
+	if x != nil {
+		return x.EirpExceededThreshold
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetEirpScaleOverride() float32 {
+	if x != nil {
+		return x.EirpScaleOverride
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetIdleOverrideEnabled() bool {
+	if x != nil {
+		return x.IdleOverrideEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetThetaOverrideEnabled() bool {
+	if x != nil {
+		return x.ThetaOverrideEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetThetaOverrideValue() float64 {
+	if x != nil {
+		return x.ThetaOverrideValue
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetPhiOverrideEnabled() bool {
+	if x != nil {
+		return x.PhiOverrideEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetPhiOverrideValue() float64 {
+	if x != nil {
+		return x.PhiOverrideValue
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRxChanOverrideValue() uint32 {
+	if x != nil {
+		return x.RxChanOverrideValue
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTxChanOverrideValue() uint32 {
+	if x != nil {
+		return x.TxChanOverrideValue
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetSkySearchOverrideEnabled() bool {
+	if x != nil {
+		return x.SkySearchOverrideEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetFastSwitchingEnabled() bool {
+	if x != nil {
+		return x.FastSwitchingEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetModulationOverrideValue() uint32 {
+	if x != nil {
+		return x.ModulationOverrideValue
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetForceEirpFailure() bool {
+	if x != nil {
+		return x.ForceEirpFailure
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetForcePllUnlock() bool {
+	if x != nil {
+		return x.ForcePllUnlock
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetUtIneSuccess() uint32 {
+	if x != nil {
+		return x.UtIneSuccess
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRfReady() bool {
+	if x != nil {
+		return x.RfReady
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetTiltToStowed() bool {
+	if x != nil {
+		return x.TiltToStowed
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetReboot() bool {
+	if x != nil {
+		return x.Reboot
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetContinuousMotorTest() bool {
+	if x != nil {
+		return x.ContinuousMotorTest
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetDistanceOverrideMeters() float64 {
+	if x != nil {
+		return x.DistanceOverrideMeters
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetAmplitudeTaperOverride() uint32 {
+	if x != nil {
+		return x.AmplitudeTaperOverride
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetAmplitudeTaperEnabled() bool {
+	if x != nil {
+		return x.AmplitudeTaperEnabled
+	}
+	return false
+}
+
+func (x *DishGetEmcResponse) GetAmplitudeTaperScale() float64 {
+	if x != nil {
+		return x.AmplitudeTaperScale
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetCountryCodeOverride() uint32 {
+	if x != nil {
+		return x.CountryCodeOverride
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetMaxPointingDistance() float64 {
+	if x != nil {
+		return x.MaxPointingDistance
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetDistanceScalingFactor() float64 {
+	if x != nil {
+		return x.DistanceScalingFactor
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTxDutyCycleOverride() int32 {
+	if x != nil {
+		return x.TxDutyCycleOverride
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRxDutyCycleOverride() int32 {
+	if x != nil {
+		return x.RxDutyCycleOverride
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetTxTimeMs() float32 {
+	if x != nil {
+		return x.TxTimeMs
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetRxTimeMs() float32 {
+	if x != nil {
+		return x.RxTimeMs
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetEirpLegalLimitDbw() float64 {
+	if x != nil {
+		return x.EirpLegalLimitDbw
+	}
+	return 0
+}
+
+func (x *DishGetEmcResponse) GetEirpLegalLimitDbwOverride() float64 {
+	if x != nil {
+		return x.EirpLegalLimitDbwOverride
+	}
+	return 0
+}
+
+type GetPersistentStatsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetPersistentStatsRequest) Reset() {
+	*x = GetPersistentStatsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetPersistentStatsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPersistentStatsRequest) ProtoMessage() {}
+
+func (x *GetPersistentStatsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[47]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPersistentStatsRequest.ProtoReflect.Descriptor instead.
+func (*GetPersistentStatsRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{47}
+}
+
+type StartSpeedtestRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *StartSpeedtestRequest) Reset() {
+	*x = StartSpeedtestRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StartSpeedtestRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StartSpeedtestRequest) ProtoMessage() {}
+
+func (x *StartSpeedtestRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[48]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StartSpeedtestRequest.ProtoReflect.Descriptor instead.
+func (*StartSpeedtestRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{48}
+}
+
+type StartSpeedtestResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *StartSpeedtestResponse) Reset() {
+	*x = StartSpeedtestResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StartSpeedtestResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StartSpeedtestResponse) ProtoMessage() {}
+
+func (x *StartSpeedtestResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[49]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StartSpeedtestResponse.ProtoReflect.Descriptor instead.
+func (*StartSpeedtestResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{49}
+}
+
+type SpeedtestStatus struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Running bool                       `protobuf:"varint,1,opt,name=running,proto3" json:"running,omitempty"`
+	Id      uint32                     `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
+	Up      *SpeedtestStatus_Direction `protobuf:"bytes,1000,opt,name=up,proto3" json:"up,omitempty"`
+	Down    *SpeedtestStatus_Direction `protobuf:"bytes,1001,opt,name=down,proto3" json:"down,omitempty"`
+}
+
+func (x *SpeedtestStatus) Reset() {
+	*x = SpeedtestStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SpeedtestStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpeedtestStatus) ProtoMessage() {}
+
+func (x *SpeedtestStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[50]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpeedtestStatus.ProtoReflect.Descriptor instead.
+func (*SpeedtestStatus) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{50}
+}
+
+func (x *SpeedtestStatus) GetRunning() bool {
+	if x != nil {
+		return x.Running
+	}
+	return false
+}
+
+func (x *SpeedtestStatus) GetId() uint32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *SpeedtestStatus) GetUp() *SpeedtestStatus_Direction {
+	if x != nil {
+		return x.Up
+	}
+	return nil
+}
+
+func (x *SpeedtestStatus) GetDown() *SpeedtestStatus_Direction {
+	if x != nil {
+		return x.Down
+	}
+	return nil
+}
+
+type GetSpeedtestStatusRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetSpeedtestStatusRequest) Reset() {
+	*x = GetSpeedtestStatusRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetSpeedtestStatusRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetSpeedtestStatusRequest) ProtoMessage() {}
+
+func (x *GetSpeedtestStatusRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[51]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetSpeedtestStatusRequest.ProtoReflect.Descriptor instead.
+func (*GetSpeedtestStatusRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{51}
+}
+
+type GetSpeedtestStatusResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Status *SpeedtestStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+}
+
+func (x *GetSpeedtestStatusResponse) Reset() {
+	*x = GetSpeedtestStatusResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetSpeedtestStatusResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetSpeedtestStatusResponse) ProtoMessage() {}
+
+func (x *GetSpeedtestStatusResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[52]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetSpeedtestStatusResponse.ProtoReflect.Descriptor instead.
+func (*GetSpeedtestStatusResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{52}
+}
+
+func (x *GetSpeedtestStatusResponse) GetStatus() *SpeedtestStatus {
+	if x != nil {
+		return x.Status
+	}
+	return nil
+}
+
+type ReportClientSpeedtestRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id              uint32          `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	ClientSpeedtest *SpeedTestStats `protobuf:"bytes,2,opt,name=client_speedtest,json=clientSpeedtest,proto3" json:"client_speedtest,omitempty"`
+	WifiSpeedtest   *SpeedTestStats `protobuf:"bytes,5,opt,name=wifi_speedtest,json=wifiSpeedtest,proto3" json:"wifi_speedtest,omitempty"`
+	ClientRssi      float32         `protobuf:"fixed32,3,opt,name=client_rssi,json=clientRssi,proto3" json:"client_rssi,omitempty"`
+	ClientPlatform  *ClientPlatform `protobuf:"bytes,4,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"`
+}
+
+func (x *ReportClientSpeedtestRequest) Reset() {
+	*x = ReportClientSpeedtestRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[53]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReportClientSpeedtestRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReportClientSpeedtestRequest) ProtoMessage() {}
+
+func (x *ReportClientSpeedtestRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[53]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReportClientSpeedtestRequest.ProtoReflect.Descriptor instead.
+func (*ReportClientSpeedtestRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{53}
+}
+
+func (x *ReportClientSpeedtestRequest) GetId() uint32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *ReportClientSpeedtestRequest) GetClientSpeedtest() *SpeedTestStats {
+	if x != nil {
+		return x.ClientSpeedtest
+	}
+	return nil
+}
+
+func (x *ReportClientSpeedtestRequest) GetWifiSpeedtest() *SpeedTestStats {
+	if x != nil {
+		return x.WifiSpeedtest
+	}
+	return nil
+}
+
+func (x *ReportClientSpeedtestRequest) GetClientRssi() float32 {
+	if x != nil {
+		return x.ClientRssi
+	}
+	return 0
+}
+
+func (x *ReportClientSpeedtestRequest) GetClientPlatform() *ClientPlatform {
+	if x != nil {
+		return x.ClientPlatform
+	}
+	return nil
+}
+
+type ReportClientSpeedtestResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ReportClientSpeedtestResponse) Reset() {
+	*x = ReportClientSpeedtestResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[54]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReportClientSpeedtestResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReportClientSpeedtestResponse) ProtoMessage() {}
+
+func (x *ReportClientSpeedtestResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[54]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReportClientSpeedtestResponse.ProtoReflect.Descriptor instead.
+func (*ReportClientSpeedtestResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{54}
+}
+
+type GetConnectionsResponse_ServiceConnection struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Address             string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	SecondsSinceSuccess int32  `protobuf:"varint,2,opt,name=seconds_since_success,json=secondsSinceSuccess,proto3" json:"seconds_since_success,omitempty"`
+}
+
+func (x *GetConnectionsResponse_ServiceConnection) Reset() {
+	*x = GetConnectionsResponse_ServiceConnection{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[56]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetConnectionsResponse_ServiceConnection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetConnectionsResponse_ServiceConnection) ProtoMessage() {}
+
+func (x *GetConnectionsResponse_ServiceConnection) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[56]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetConnectionsResponse_ServiceConnection.ProtoReflect.Descriptor instead.
+func (*GetConnectionsResponse_ServiceConnection) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{26, 0}
+}
+
+func (x *GetConnectionsResponse_ServiceConnection) GetAddress() string {
+	if x != nil {
+		return x.Address
+	}
+	return ""
+}
+
+func (x *GetConnectionsResponse_ServiceConnection) GetSecondsSinceSuccess() int32 {
+	if x != nil {
+		return x.SecondsSinceSuccess
+	}
+	return 0
+}
+
+type SpeedtestStatus_Direction struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ThroughputsMbps []float32      `protobuf:"fixed32,1,rep,packed,name=throughputs_mbps,json=throughputsMbps,proto3" json:"throughputs_mbps,omitempty"`
+	Err             SpeedtestError `protobuf:"varint,2,opt,name=err,proto3,enum=SpaceX.API.Device.SpeedtestError" json:"err,omitempty"`
+}
+
+func (x *SpeedtestStatus_Direction) Reset() {
+	*x = SpeedtestStatus_Direction{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_device_proto_msgTypes[58]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SpeedtestStatus_Direction) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpeedtestStatus_Direction) ProtoMessage() {}
+
+func (x *SpeedtestStatus_Direction) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_device_proto_msgTypes[58]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpeedtestStatus_Direction.ProtoReflect.Descriptor instead.
+func (*SpeedtestStatus_Direction) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_device_proto_rawDescGZIP(), []int{50, 0}
+}
+
+func (x *SpeedtestStatus_Direction) GetThroughputsMbps() []float32 {
+	if x != nil {
+		return x.ThroughputsMbps
+	}
+	return nil
+}
+
+func (x *SpeedtestStatus_Direction) GetErr() SpeedtestError {
+	if x != nil {
+		return x.Err
+	}
+	return SpeedtestError_SPEEDTEST_ERROR_NONE
+}
+
+var File_spacex_api_device_device_proto protoreflect.FileDescriptor
+
+var file_spacex_api_device_device_proto_rawDesc = []byte{
+	0x0a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x11, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x1a, 0x25, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x64,
+	0x69, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65,
+	0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x74, 0x72, 0x61,
+	0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4d, 0x0a, 0x08,
+	0x54, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x0a,
+	0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
+	0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x22, 0x89, 0x22, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e,
+	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19,
+	0x0a, 0x08, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04,
+	0x52, 0x07, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
+	0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52,
+	0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46,
+	0x0a, 0x0b, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x64, 0x18, 0xee, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74,
+	0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x65, 0x74,
+	0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e,
+	0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
+	0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x12, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f,
+	0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x8a, 0x08, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x62,
+	0x75, 0x67, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
+	0x52, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x65, 0x6c,
+	0x65, 0x6d, 0x12, 0x4e, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65,
+	0x73, 0x65, 0x74, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46,
+	0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73,
+	0x65, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x48, 0x0a, 0x0b, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79,
+	0x12, 0x3c, 0x0a, 0x07, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0xf4, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x67,
+	0x0a, 0x16, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e,
+	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e,
+	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
+	0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74,
+	0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x08, 0x67, 0x65, 0x74, 0x5f, 0x70,
+	0x69, 0x6e, 0x67, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47,
+	0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x07, 0x67, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x42, 0x0a, 0x09, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x48, 0x00, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0a,
+	0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0xe9, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74,
+	0x12, 0x3c, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x6b, 0x75, 0x18, 0xf5, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x20, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x55,
+	0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65,
+	0x79, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65,
+	0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65,
+	0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x74,
+	0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53,
+	0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
+	0x00, 0x52, 0x09, 0x73, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x06,
+	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
+	0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x67, 0x65, 0x74,
+	0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x25, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x74, 0x4c, 0x6f,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x65,
+	0x61, 0x70, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70,
+	0x44, 0x75, 0x6d, 0x70, 0x12, 0x54, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x35, 0x0a, 0x04, 0x66, 0x75,
+	0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x75,
+	0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x66, 0x75, 0x73,
+	0x65, 0x12, 0x61, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+	0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
+	0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
+	0x52, 0x12, 0x67, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53,
+	0x74, 0x61, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x0f, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
+	0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x12, 0x61, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x84, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x12, 0x67, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x6a, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x85,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
+	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74,
+	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x12,
+	0x5e, 0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f,
+	0x74, 0x65, 0x5f, 0x73, 0x73, 0x68, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+	0x53, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e,
+	0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x12,
+	0x42, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x87, 0x08, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x66, 0x54,
+	0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f,
+	0x6d, 0x6f, 0x64, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x53, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64,
+	0x65, 0x12, 0x54, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x18, 0x89, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
+	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x68, 0x5f,
+	0x73, 0x74, 0x6f, 0x77, 0x18, 0xd2, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
+	0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x12, 0x5f, 0x0a, 0x14, 0x73,
+	0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74,
+	0x65, 0x73, 0x74, 0x18, 0xdc, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53,
+	0x74, 0x61, 0x72, 0x74, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74,
+	0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10,
+	0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x18, 0xd3, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68,
+	0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x12, 0x6b, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f,
+	0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18,
+	0xd8, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47,
+	0x65, 0x74, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x64, 0x69, 0x73, 0x68, 0x47,
+	0x65, 0x74, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70,
+	0x12, 0x49, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x6d, 0x63,
+	0x18, 0xd7, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68,
+	0x53, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x0a, 0x64, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x12, 0x49, 0x0a, 0x0c, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x6d, 0x63, 0x18, 0xd9, 0x0f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x45, 0x6d,
+	0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68,
+	0x47, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73,
+	0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xda, 0x0f, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x73,
+	0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x69,
+	0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xdb, 0x0f,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x0d, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77,
+	0x0a, 0x1c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x66,
+	0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xa1,
+	0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63,
+	0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x46, 0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x54,
+	0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x19, 0x74, 0x72,
+	0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x66, 0x4c, 0x6f, 0x6f, 0x70, 0x62,
+	0x61, 0x63, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x18, 0xa3, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61,
+	0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e,
+	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x70, 0x0a, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f,
+	0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0xa4, 0x1f,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65,
+	0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74,
+	0x72, 0x79, 0x12, 0x55, 0x0a, 0x10, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x69, 0x66, 0x69, 0x47,
+	0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x61, 0x0a, 0x14, 0x77, 0x69, 0x66,
+	0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63,
+	0x73, 0x18, 0xc0, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65,
+	0x74, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x62, 0x0a, 0x15,
+	0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0xbf, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72,
+	0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69,
+	0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+	0x12, 0x52, 0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57,
+	0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xc1, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x47,
+	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0a, 0x77, 0x69, 0x66, 0x69,
+	0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0xbb, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12,
+	0x6f, 0x0a, 0x1a, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x68,
+	0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x18, 0xc4, 0x17,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74,
+	0x4d, 0x65, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x16, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65,
+	0x74, 0x4d, 0x65, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74,
+	0x12, 0x5f, 0x0a, 0x14, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x73,
+	0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xc5, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11,
+	0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x12, 0x68, 0x0a, 0x17, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xc7, 0x17, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4a, 0x06, 0x08, 0xfa, 0x07, 0x10, 0xfb, 0x07, 0x4a, 0x06,
+	0x08, 0x81, 0x08, 0x10, 0x82, 0x08, 0x4a, 0x06, 0x08, 0x82, 0x08, 0x10, 0x83, 0x08, 0x4a, 0x06,
+	0x08, 0xc3, 0x17, 0x10, 0xc4, 0x17, 0x4a, 0x06, 0x08, 0xc6, 0x17, 0x10, 0xc7, 0x17, 0x22, 0xce,
+	0x24, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f,
+	0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+	0x47, 0x0a, 0x0b, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x64, 0x18, 0xee,
+	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78,
+	0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67,
+	0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x5c, 0x0a, 0x12, 0x65, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x8a,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+	0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x62, 0x75,
+	0x67, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x4f, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72,
+	0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x61, 0x63, 0x74, 0x6f,
+	0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67,
+	0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x07,
+	0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x68, 0x0a, 0x16, 0x67,
+	0x65, 0x74, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
+	0x14, 0x67, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e,
+	0x67, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74,
+	0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x07,
+	0x67, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x70, 0x69, 0x6e, 0x67, 0x5f,
+	0x68, 0x6f, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x48, 0x00, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06,
+	0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x73, 0x70,
+	0x65, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x09, 0x73, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65,
+	0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x6b, 0x75, 0x18, 0xf5, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x74, 0x53, 0x6b,
+	0x75, 0x12, 0x56, 0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64,
+	0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x54, 0x72,
+	0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
+	0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x5f, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x63,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x65, 0x61,
+	0x70, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70,
+	0x44, 0x75, 0x6d, 0x70, 0x12, 0x55, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73,
+	0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x04, 0x66,
+	0x75, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46,
+	0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x66,
+	0x75, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0f, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
+	0x00, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x12, 0x62, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x84, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
+	0x00, 0x52, 0x12, 0x67, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6b, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f,
+	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f,
+	0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x70,
+	0x6f, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x12, 0x5f, 0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x72,
+	0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x73, 0x68, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d,
+	0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
+	0x52, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+	0x53, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74, 0x65, 0x73, 0x74,
+	0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x66,
+	0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08,
+	0x73, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x5f,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x26, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x54,
+	0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x55, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77,
+	0x61, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x89, 0x08, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e,
+	0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5b,
+	0x0a, 0x11, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63,
+	0x61, 0x74, 0x65, 0x18, 0xd5, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44,
+	0x69, 0x73, 0x68, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x64, 0x69, 0x73, 0x68, 0x41,
+	0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x10, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0xd3, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47,
+	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x12, 0x56, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f,
+	0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xd6, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73,
+	0x68, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x0f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xd4,
+	0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65,
+	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
+	0x00, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x6c, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x6f, 0x62, 0x73,
+	0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0xd8, 0x0f, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x4f,
+	0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x15, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74,
+	0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x12, 0x43,
+	0x0a, 0x09, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x74, 0x6f, 0x77, 0x18, 0xd2, 0x0f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x68, 0x53,
+	0x74, 0x6f, 0x77, 0x12, 0x60, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x73,
+	0x68, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xdc, 0x0f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x69, 0x73, 0x68,
+	0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x6c,
+	0x66, 0x54, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x65,
+	0x74, 0x5f, 0x65, 0x6d, 0x63, 0x18, 0xd7, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x45, 0x6d,
+	0x63, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x6d,
+	0x63, 0x18, 0xd9, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73,
+	0x68, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
+	0x00, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x12, 0x53, 0x0a,
+	0x0f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x18, 0xda, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68,
+	0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xdb, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x68, 0x47, 0x65,
+	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x78, 0x0a, 0x1c, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x66, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61,
+	0x63, 0x6b, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0xa1, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x46,
+	0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69,
+	0x76, 0x65, 0x72, 0x49, 0x66, 0x4c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x65, 0x73,
+	0x74, 0x12, 0x68, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72,
+	0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xa3, 0x1f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76,
+	0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76,
+	0x65, 0x72, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x71, 0x0a, 0x19, 0x74,
+	0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74,
+	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0xa4, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x32, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47,
+	0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x17, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76,
+	0x65, 0x72, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x5b,
+	0x0a, 0x11, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63,
+	0x61, 0x74, 0x65, 0x18, 0xbd, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57,
+	0x69, 0x66, 0x69, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x77, 0x69, 0x66, 0x69, 0x41,
+	0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x10, 0x77,
+	0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18,
+	0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47,
+	0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x14, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f,
+	0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xc0, 0x17, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x44, 0x69,
+	0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67,
+	0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x77, 0x69, 0x66, 0x69, 0x5f,
+	0x67, 0x65, 0x74, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xbe, 0x17, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
+	0x0e, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12,
+	0x63, 0x0a, 0x15, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0xbf, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d,
+	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
+	0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74,
+	0x72, 0x69, 0x63, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74,
+	0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xbc, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69,
+	0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x77, 0x69, 0x66,
+	0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xb9, 0x17, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
+	0x0d, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53,
+	0x0a, 0x0f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x18, 0xc1, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x0a, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x75,
+	0x70, 0x18, 0xbb, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
+	0x52, 0x09, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x6f, 0x0a, 0x19, 0x77,
+	0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
+	0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0xce, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x31, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69,
+	0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72,
+	0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x70, 0x0a, 0x1a,
+	0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x18, 0xc4, 0x17, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73,
+	0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d,
+	0x65, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x12, 0x60,
+	0x0a, 0x14, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xc5, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x77,
+	0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x12, 0x69, 0x0a, 0x17, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0xc7, 0x17, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x14, 0x77, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x72,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x06, 0x08, 0xfa, 0x07, 0x10, 0xfb, 0x07, 0x4a,
+	0x06, 0x08, 0x82, 0x08, 0x10, 0x83, 0x08, 0x4a, 0x06, 0x08, 0xe9, 0x0f, 0x10, 0xea, 0x0f, 0x4a,
+	0x06, 0x08, 0xc3, 0x17, 0x10, 0xc4, 0x17, 0x4a, 0x06, 0x08, 0xc6, 0x17, 0x10, 0xc7, 0x17, 0x22,
+	0xab, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x77, 0x69, 0x66,
+	0x69, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52,
+	0x16, 0x77, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x14, 0x77, 0x69, 0x66, 0x69, 0x5f,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18,
+	0xba, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65,
+	0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x66, 0x69, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4a, 0x0a, 0x0d, 0x77, 0x69, 0x66, 0x69,
+	0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0xbb, 0x17, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77, 0x50, 0x65, 0x65, 0x72,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x77, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x77,
+	0x50, 0x65, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a,
+	0x17, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x65, 0x6c, 0x65,
+	0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x75,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x22, 0x1a, 0x0a, 0x18, 0x45, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65,
+	0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x61,
+	0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x46, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x46, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f,
+	0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73,
+	0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x73, 0x6c, 0x6f,
+	0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6c, 0x6f, 0x67,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x4c,
+	0x6f, 0x67, 0x22, 0x10, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65,
+	0x74, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65,
+	0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x73, 0x1a, 0x59, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
+	0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b,
+	0x0a, 0x0f, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x49, 0x0a, 0x10, 0x50,
+	0x69, 0x6e, 0x67, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x35, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
+	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x52, 0x65,
+	0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x52,
+	0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x01,
+	0x0a, 0x0e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73,
+	0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
+	0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73,
+	0x12, 0x23, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70,
+	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
+	0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
+	0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e,
+	0x63, 0x79, 0x4d, 0x73, 0x22, 0xda, 0x01, 0x0a, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50,
+	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66,
+	0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x50, 0x6c, 0x61,
+	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12,
+	0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x56, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65,
+	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x69, 0x6e,
+	0x6f, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x08, 0x50, 0x6c, 0x61,
+	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
+	0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4f, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41,
+	0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x45, 0x42, 0x10,
+	0x03, 0x22, 0xdd, 0x01, 0x0a, 0x10, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74,
+	0x61, 0x74, 0x73, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72,
+	0x73, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x52, 0x73, 0x73, 0x69, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
+	0x6d, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
+	0x6d, 0x22, 0xf5, 0x05, 0x0a, 0x11, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
+	0x6f, 0x61, 0x64, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18,
+	0x01, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x70, 0x73, 0x12, 0x21,
+	0x0a, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x70,
+	0x73, 0x12, 0x1f, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63,
+	0x79, 0x53, 0x12, 0x27, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d,
+	0x62, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x64,
+	0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x23, 0x0a, 0x0b, 0x75,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02,
+	0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73,
+	0x12, 0x21, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63,
+	0x79, 0x4d, 0x73, 0x12, 0x4c, 0x0a, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73,
+	0x52, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x12, 0x36, 0x0a, 0x18, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x5f, 0x31, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70,
+	0x73, 0x31, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x32, 0x0a, 0x16, 0x75, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x31, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63,
+	0x6f, 0x6e, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x75, 0x70, 0x6c, 0x6f, 0x61,
+	0x64, 0x4d, 0x62, 0x70, 0x73, 0x31, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x36, 0x0a,
+	0x18, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x34,
+	0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x14, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x34, 0x54, 0x63,
+	0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x32, 0x0a, 0x16, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
+	0x6d, 0x62, 0x70, 0x73, 0x5f, 0x34, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70,
+	0x73, 0x34, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x38, 0x0a, 0x19, 0x64, 0x6f, 0x77,
+	0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x31, 0x36, 0x5f, 0x74, 0x63,
+	0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x64, 0x6f,
+	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x31, 0x36, 0x54, 0x63, 0x70, 0x43,
+	0x6f, 0x6e, 0x6e, 0x12, 0x34, 0x0a, 0x17, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x5f, 0x31, 0x36, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73,
+	0x31, 0x36, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x38, 0x0a, 0x19, 0x64, 0x6f, 0x77,
+	0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x36, 0x34, 0x5f, 0x74, 0x63,
+	0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x64, 0x6f,
+	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x36, 0x34, 0x54, 0x63, 0x70, 0x43,
+	0x6f, 0x6e, 0x6e, 0x12, 0x34, 0x0a, 0x17, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x5f, 0x36, 0x34, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73,
+	0x36, 0x34, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74,
+	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x22, 0xca, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a,
+	0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x37, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x73, 0x1a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
+	0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e,
+	0x63, 0x65, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x13, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x53, 0x75,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x1a, 0x78, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+	0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x22, 0x49, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65,
+	0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6b, 0x65, 0x79,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c,
+	0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x53,
+	0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x12,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f,
+	0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x69,
+	0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
+	0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70,
+	0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x54, 0x61, 0x62,
+	0x6c, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x74, 0x61,
+	0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65,
+	0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x73, 0x0a, 0x1c, 0x47, 0x65, 0x74,
+	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18,
+	0xee, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x11, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, 0x14,
+	0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x22, 0x32, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x44,
+	0x75, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68,
+	0x65, 0x61, 0x70, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x68, 0x65, 0x61, 0x70, 0x44, 0x75, 0x6d, 0x70, 0x22, 0x4f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39,
+	0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x13, 0x47, 0x65,
+	0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x30, 0x0a, 0x03, 0x6c, 0x6c, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x4c, 0x4c, 0x41, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03,
+	0x6c, 0x6c, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x5f, 0x6d, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x4d, 0x12, 0x39, 0x0a, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52,
+	0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x65,
+	0x63, 0x65, 0x66, 0x22, 0xf7, 0x07, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x45,
+	0x6d, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x68, 0x65,
+	0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x74, 0x68, 0x65, 0x74, 0x61, 0x12,
+	0x10, 0x0a, 0x03, 0x70, 0x68, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x70, 0x68,
+	0x69, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x06, 0x72, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78,
+	0x5f, 0x63, 0x68, 0x61, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x78, 0x43,
+	0x68, 0x61, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x74,
+	0x69, 0x6c, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x10, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x54, 0x69, 0x6c, 0x74, 0x41, 0x6e, 0x67, 0x6c,
+	0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69,
+	0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x4f, 0x76,
+	0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x68, 0x65, 0x74, 0x61, 0x5f,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74,
+	0x68, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70,
+	0x68, 0x69, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0a, 0x70, 0x68, 0x69, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x69, 0x64, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x64, 0x6c, 0x65,
+	0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x69,
+	0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x61, 0x73, 0x74, 0x53, 0x77,
+	0x69, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6b, 0x79, 0x5f, 0x73,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x6b, 0x79,
+	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f,
+	0x70, 0x6c, 0x6c, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x50, 0x6c, 0x6c, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b,
+	0x12, 0x2c, 0x0a, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x69, 0x72, 0x70, 0x5f, 0x66,
+	0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x66, 0x6f,
+	0x72, 0x63, 0x65, 0x45, 0x69, 0x72, 0x70, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x30,
+	0x0a, 0x14, 0x73, 0x6e, 0x6f, 0x77, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x76,
+	0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6e,
+	0x6f, 0x77, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
+	0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x74, 0x69,
+	0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c,
+	0x54, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6c, 0x74, 0x5f,
+	0x74, 0x6f, 0x5f, 0x73, 0x74, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0c, 0x74, 0x69, 0x6c, 0x74, 0x54, 0x6f, 0x53, 0x74, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x16, 0x0a,
+	0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72,
+	0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75,
+	0x6f, 0x75, 0x73, 0x5f, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x15,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73,
+	0x4d, 0x6f, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73,
+	0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x16, 0x64, 0x69, 0x73,
+	0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4d, 0x65, 0x74,
+	0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x5f, 0x74, 0x61, 0x70, 0x65, 0x72, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18,
+	0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x54, 0x61, 0x70, 0x65, 0x72, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x32, 0x0a,
+	0x15, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6f, 0x76,
+	0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+	0x65, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x78, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63,
+	0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x13, 0x74, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4f, 0x76,
+	0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x78, 0x5f, 0x64, 0x75, 0x74,
+	0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
+	0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x72, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79,
+	0x63, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x1d, 0x65,
+	0x69, 0x72, 0x70, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f,
+	0x64, 0x62, 0x77, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x1b, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x19, 0x65, 0x69, 0x72, 0x70, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x4c, 0x69, 0x6d,
+	0x69, 0x74, 0x44, 0x62, 0x77, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x22, 0x14, 0x0a,
+	0x12, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x45, 0x6d,
+	0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc8, 0x12, 0x0a, 0x12, 0x44, 0x69, 0x73,
+	0x68, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75,
+	0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x70, 0x73, 0x5f,
+	0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b,
+	0x67, 0x70, 0x73, 0x4c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x67,
+	0x70, 0x73, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0c, 0x67, 0x70, 0x73, 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x12, 0x19, 0x0a, 0x08, 0x67, 0x70, 0x73, 0x5f, 0x70, 0x64, 0x6f, 0x70, 0x18, 0x12, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x07, 0x67, 0x70, 0x73, 0x50, 0x64, 0x6f, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x72,
+	0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x66,
+	0x4d, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x68, 0x69, 0x18, 0x14, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x03, 0x70, 0x68, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x68, 0x65, 0x74, 0x61, 0x18,
+	0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x74, 0x68, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a,
+	0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x09, 0x72, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
+	0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x09, 0x74, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x09, 0x74, 0x5f,
+	0x64, 0x62, 0x66, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x74,
+	0x44, 0x62, 0x66, 0x4d, 0x61, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x5f, 0x63, 0x65, 0x6e, 0x74,
+	0x65, 0x72, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x74, 0x43, 0x65, 0x6e, 0x74, 0x65,
+	0x72, 0x12, 0x3e, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f,
+	0x73, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x6c, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+	0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x77,
+	0x65, 0x72, 0x53, 0x6e, 0x6f, 0x77, 0x4d, 0x65, 0x6c, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x20, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x72,
+	0x78, 0x5f, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x21, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x0b, 0x72, 0x78, 0x42, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x22, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65,
+	0x18, 0x22, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x78, 0x42, 0x65, 0x61, 0x6d, 0x53, 0x74,
+	0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x64, 0x75, 0x70, 0x6c,
+	0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f,
+	0x68, 0x61, 0x6c, 0x66, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x2e, 0x0a, 0x13, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x74, 0x5f, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x24, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61,
+	0x6e, 0x75, 0x61, 0x6c, 0x54, 0x69, 0x6c, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12,
+	0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6c, 0x74, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x25, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6c, 0x74, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x2f,
+	0x0a, 0x14, 0x70, 0x6c, 0x6c, 0x5f, 0x74, 0x78, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65,
+	0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x6c,
+	0x6c, 0x54, 0x78, 0x4c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12,
+	0x36, 0x0a, 0x17, 0x65, 0x69, 0x72, 0x70, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64,
+	0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x15, 0x65, 0x69, 0x72, 0x70, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x54, 0x68,
+	0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x69, 0x72, 0x70, 0x5f,
+	0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x28,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x65, 0x69, 0x72, 0x70, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x4f,
+	0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x64, 0x6c, 0x65, 0x5f,
+	0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+	0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72,
+	0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x74,
+	0x68, 0x65, 0x74, 0x61, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x74, 0x68, 0x65,
+	0x74, 0x61, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+	0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x68, 0x65, 0x74, 0x61, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x12, 0x74, 0x68, 0x65, 0x74, 0x61, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x68, 0x69, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x12, 0x70, 0x68, 0x69, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x68, 0x69, 0x5f, 0x6f, 0x76, 0x65,
+	0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x10, 0x70, 0x68, 0x69, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x6f,
+	0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2e, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x78, 0x5f, 0x63,
+	0x68, 0x61, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x78, 0x43, 0x68, 0x61, 0x6e,
+	0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a,
+	0x1b, 0x73, 0x6b, 0x79, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6f, 0x76, 0x65, 0x72,
+	0x72, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x30, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x18, 0x73, 0x6b, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x76, 0x65,
+	0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16,
+	0x66, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x66, 0x61,
+	0x73, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x32, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c,
+	0x0a, 0x12, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x69, 0x72, 0x70, 0x5f, 0x66, 0x61, 0x69,
+	0x6c, 0x75, 0x72, 0x65, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x63,
+	0x65, 0x45, 0x69, 0x72, 0x70, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10,
+	0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6c, 0x6c, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b,
+	0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x50, 0x6c, 0x6c,
+	0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x65,
+	0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c,
+	0x75, 0x74, 0x49, 0x6e, 0x65, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08,
+	0x72, 0x66, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
+	0x72, 0x66, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6c, 0x74, 0x5f,
+	0x74, 0x6f, 0x5f, 0x73, 0x74, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x37, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0c, 0x74, 0x69, 0x6c, 0x74, 0x54, 0x6f, 0x53, 0x74, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x16, 0x0a,
+	0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72,
+	0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75,
+	0x6f, 0x75, 0x73, 0x5f, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x39,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73,
+	0x4d, 0x6f, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73,
+	0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x16, 0x64, 0x69, 0x73,
+	0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4d, 0x65, 0x74,
+	0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x5f, 0x74, 0x61, 0x70, 0x65, 0x72, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18,
+	0x3b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x54, 0x61, 0x70, 0x65, 0x72, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x36, 0x0a,
+	0x17, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x70, 0x65, 0x72,
+	0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15,
+	0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65, 0x54, 0x61, 0x70, 0x65, 0x72, 0x45, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75,
+	0x64, 0x65, 0x5f, 0x74, 0x61, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x3d,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65, 0x54,
+	0x61, 0x70, 0x65, 0x72, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69,
+	0x64, 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72,
+	0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x32, 0x0a,
+	0x15, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69,
+	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x6d, 0x61,
+	0x78, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63,
+	0x65, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x63,
+	0x61, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x40, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x15, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x61, 0x6c,
+	0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x78, 0x5f,
+	0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x18, 0x41, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x78, 0x44, 0x75, 0x74,
+	0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x33,
+	0x0a, 0x16, 0x72, 0x78, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f,
+	0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13,
+	0x72, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d,
+	0x73, 0x18, 0x43, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x74, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4d,
+	0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18,
+	0x44, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x72, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12,
+	0x2f, 0x0a, 0x14, 0x65, 0x69, 0x72, 0x70, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x5f, 0x6c, 0x69,
+	0x6d, 0x69, 0x74, 0x5f, 0x64, 0x62, 0x77, 0x18, 0x45, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x65,
+	0x69, 0x72, 0x70, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x62, 0x77,
+	0x12, 0x40, 0x0a, 0x1d, 0x65, 0x69, 0x72, 0x70, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x5f, 0x6c,
+	0x69, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x62, 0x77, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+	0x65, 0x18, 0x46, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x65, 0x69, 0x72, 0x70, 0x4c, 0x65, 0x67,
+	0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x62, 0x77, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69,
+	0x64, 0x65, 0x4a, 0x04, 0x08, 0x1a, 0x10, 0x1e, 0x52, 0x10, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69,
+	0x6e, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x61, 0x64, 0x64, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0d,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x74,
+	0x69, 0x6e, 0x67, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73,
+	0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x61,
+	0x72, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0xaa, 0x02, 0x0a, 0x0f, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69,
+	0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e,
+	0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69,
+	0x64, 0x12, 0x3d, 0x0a, 0x02, 0x75, 0x70, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x75, 0x70,
+	0x12, 0x41, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64,
+	0x6f, 0x77, 0x6e, 0x1a, 0x6b, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x73, 0x5f,
+	0x6d, 0x62, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x6f,
+	0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x73, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x33, 0x0a, 0x03, 0x65,
+	0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x03, 0x65, 0x72, 0x72,
+	0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a,
+	0x1a, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x70,
 	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x49, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75,
-	0x73, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x30, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79,
-	0x73, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x4b,
-	0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x0a, 0x0d, 0x53,
-	0x65, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03,
-	0x73, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x21,
-	0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64,
-	0x65, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61,
-	0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22,
-	0x10, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x22, 0x73, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69,
-	0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xee, 0x07, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x23, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x74, 0x65,
-	0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e,
-	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x32, 0x95, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1b, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x54, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1d, 0x2e, 0x53, 0x70, 0x61,
-	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46,
-	0x72, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x41, 0x0a,
-	0x06, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f,
+	0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74,
+	0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0e, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73,
+	0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74,
+	0x73, 0x52, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x73, 0x73,
+	0x69, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74,
+	0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0e, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x1f, 0x0a,
+	0x1d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x56,
+	0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f,
+	0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10,
+	0x02, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x03, 0x12,
+	0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52,
+	0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x05, 0x2a, 0xb7, 0x01, 0x0a, 0x0e, 0x53, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x50, 0x45,
+	0x45, 0x44, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x4e,
+	0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x50, 0x45, 0x45, 0x44, 0x54, 0x45, 0x53, 0x54,
+	0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01,
+	0x12, 0x19, 0x0a, 0x15, 0x53, 0x50, 0x45, 0x45, 0x44, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x52,
+	0x52, 0x4f, 0x52, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x53,
+	0x50, 0x45, 0x45, 0x44, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x41,
+	0x50, 0x49, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x50, 0x45, 0x45, 0x44, 0x54, 0x45, 0x53,
+	0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c,
+	0x54, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x50, 0x45, 0x45, 0x44, 0x54, 0x45, 0x53, 0x54,
+	0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x05,
+	0x32, 0x95, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x53,
+	0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x1a, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x06, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12,
+	0x1a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -2503,140 +6268,277 @@ func file_spacex_api_device_device_proto_rawDescGZIP()
 	return file_spacex_api_device_device_proto_rawDescData
 }
 
-var file_spacex_api_device_device_proto_msgTypes = make([]protoimpl.MessageInfo, 30)
+var file_spacex_api_device_device_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_spacex_api_device_device_proto_msgTypes = make([]protoimpl.MessageInfo, 59)
 var file_spacex_api_device_device_proto_goTypes = []interface{}{
-	(*ToDevice)(nil),                          // 0: SpaceX.API.Device.ToDevice
-	(*FromDevice)(nil),                        // 1: SpaceX.API.Device.FromDevice
-	(*Request)(nil),                           // 2: SpaceX.API.Device.Request
-	(*Response)(nil),                          // 3: SpaceX.API.Device.Response
-	(*Event)(nil),                             // 4: SpaceX.API.Device.Event
-	(*FactoryResetRequest)(nil),               // 5: SpaceX.API.Device.FactoryResetRequest
-	(*FactoryResetResponse)(nil),              // 6: SpaceX.API.Device.FactoryResetResponse
-	(*GetHistoryRequest)(nil),                 // 7: SpaceX.API.Device.GetHistoryRequest
-	(*GetLogRequest)(nil),                     // 8: SpaceX.API.Device.GetLogRequest
-	(*GetLogResponse)(nil),                    // 9: SpaceX.API.Device.GetLogResponse
-	(*GetPingRequest)(nil),                    // 10: SpaceX.API.Device.GetPingRequest
-	(*GetPingResponse)(nil),                   // 11: SpaceX.API.Device.GetPingResponse
-	(*PingHostRequest)(nil),                   // 12: SpaceX.API.Device.PingHostRequest
-	(*PingHostResponse)(nil),                  // 13: SpaceX.API.Device.PingHostResponse
-	(*GetStatusRequest)(nil),                  // 14: SpaceX.API.Device.GetStatusRequest
-	(*RebootRequest)(nil),                     // 15: SpaceX.API.Device.RebootRequest
-	(*RebootResponse)(nil),                    // 16: SpaceX.API.Device.RebootResponse
-	(*SpeedTestRequest)(nil),                  // 17: SpaceX.API.Device.SpeedTestRequest
-	(*SpeedTestResponse)(nil),                 // 18: SpaceX.API.Device.SpeedTestResponse
-	(*GetDeviceInfoRequest)(nil),              // 19: SpaceX.API.Device.GetDeviceInfoRequest
-	(*GetDeviceInfoResponse)(nil),             // 20: SpaceX.API.Device.GetDeviceInfoResponse
-	(*SetTrustedKeysRequest)(nil),             // 21: SpaceX.API.Device.SetTrustedKeysRequest
-	(*SetTrustedKeysResponse)(nil),            // 22: SpaceX.API.Device.SetTrustedKeysResponse
-	(*SetSkuRequest)(nil),                     // 23: SpaceX.API.Device.SetSkuRequest
-	(*SetSkuResponse)(nil),                    // 24: SpaceX.API.Device.SetSkuResponse
-	(*UpdateRequest)(nil),                     // 25: SpaceX.API.Device.UpdateRequest
-	(*UpdateResponse)(nil),                    // 26: SpaceX.API.Device.UpdateResponse
-	(*GetNetworkInterfacesRequest)(nil),       // 27: SpaceX.API.Device.GetNetworkInterfacesRequest
-	(*GetNetworkInterfacesResponse)(nil),      // 28: SpaceX.API.Device.GetNetworkInterfacesResponse
-	nil,                                       // 29: SpaceX.API.Device.GetPingResponse.ResultsEntry
-	(*SignedData)(nil),                        // 30: SpaceX.API.Device.SignedData
-	(*GetNextIdRequest)(nil),                  // 31: SpaceX.API.Device.GetNextIdRequest
-	(*AuthenticateRequest)(nil),               // 32: SpaceX.API.Device.AuthenticateRequest
-	(*DishStowRequest)(nil),                   // 33: SpaceX.API.Device.DishStowRequest
-	(*TransceiverIFLoopbackTestRequest)(nil),  // 34: SpaceX.API.Device.TransceiverIFLoopbackTestRequest
-	(*TransceiverGetStatusRequest)(nil),       // 35: SpaceX.API.Device.TransceiverGetStatusRequest
-	(*WifiGetClientsRequest)(nil),             // 36: SpaceX.API.Device.WifiGetClientsRequest
-	(*WifiGetPingMetricsRequest)(nil),         // 37: SpaceX.API.Device.WifiGetPingMetricsRequest
-	(*WifiSetConfigRequest)(nil),              // 38: SpaceX.API.Device.WifiSetConfigRequest
-	(*WifiSetupRequest)(nil),                  // 39: SpaceX.API.Device.WifiSetupRequest
-	(*status.Status)(nil),                     // 40: SpaceX.API.Status.Status
-	(*GetNextIdResponse)(nil),                 // 41: SpaceX.API.Device.GetNextIdResponse
-	(*DishAuthenticateResponse)(nil),          // 42: SpaceX.API.Device.DishAuthenticateResponse
-	(*DishGetHistoryResponse)(nil),            // 43: SpaceX.API.Device.DishGetHistoryResponse
-	(*DishGetStatusResponse)(nil),             // 44: SpaceX.API.Device.DishGetStatusResponse
-	(*DishStowResponse)(nil),                  // 45: SpaceX.API.Device.DishStowResponse
-	(*TransceiverIFLoopbackTestResponse)(nil), // 46: SpaceX.API.Device.TransceiverIFLoopbackTestResponse
-	(*TransceiverGetStatusResponse)(nil),      // 47: SpaceX.API.Device.TransceiverGetStatusResponse
-	(*WifiAuthenticateResponse)(nil),          // 48: SpaceX.API.Device.WifiAuthenticateResponse
-	(*WifiGetClientsResponse)(nil),            // 49: SpaceX.API.Device.WifiGetClientsResponse
-	(*WifiGetHistoryResponse)(nil),            // 50: SpaceX.API.Device.WifiGetHistoryResponse
-	(*WifiGetPingMetricsResponse)(nil),        // 51: SpaceX.API.Device.WifiGetPingMetricsResponse
-	(*WifiGetStatusResponse)(nil),             // 52: SpaceX.API.Device.WifiGetStatusResponse
-	(*WifiSetConfigResponse)(nil),             // 53: SpaceX.API.Device.WifiSetConfigResponse
-	(*WifiSetupResponse)(nil),                 // 54: SpaceX.API.Device.WifiSetupResponse
-	(*WifiNewClientConnectedEvent)(nil),       // 55: SpaceX.API.Device.WifiNewClientConnectedEvent
-	(*WifiAccountBondingEvent)(nil),           // 56: SpaceX.API.Device.WifiAccountBondingEvent
-	(*PingResult)(nil),                        // 57: SpaceX.API.Device.PingResult
-	(*DeviceInfo)(nil),                        // 58: SpaceX.API.Device.DeviceInfo
-	(*PublicKey)(nil),                         // 59: SpaceX.API.Device.PublicKey
-	(*NetworkInterface)(nil),                  // 60: SpaceX.API.Device.NetworkInterface
+	(PositionSource)(0),                              // 0: SpaceX.API.Device.PositionSource
+	(SpeedtestError)(0),                              // 1: SpaceX.API.Device.SpeedtestError
+	(ClientPlatform_Platform)(0),                     // 2: SpaceX.API.Device.ClientPlatform.Platform
+	(*ToDevice)(nil),                                 // 3: SpaceX.API.Device.ToDevice
+	(*FromDevice)(nil),                               // 4: SpaceX.API.Device.FromDevice
+	(*Request)(nil),                                  // 5: SpaceX.API.Device.Request
+	(*Response)(nil),                                 // 6: SpaceX.API.Device.Response
+	(*Event)(nil),                                    // 7: SpaceX.API.Device.Event
+	(*EnableDebugTelemRequest)(nil),                  // 8: SpaceX.API.Device.EnableDebugTelemRequest
+	(*EnableDebugTelemResponse)(nil),                 // 9: SpaceX.API.Device.EnableDebugTelemResponse
+	(*FactoryResetRequest)(nil),                      // 10: SpaceX.API.Device.FactoryResetRequest
+	(*FactoryResetResponse)(nil),                     // 11: SpaceX.API.Device.FactoryResetResponse
+	(*FuseRequest)(nil),                              // 12: SpaceX.API.Device.FuseRequest
+	(*FuseResponse)(nil),                             // 13: SpaceX.API.Device.FuseResponse
+	(*GetHistoryRequest)(nil),                        // 14: SpaceX.API.Device.GetHistoryRequest
+	(*GetLogRequest)(nil),                            // 15: SpaceX.API.Device.GetLogRequest
+	(*GetLogResponse)(nil),                           // 16: SpaceX.API.Device.GetLogResponse
+	(*GetPingRequest)(nil),                           // 17: SpaceX.API.Device.GetPingRequest
+	(*GetPingResponse)(nil),                          // 18: SpaceX.API.Device.GetPingResponse
+	(*PingHostRequest)(nil),                          // 19: SpaceX.API.Device.PingHostRequest
+	(*PingHostResponse)(nil),                         // 20: SpaceX.API.Device.PingHostResponse
+	(*GetStatusRequest)(nil),                         // 21: SpaceX.API.Device.GetStatusRequest
+	(*RebootRequest)(nil),                            // 22: SpaceX.API.Device.RebootRequest
+	(*RebootResponse)(nil),                           // 23: SpaceX.API.Device.RebootResponse
+	(*SpeedTestStats)(nil),                           // 24: SpaceX.API.Device.SpeedTestStats
+	(*ClientPlatform)(nil),                           // 25: SpaceX.API.Device.ClientPlatform
+	(*SpeedTestRequest)(nil),                         // 26: SpaceX.API.Device.SpeedTestRequest
+	(*SpeedTestResponse)(nil),                        // 27: SpaceX.API.Device.SpeedTestResponse
+	(*GetConnectionsRequest)(nil),                    // 28: SpaceX.API.Device.GetConnectionsRequest
+	(*GetConnectionsResponse)(nil),                   // 29: SpaceX.API.Device.GetConnectionsResponse
+	(*GetDeviceInfoRequest)(nil),                     // 30: SpaceX.API.Device.GetDeviceInfoRequest
+	(*GetDeviceInfoResponse)(nil),                    // 31: SpaceX.API.Device.GetDeviceInfoResponse
+	(*SetTrustedKeysRequest)(nil),                    // 32: SpaceX.API.Device.SetTrustedKeysRequest
+	(*SetTrustedKeysResponse)(nil),                   // 33: SpaceX.API.Device.SetTrustedKeysResponse
+	(*SetSkuRequest)(nil),                            // 34: SpaceX.API.Device.SetSkuRequest
+	(*SetSkuResponse)(nil),                           // 35: SpaceX.API.Device.SetSkuResponse
+	(*UpdateRequest)(nil),                            // 36: SpaceX.API.Device.UpdateRequest
+	(*UpdateResponse)(nil),                           // 37: SpaceX.API.Device.UpdateResponse
+	(*RestartControlRequest)(nil),                    // 38: SpaceX.API.Device.RestartControlRequest
+	(*RestartControlResponse)(nil),                   // 39: SpaceX.API.Device.RestartControlResponse
+	(*GetNetworkInterfacesRequest)(nil),              // 40: SpaceX.API.Device.GetNetworkInterfacesRequest
+	(*GetNetworkInterfacesResponse)(nil),             // 41: SpaceX.API.Device.GetNetworkInterfacesResponse
+	(*GetHeapDumpRequest)(nil),                       // 42: SpaceX.API.Device.GetHeapDumpRequest
+	(*GetHeapDumpResponse)(nil),                      // 43: SpaceX.API.Device.GetHeapDumpResponse
+	(*GetLocationRequest)(nil),                       // 44: SpaceX.API.Device.GetLocationRequest
+	(*GetLocationResponse)(nil),                      // 45: SpaceX.API.Device.GetLocationResponse
+	(*DishSetEmcRequest)(nil),                        // 46: SpaceX.API.Device.DishSetEmcRequest
+	(*DishSetEmcResponse)(nil),                       // 47: SpaceX.API.Device.DishSetEmcResponse
+	(*DishGetEmcRequest)(nil),                        // 48: SpaceX.API.Device.DishGetEmcRequest
+	(*DishGetEmcResponse)(nil),                       // 49: SpaceX.API.Device.DishGetEmcResponse
+	(*GetPersistentStatsRequest)(nil),                // 50: SpaceX.API.Device.GetPersistentStatsRequest
+	(*StartSpeedtestRequest)(nil),                    // 51: SpaceX.API.Device.StartSpeedtestRequest
+	(*StartSpeedtestResponse)(nil),                   // 52: SpaceX.API.Device.StartSpeedtestResponse
+	(*SpeedtestStatus)(nil),                          // 53: SpaceX.API.Device.SpeedtestStatus
+	(*GetSpeedtestStatusRequest)(nil),                // 54: SpaceX.API.Device.GetSpeedtestStatusRequest
+	(*GetSpeedtestStatusResponse)(nil),               // 55: SpaceX.API.Device.GetSpeedtestStatusResponse
+	(*ReportClientSpeedtestRequest)(nil),             // 56: SpaceX.API.Device.ReportClientSpeedtestRequest
+	(*ReportClientSpeedtestResponse)(nil),            // 57: SpaceX.API.Device.ReportClientSpeedtestResponse
+	nil,                                              // 58: SpaceX.API.Device.GetPingResponse.ResultsEntry
+	(*GetConnectionsResponse_ServiceConnection)(nil), // 59: SpaceX.API.Device.GetConnectionsResponse.ServiceConnection
+	nil,                                       // 60: SpaceX.API.Device.GetConnectionsResponse.ServicesEntry
+	(*SpeedtestStatus_Direction)(nil),         // 61: SpaceX.API.Device.SpeedtestStatus.Direction
+	(*SignedData)(nil),                        // 62: SpaceX.API.Device.SignedData
+	(*GetNextIdRequest)(nil),                  // 63: SpaceX.API.Device.GetNextIdRequest
+	(*AuthenticateRequest)(nil),               // 64: SpaceX.API.Device.AuthenticateRequest
+	(*InitiateRemoteSshRequest)(nil),          // 65: SpaceX.API.Device.InitiateRemoteSshRequest
+	(*SelfTestRequest)(nil),                   // 66: SpaceX.API.Device.SelfTestRequest
+	(*SetTestModeRequest)(nil),                // 67: SpaceX.API.Device.SetTestModeRequest
+	(*SoftwareUpdateRequest)(nil),             // 68: SpaceX.API.Device.SoftwareUpdateRequest
+	(*DishStowRequest)(nil),                   // 69: SpaceX.API.Device.DishStowRequest
+	(*StartDishSelfTestRequest)(nil),          // 70: SpaceX.API.Device.StartDishSelfTestRequest
+	(*DishGetContextRequest)(nil),             // 71: SpaceX.API.Device.DishGetContextRequest
+	(*DishGetObstructionMapRequest)(nil),      // 72: SpaceX.API.Device.DishGetObstructionMapRequest
+	(*DishSetConfigRequest)(nil),              // 73: SpaceX.API.Device.DishSetConfigRequest
+	(*DishGetConfigRequest)(nil),              // 74: SpaceX.API.Device.DishGetConfigRequest
+	(*TransceiverIFLoopbackTestRequest)(nil),  // 75: SpaceX.API.Device.TransceiverIFLoopbackTestRequest
+	(*TransceiverGetStatusRequest)(nil),       // 76: SpaceX.API.Device.TransceiverGetStatusRequest
+	(*TransceiverGetTelemetryRequest)(nil),    // 77: SpaceX.API.Device.TransceiverGetTelemetryRequest
+	(*WifiGetClientsRequest)(nil),             // 78: SpaceX.API.Device.WifiGetClientsRequest
+	(*WifiGetDiagnosticsRequest)(nil),         // 79: SpaceX.API.Device.WifiGetDiagnosticsRequest
+	(*WifiGetPingMetricsRequest)(nil),         // 80: SpaceX.API.Device.WifiGetPingMetricsRequest
+	(*WifiSetConfigRequest)(nil),              // 81: SpaceX.API.Device.WifiSetConfigRequest
+	(*WifiGetConfigRequest)(nil),              // 82: SpaceX.API.Device.WifiGetConfigRequest
+	(*WifiSetupRequest)(nil),                  // 83: SpaceX.API.Device.WifiSetupRequest
+	(*WifiSetMeshDeviceTrustRequest)(nil),     // 84: SpaceX.API.Device.WifiSetMeshDeviceTrustRequest
+	(*WifiSetMeshConfigRequest)(nil),          // 85: SpaceX.API.Device.WifiSetMeshConfigRequest
+	(*WifiGetClientHistoryRequest)(nil),       // 86: SpaceX.API.Device.WifiGetClientHistoryRequest
+	(*status.Status)(nil),                     // 87: SpaceX.API.Status.Status
+	(*GetNextIdResponse)(nil),                 // 88: SpaceX.API.Device.GetNextIdResponse
+	(*InitiateRemoteSshResponse)(nil),         // 89: SpaceX.API.Device.InitiateRemoteSshResponse
+	(*SelfTestResponse)(nil),                  // 90: SpaceX.API.Device.SelfTestResponse
+	(*SetTestModeResponse)(nil),               // 91: SpaceX.API.Device.SetTestModeResponse
+	(*SoftwareUpdateResponse)(nil),            // 92: SpaceX.API.Device.SoftwareUpdateResponse
+	(*DishAuthenticateResponse)(nil),          // 93: SpaceX.API.Device.DishAuthenticateResponse
+	(*DishGetContextResponse)(nil),            // 94: SpaceX.API.Device.DishGetContextResponse
+	(*DishGetHistoryResponse)(nil),            // 95: SpaceX.API.Device.DishGetHistoryResponse
+	(*DishGetStatusResponse)(nil),             // 96: SpaceX.API.Device.DishGetStatusResponse
+	(*DishGetObstructionMapResponse)(nil),     // 97: SpaceX.API.Device.DishGetObstructionMapResponse
+	(*DishStowResponse)(nil),                  // 98: SpaceX.API.Device.DishStowResponse
+	(*StartDishSelfTestResponse)(nil),         // 99: SpaceX.API.Device.StartDishSelfTestResponse
+	(*DishSetConfigResponse)(nil),             // 100: SpaceX.API.Device.DishSetConfigResponse
+	(*DishGetConfigResponse)(nil),             // 101: SpaceX.API.Device.DishGetConfigResponse
+	(*TransceiverIFLoopbackTestResponse)(nil), // 102: SpaceX.API.Device.TransceiverIFLoopbackTestResponse
+	(*TransceiverGetStatusResponse)(nil),      // 103: SpaceX.API.Device.TransceiverGetStatusResponse
+	(*TransceiverGetTelemetryResponse)(nil),   // 104: SpaceX.API.Device.TransceiverGetTelemetryResponse
+	(*WifiAuthenticateResponse)(nil),          // 105: SpaceX.API.Device.WifiAuthenticateResponse
+	(*WifiGetClientsResponse)(nil),            // 106: SpaceX.API.Device.WifiGetClientsResponse
+	(*WifiGetDiagnosticsResponse)(nil),        // 107: SpaceX.API.Device.WifiGetDiagnosticsResponse
+	(*WifiGetHistoryResponse)(nil),            // 108: SpaceX.API.Device.WifiGetHistoryResponse
+	(*WifiGetPingMetricsResponse)(nil),        // 109: SpaceX.API.Device.WifiGetPingMetricsResponse
+	(*WifiGetStatusResponse)(nil),             // 110: SpaceX.API.Device.WifiGetStatusResponse
+	(*WifiSetConfigResponse)(nil),             // 111: SpaceX.API.Device.WifiSetConfigResponse
+	(*WifiGetConfigResponse)(nil),             // 112: SpaceX.API.Device.WifiGetConfigResponse
+	(*WifiSetupResponse)(nil),                 // 113: SpaceX.API.Device.WifiSetupResponse
+	(*WifiGetPersistentStatsResponse)(nil),    // 114: SpaceX.API.Device.WifiGetPersistentStatsResponse
+	(*WifiSetMeshDeviceTrustResponse)(nil),    // 115: SpaceX.API.Device.WifiSetMeshDeviceTrustResponse
+	(*WifiSetMeshConfigResponse)(nil),         // 116: SpaceX.API.Device.WifiSetMeshConfigResponse
+	(*WifiGetClientHistoryResponse)(nil),      // 117: SpaceX.API.Device.WifiGetClientHistoryResponse
+	(*WifiNewClientConnectedEvent)(nil),       // 118: SpaceX.API.Device.WifiNewClientConnectedEvent
+	(*WifiAccountBondingEvent)(nil),           // 119: SpaceX.API.Device.WifiAccountBondingEvent
+	(*WifiNewPeerEvent)(nil),                  // 120: SpaceX.API.Device.WifiNewPeerEvent
+	(*PingResult)(nil),                        // 121: SpaceX.API.Device.PingResult
+	(*DeviceInfo)(nil),                        // 122: SpaceX.API.Device.DeviceInfo
+	(*PublicKey)(nil),                         // 123: SpaceX.API.Device.PublicKey
+	(*NetworkInterface)(nil),                  // 124: SpaceX.API.Device.NetworkInterface
+	(*LLAPosition)(nil),                       // 125: SpaceX.API.Device.LLAPosition
 }
 var file_spacex_api_device_device_proto_depIdxs = []int32{
-	2,  // 0: SpaceX.API.Device.ToDevice.request:type_name -> SpaceX.API.Device.Request
-	3,  // 1: SpaceX.API.Device.FromDevice.response:type_name -> SpaceX.API.Device.Response
-	4,  // 2: SpaceX.API.Device.FromDevice.event:type_name -> SpaceX.API.Device.Event
-	30, // 3: SpaceX.API.Device.Request.signed_request:type_name -> SpaceX.API.Device.SignedData
-	31, // 4: SpaceX.API.Device.Request.get_next_id:type_name -> SpaceX.API.Device.GetNextIdRequest
-	32, // 5: SpaceX.API.Device.Request.authenticate:type_name -> SpaceX.API.Device.AuthenticateRequest
-	5,  // 6: SpaceX.API.Device.Request.factory_reset:type_name -> SpaceX.API.Device.FactoryResetRequest
-	19, // 7: SpaceX.API.Device.Request.get_device_info:type_name -> SpaceX.API.Device.GetDeviceInfoRequest
-	7,  // 8: SpaceX.API.Device.Request.get_history:type_name -> SpaceX.API.Device.GetHistoryRequest
-	8,  // 9: SpaceX.API.Device.Request.get_log:type_name -> SpaceX.API.Device.GetLogRequest
-	27, // 10: SpaceX.API.Device.Request.get_network_interfaces:type_name -> SpaceX.API.Device.GetNetworkInterfacesRequest
-	10, // 11: SpaceX.API.Device.Request.get_ping:type_name -> SpaceX.API.Device.GetPingRequest
-	12, // 12: SpaceX.API.Device.Request.ping_host:type_name -> SpaceX.API.Device.PingHostRequest
-	14, // 13: SpaceX.API.Device.Request.get_status:type_name -> SpaceX.API.Device.GetStatusRequest
-	15, // 14: SpaceX.API.Device.Request.reboot:type_name -> SpaceX.API.Device.RebootRequest
-	23, // 15: SpaceX.API.Device.Request.set_sku:type_name -> SpaceX.API.Device.SetSkuRequest
-	21, // 16: SpaceX.API.Device.Request.set_trusted_keys:type_name -> SpaceX.API.Device.SetTrustedKeysRequest
-	17, // 17: SpaceX.API.Device.Request.speed_test:type_name -> SpaceX.API.Device.SpeedTestRequest
-	25, // 18: SpaceX.API.Device.Request.update:type_name -> SpaceX.API.Device.UpdateRequest
-	33, // 19: SpaceX.API.Device.Request.dish_stow:type_name -> SpaceX.API.Device.DishStowRequest
-	34, // 20: SpaceX.API.Device.Request.transceiver_if_loopback_test:type_name -> SpaceX.API.Device.TransceiverIFLoopbackTestRequest
-	35, // 21: SpaceX.API.Device.Request.transceiver_get_status:type_name -> SpaceX.API.Device.TransceiverGetStatusRequest
-	36, // 22: SpaceX.API.Device.Request.wifi_get_clients:type_name -> SpaceX.API.Device.WifiGetClientsRequest
-	37, // 23: SpaceX.API.Device.Request.wifi_get_ping_metrics:type_name -> SpaceX.API.Device.WifiGetPingMetricsRequest
-	38, // 24: SpaceX.API.Device.Request.wifi_set_config:type_name -> SpaceX.API.Device.WifiSetConfigRequest
-	39, // 25: SpaceX.API.Device.Request.wifi_setup:type_name -> SpaceX.API.Device.WifiSetupRequest
-	40, // 26: SpaceX.API.Device.Response.status:type_name -> SpaceX.API.Status.Status
-	41, // 27: SpaceX.API.Device.Response.get_next_id:type_name -> SpaceX.API.Device.GetNextIdResponse
-	6,  // 28: SpaceX.API.Device.Response.factory_reset:type_name -> SpaceX.API.Device.FactoryResetResponse
-	20, // 29: SpaceX.API.Device.Response.get_device_info:type_name -> SpaceX.API.Device.GetDeviceInfoResponse
-	9,  // 30: SpaceX.API.Device.Response.get_log:type_name -> SpaceX.API.Device.GetLogResponse
-	28, // 31: SpaceX.API.Device.Response.get_network_interfaces:type_name -> SpaceX.API.Device.GetNetworkInterfacesResponse
-	11, // 32: SpaceX.API.Device.Response.get_ping:type_name -> SpaceX.API.Device.GetPingResponse
-	13, // 33: SpaceX.API.Device.Response.ping_host:type_name -> SpaceX.API.Device.PingHostResponse
-	16, // 34: SpaceX.API.Device.Response.reboot:type_name -> SpaceX.API.Device.RebootResponse
-	18, // 35: SpaceX.API.Device.Response.speed_test:type_name -> SpaceX.API.Device.SpeedTestResponse
-	24, // 36: SpaceX.API.Device.Response.set_sku:type_name -> SpaceX.API.Device.SetSkuResponse
-	22, // 37: SpaceX.API.Device.Response.set_trusted_keys:type_name -> SpaceX.API.Device.SetTrustedKeysResponse
-	26, // 38: SpaceX.API.Device.Response.update:type_name -> SpaceX.API.Device.UpdateResponse
-	42, // 39: SpaceX.API.Device.Response.dish_authenticate:type_name -> SpaceX.API.Device.DishAuthenticateResponse
-	43, // 40: SpaceX.API.Device.Response.dish_get_history:type_name -> SpaceX.API.Device.DishGetHistoryResponse
-	44, // 41: SpaceX.API.Device.Response.dish_get_status:type_name -> SpaceX.API.Device.DishGetStatusResponse
-	45, // 42: SpaceX.API.Device.Response.dish_stow:type_name -> SpaceX.API.Device.DishStowResponse
-	46, // 43: SpaceX.API.Device.Response.transceiver_if_loopback_test:type_name -> SpaceX.API.Device.TransceiverIFLoopbackTestResponse
-	47, // 44: SpaceX.API.Device.Response.transceiver_get_status:type_name -> SpaceX.API.Device.TransceiverGetStatusResponse
-	48, // 45: SpaceX.API.Device.Response.wifi_authenticate:type_name -> SpaceX.API.Device.WifiAuthenticateResponse
-	49, // 46: SpaceX.API.Device.Response.wifi_get_clients:type_name -> SpaceX.API.Device.WifiGetClientsResponse
-	50, // 47: SpaceX.API.Device.Response.wifi_get_history:type_name -> SpaceX.API.Device.WifiGetHistoryResponse
-	51, // 48: SpaceX.API.Device.Response.wifi_get_ping_metrics:type_name -> SpaceX.API.Device.WifiGetPingMetricsResponse
-	52, // 49: SpaceX.API.Device.Response.wifi_get_status:type_name -> SpaceX.API.Device.WifiGetStatusResponse
-	53, // 50: SpaceX.API.Device.Response.wifi_set_config:type_name -> SpaceX.API.Device.WifiSetConfigResponse
-	54, // 51: SpaceX.API.Device.Response.wifi_setup:type_name -> SpaceX.API.Device.WifiSetupResponse
-	55, // 52: SpaceX.API.Device.Event.wifi_new_client_connected:type_name -> SpaceX.API.Device.WifiNewClientConnectedEvent
-	56, // 53: SpaceX.API.Device.Event.wifi_account_bonding:type_name -> SpaceX.API.Device.WifiAccountBondingEvent
-	29, // 54: SpaceX.API.Device.GetPingResponse.results:type_name -> SpaceX.API.Device.GetPingResponse.ResultsEntry
-	57, // 55: SpaceX.API.Device.PingHostResponse.result:type_name -> SpaceX.API.Device.PingResult
-	58, // 56: SpaceX.API.Device.GetDeviceInfoResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
-	59, // 57: SpaceX.API.Device.SetTrustedKeysRequest.keys:type_name -> SpaceX.API.Device.PublicKey
-	60, // 58: SpaceX.API.Device.GetNetworkInterfacesResponse.network_interfaces:type_name -> SpaceX.API.Device.NetworkInterface
-	57, // 59: SpaceX.API.Device.GetPingResponse.ResultsEntry.value:type_name -> SpaceX.API.Device.PingResult
-	0,  // 60: SpaceX.API.Device.Device.Stream:input_type -> SpaceX.API.Device.ToDevice
-	2,  // 61: SpaceX.API.Device.Device.Handle:input_type -> SpaceX.API.Device.Request
-	1,  // 62: SpaceX.API.Device.Device.Stream:output_type -> SpaceX.API.Device.FromDevice
-	3,  // 63: SpaceX.API.Device.Device.Handle:output_type -> SpaceX.API.Device.Response
-	62, // [62:64] is the sub-list for method output_type
-	60, // [60:62] is the sub-list for method input_type
-	60, // [60:60] is the sub-list for extension type_name
-	60, // [60:60] is the sub-list for extension extendee
-	0,  // [0:60] is the sub-list for field type_name
+	5,   // 0: SpaceX.API.Device.ToDevice.request:type_name -> SpaceX.API.Device.Request
+	6,   // 1: SpaceX.API.Device.FromDevice.response:type_name -> SpaceX.API.Device.Response
+	7,   // 2: SpaceX.API.Device.FromDevice.event:type_name -> SpaceX.API.Device.Event
+	62,  // 3: SpaceX.API.Device.Request.signed_request:type_name -> SpaceX.API.Device.SignedData
+	63,  // 4: SpaceX.API.Device.Request.get_next_id:type_name -> SpaceX.API.Device.GetNextIdRequest
+	64,  // 5: SpaceX.API.Device.Request.authenticate:type_name -> SpaceX.API.Device.AuthenticateRequest
+	8,   // 6: SpaceX.API.Device.Request.enable_debug_telem:type_name -> SpaceX.API.Device.EnableDebugTelemRequest
+	10,  // 7: SpaceX.API.Device.Request.factory_reset:type_name -> SpaceX.API.Device.FactoryResetRequest
+	30,  // 8: SpaceX.API.Device.Request.get_device_info:type_name -> SpaceX.API.Device.GetDeviceInfoRequest
+	14,  // 9: SpaceX.API.Device.Request.get_history:type_name -> SpaceX.API.Device.GetHistoryRequest
+	15,  // 10: SpaceX.API.Device.Request.get_log:type_name -> SpaceX.API.Device.GetLogRequest
+	40,  // 11: SpaceX.API.Device.Request.get_network_interfaces:type_name -> SpaceX.API.Device.GetNetworkInterfacesRequest
+	17,  // 12: SpaceX.API.Device.Request.get_ping:type_name -> SpaceX.API.Device.GetPingRequest
+	19,  // 13: SpaceX.API.Device.Request.ping_host:type_name -> SpaceX.API.Device.PingHostRequest
+	21,  // 14: SpaceX.API.Device.Request.get_status:type_name -> SpaceX.API.Device.GetStatusRequest
+	22,  // 15: SpaceX.API.Device.Request.reboot:type_name -> SpaceX.API.Device.RebootRequest
+	34,  // 16: SpaceX.API.Device.Request.set_sku:type_name -> SpaceX.API.Device.SetSkuRequest
+	32,  // 17: SpaceX.API.Device.Request.set_trusted_keys:type_name -> SpaceX.API.Device.SetTrustedKeysRequest
+	26,  // 18: SpaceX.API.Device.Request.speed_test:type_name -> SpaceX.API.Device.SpeedTestRequest
+	36,  // 19: SpaceX.API.Device.Request.update:type_name -> SpaceX.API.Device.UpdateRequest
+	44,  // 20: SpaceX.API.Device.Request.get_location:type_name -> SpaceX.API.Device.GetLocationRequest
+	42,  // 21: SpaceX.API.Device.Request.get_heap_dump:type_name -> SpaceX.API.Device.GetHeapDumpRequest
+	38,  // 22: SpaceX.API.Device.Request.restart_control:type_name -> SpaceX.API.Device.RestartControlRequest
+	12,  // 23: SpaceX.API.Device.Request.fuse:type_name -> SpaceX.API.Device.FuseRequest
+	50,  // 24: SpaceX.API.Device.Request.get_persistent_stats:type_name -> SpaceX.API.Device.GetPersistentStatsRequest
+	28,  // 25: SpaceX.API.Device.Request.get_connections:type_name -> SpaceX.API.Device.GetConnectionsRequest
+	51,  // 26: SpaceX.API.Device.Request.start_speedtest:type_name -> SpaceX.API.Device.StartSpeedtestRequest
+	54,  // 27: SpaceX.API.Device.Request.get_speedtest_status:type_name -> SpaceX.API.Device.GetSpeedtestStatusRequest
+	56,  // 28: SpaceX.API.Device.Request.report_client_speedtest:type_name -> SpaceX.API.Device.ReportClientSpeedtestRequest
+	65,  // 29: SpaceX.API.Device.Request.initiate_remote_ssh:type_name -> SpaceX.API.Device.InitiateRemoteSshRequest
+	66,  // 30: SpaceX.API.Device.Request.self_test:type_name -> SpaceX.API.Device.SelfTestRequest
+	67,  // 31: SpaceX.API.Device.Request.set_test_mode:type_name -> SpaceX.API.Device.SetTestModeRequest
+	68,  // 32: SpaceX.API.Device.Request.software_update:type_name -> SpaceX.API.Device.SoftwareUpdateRequest
+	69,  // 33: SpaceX.API.Device.Request.dish_stow:type_name -> SpaceX.API.Device.DishStowRequest
+	70,  // 34: SpaceX.API.Device.Request.start_dish_self_test:type_name -> SpaceX.API.Device.StartDishSelfTestRequest
+	71,  // 35: SpaceX.API.Device.Request.dish_get_context:type_name -> SpaceX.API.Device.DishGetContextRequest
+	72,  // 36: SpaceX.API.Device.Request.dish_get_obstruction_map:type_name -> SpaceX.API.Device.DishGetObstructionMapRequest
+	46,  // 37: SpaceX.API.Device.Request.dish_set_emc:type_name -> SpaceX.API.Device.DishSetEmcRequest
+	48,  // 38: SpaceX.API.Device.Request.dish_get_emc:type_name -> SpaceX.API.Device.DishGetEmcRequest
+	73,  // 39: SpaceX.API.Device.Request.dish_set_config:type_name -> SpaceX.API.Device.DishSetConfigRequest
+	74,  // 40: SpaceX.API.Device.Request.dish_get_config:type_name -> SpaceX.API.Device.DishGetConfigRequest
+	75,  // 41: SpaceX.API.Device.Request.transceiver_if_loopback_test:type_name -> SpaceX.API.Device.TransceiverIFLoopbackTestRequest
+	76,  // 42: SpaceX.API.Device.Request.transceiver_get_status:type_name -> SpaceX.API.Device.TransceiverGetStatusRequest
+	77,  // 43: SpaceX.API.Device.Request.transceiver_get_telemetry:type_name -> SpaceX.API.Device.TransceiverGetTelemetryRequest
+	78,  // 44: SpaceX.API.Device.Request.wifi_get_clients:type_name -> SpaceX.API.Device.WifiGetClientsRequest
+	79,  // 45: SpaceX.API.Device.Request.wifi_get_diagnostics:type_name -> SpaceX.API.Device.WifiGetDiagnosticsRequest
+	80,  // 46: SpaceX.API.Device.Request.wifi_get_ping_metrics:type_name -> SpaceX.API.Device.WifiGetPingMetricsRequest
+	81,  // 47: SpaceX.API.Device.Request.wifi_set_config:type_name -> SpaceX.API.Device.WifiSetConfigRequest
+	82,  // 48: SpaceX.API.Device.Request.wifi_get_config:type_name -> SpaceX.API.Device.WifiGetConfigRequest
+	83,  // 49: SpaceX.API.Device.Request.wifi_setup:type_name -> SpaceX.API.Device.WifiSetupRequest
+	84,  // 50: SpaceX.API.Device.Request.wifi_set_mesh_device_trust:type_name -> SpaceX.API.Device.WifiSetMeshDeviceTrustRequest
+	85,  // 51: SpaceX.API.Device.Request.wifi_set_mesh_config:type_name -> SpaceX.API.Device.WifiSetMeshConfigRequest
+	86,  // 52: SpaceX.API.Device.Request.wifi_get_client_history:type_name -> SpaceX.API.Device.WifiGetClientHistoryRequest
+	87,  // 53: SpaceX.API.Device.Response.status:type_name -> SpaceX.API.Status.Status
+	88,  // 54: SpaceX.API.Device.Response.get_next_id:type_name -> SpaceX.API.Device.GetNextIdResponse
+	9,   // 55: SpaceX.API.Device.Response.enable_debug_telem:type_name -> SpaceX.API.Device.EnableDebugTelemResponse
+	11,  // 56: SpaceX.API.Device.Response.factory_reset:type_name -> SpaceX.API.Device.FactoryResetResponse
+	31,  // 57: SpaceX.API.Device.Response.get_device_info:type_name -> SpaceX.API.Device.GetDeviceInfoResponse
+	16,  // 58: SpaceX.API.Device.Response.get_log:type_name -> SpaceX.API.Device.GetLogResponse
+	41,  // 59: SpaceX.API.Device.Response.get_network_interfaces:type_name -> SpaceX.API.Device.GetNetworkInterfacesResponse
+	18,  // 60: SpaceX.API.Device.Response.get_ping:type_name -> SpaceX.API.Device.GetPingResponse
+	20,  // 61: SpaceX.API.Device.Response.ping_host:type_name -> SpaceX.API.Device.PingHostResponse
+	23,  // 62: SpaceX.API.Device.Response.reboot:type_name -> SpaceX.API.Device.RebootResponse
+	27,  // 63: SpaceX.API.Device.Response.speed_test:type_name -> SpaceX.API.Device.SpeedTestResponse
+	35,  // 64: SpaceX.API.Device.Response.set_sku:type_name -> SpaceX.API.Device.SetSkuResponse
+	33,  // 65: SpaceX.API.Device.Response.set_trusted_keys:type_name -> SpaceX.API.Device.SetTrustedKeysResponse
+	37,  // 66: SpaceX.API.Device.Response.update:type_name -> SpaceX.API.Device.UpdateResponse
+	45,  // 67: SpaceX.API.Device.Response.get_location:type_name -> SpaceX.API.Device.GetLocationResponse
+	43,  // 68: SpaceX.API.Device.Response.get_heap_dump:type_name -> SpaceX.API.Device.GetHeapDumpResponse
+	39,  // 69: SpaceX.API.Device.Response.restart_control:type_name -> SpaceX.API.Device.RestartControlResponse
+	13,  // 70: SpaceX.API.Device.Response.fuse:type_name -> SpaceX.API.Device.FuseResponse
+	29,  // 71: SpaceX.API.Device.Response.get_connections:type_name -> SpaceX.API.Device.GetConnectionsResponse
+	52,  // 72: SpaceX.API.Device.Response.start_speedtest:type_name -> SpaceX.API.Device.StartSpeedtestResponse
+	55,  // 73: SpaceX.API.Device.Response.get_speedtest_status:type_name -> SpaceX.API.Device.GetSpeedtestStatusResponse
+	57,  // 74: SpaceX.API.Device.Response.report_client_speedtest:type_name -> SpaceX.API.Device.ReportClientSpeedtestResponse
+	89,  // 75: SpaceX.API.Device.Response.initiate_remote_ssh:type_name -> SpaceX.API.Device.InitiateRemoteSshResponse
+	90,  // 76: SpaceX.API.Device.Response.self_test:type_name -> SpaceX.API.Device.SelfTestResponse
+	91,  // 77: SpaceX.API.Device.Response.set_test_mode:type_name -> SpaceX.API.Device.SetTestModeResponse
+	92,  // 78: SpaceX.API.Device.Response.software_update:type_name -> SpaceX.API.Device.SoftwareUpdateResponse
+	93,  // 79: SpaceX.API.Device.Response.dish_authenticate:type_name -> SpaceX.API.Device.DishAuthenticateResponse
+	94,  // 80: SpaceX.API.Device.Response.dish_get_context:type_name -> SpaceX.API.Device.DishGetContextResponse
+	95,  // 81: SpaceX.API.Device.Response.dish_get_history:type_name -> SpaceX.API.Device.DishGetHistoryResponse
+	96,  // 82: SpaceX.API.Device.Response.dish_get_status:type_name -> SpaceX.API.Device.DishGetStatusResponse
+	97,  // 83: SpaceX.API.Device.Response.dish_get_obstruction_map:type_name -> SpaceX.API.Device.DishGetObstructionMapResponse
+	98,  // 84: SpaceX.API.Device.Response.dish_stow:type_name -> SpaceX.API.Device.DishStowResponse
+	99,  // 85: SpaceX.API.Device.Response.start_dish_self_test:type_name -> SpaceX.API.Device.StartDishSelfTestResponse
+	47,  // 86: SpaceX.API.Device.Response.dish_set_emc:type_name -> SpaceX.API.Device.DishSetEmcResponse
+	49,  // 87: SpaceX.API.Device.Response.dish_get_emc:type_name -> SpaceX.API.Device.DishGetEmcResponse
+	100, // 88: SpaceX.API.Device.Response.dish_set_config:type_name -> SpaceX.API.Device.DishSetConfigResponse
+	101, // 89: SpaceX.API.Device.Response.dish_get_config:type_name -> SpaceX.API.Device.DishGetConfigResponse
+	102, // 90: SpaceX.API.Device.Response.transceiver_if_loopback_test:type_name -> SpaceX.API.Device.TransceiverIFLoopbackTestResponse
+	103, // 91: SpaceX.API.Device.Response.transceiver_get_status:type_name -> SpaceX.API.Device.TransceiverGetStatusResponse
+	104, // 92: SpaceX.API.Device.Response.transceiver_get_telemetry:type_name -> SpaceX.API.Device.TransceiverGetTelemetryResponse
+	105, // 93: SpaceX.API.Device.Response.wifi_authenticate:type_name -> SpaceX.API.Device.WifiAuthenticateResponse
+	106, // 94: SpaceX.API.Device.Response.wifi_get_clients:type_name -> SpaceX.API.Device.WifiGetClientsResponse
+	107, // 95: SpaceX.API.Device.Response.wifi_get_diagnostics:type_name -> SpaceX.API.Device.WifiGetDiagnosticsResponse
+	108, // 96: SpaceX.API.Device.Response.wifi_get_history:type_name -> SpaceX.API.Device.WifiGetHistoryResponse
+	109, // 97: SpaceX.API.Device.Response.wifi_get_ping_metrics:type_name -> SpaceX.API.Device.WifiGetPingMetricsResponse
+	110, // 98: SpaceX.API.Device.Response.wifi_get_status:type_name -> SpaceX.API.Device.WifiGetStatusResponse
+	111, // 99: SpaceX.API.Device.Response.wifi_set_config:type_name -> SpaceX.API.Device.WifiSetConfigResponse
+	112, // 100: SpaceX.API.Device.Response.wifi_get_config:type_name -> SpaceX.API.Device.WifiGetConfigResponse
+	113, // 101: SpaceX.API.Device.Response.wifi_setup:type_name -> SpaceX.API.Device.WifiSetupResponse
+	114, // 102: SpaceX.API.Device.Response.wifi_get_persistent_stats:type_name -> SpaceX.API.Device.WifiGetPersistentStatsResponse
+	115, // 103: SpaceX.API.Device.Response.wifi_set_mesh_device_trust:type_name -> SpaceX.API.Device.WifiSetMeshDeviceTrustResponse
+	116, // 104: SpaceX.API.Device.Response.wifi_set_mesh_config:type_name -> SpaceX.API.Device.WifiSetMeshConfigResponse
+	117, // 105: SpaceX.API.Device.Response.wifi_get_client_history:type_name -> SpaceX.API.Device.WifiGetClientHistoryResponse
+	118, // 106: SpaceX.API.Device.Event.wifi_new_client_connected:type_name -> SpaceX.API.Device.WifiNewClientConnectedEvent
+	119, // 107: SpaceX.API.Device.Event.wifi_account_bonding:type_name -> SpaceX.API.Device.WifiAccountBondingEvent
+	120, // 108: SpaceX.API.Device.Event.wifi_new_peer:type_name -> SpaceX.API.Device.WifiNewPeerEvent
+	58,  // 109: SpaceX.API.Device.GetPingResponse.results:type_name -> SpaceX.API.Device.GetPingResponse.ResultsEntry
+	121, // 110: SpaceX.API.Device.PingHostResponse.result:type_name -> SpaceX.API.Device.PingResult
+	2,   // 111: SpaceX.API.Device.ClientPlatform.platform:type_name -> SpaceX.API.Device.ClientPlatform.Platform
+	24,  // 112: SpaceX.API.Device.SpeedTestRequest.client_speedtest:type_name -> SpaceX.API.Device.SpeedTestStats
+	25,  // 113: SpaceX.API.Device.SpeedTestRequest.client_platform:type_name -> SpaceX.API.Device.ClientPlatform
+	24,  // 114: SpaceX.API.Device.SpeedTestResponse.router_speedtest:type_name -> SpaceX.API.Device.SpeedTestStats
+	60,  // 115: SpaceX.API.Device.GetConnectionsResponse.services:type_name -> SpaceX.API.Device.GetConnectionsResponse.ServicesEntry
+	122, // 116: SpaceX.API.Device.GetDeviceInfoResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
+	123, // 117: SpaceX.API.Device.SetTrustedKeysRequest.keys:type_name -> SpaceX.API.Device.PublicKey
+	124, // 118: SpaceX.API.Device.GetNetworkInterfacesResponse.network_interfaces:type_name -> SpaceX.API.Device.NetworkInterface
+	0,   // 119: SpaceX.API.Device.GetLocationRequest.source:type_name -> SpaceX.API.Device.PositionSource
+	125, // 120: SpaceX.API.Device.GetLocationResponse.lla:type_name -> SpaceX.API.Device.LLAPosition
+	0,   // 121: SpaceX.API.Device.GetLocationResponse.source:type_name -> SpaceX.API.Device.PositionSource
+	61,  // 122: SpaceX.API.Device.SpeedtestStatus.up:type_name -> SpaceX.API.Device.SpeedtestStatus.Direction
+	61,  // 123: SpaceX.API.Device.SpeedtestStatus.down:type_name -> SpaceX.API.Device.SpeedtestStatus.Direction
+	53,  // 124: SpaceX.API.Device.GetSpeedtestStatusResponse.status:type_name -> SpaceX.API.Device.SpeedtestStatus
+	24,  // 125: SpaceX.API.Device.ReportClientSpeedtestRequest.client_speedtest:type_name -> SpaceX.API.Device.SpeedTestStats
+	24,  // 126: SpaceX.API.Device.ReportClientSpeedtestRequest.wifi_speedtest:type_name -> SpaceX.API.Device.SpeedTestStats
+	25,  // 127: SpaceX.API.Device.ReportClientSpeedtestRequest.client_platform:type_name -> SpaceX.API.Device.ClientPlatform
+	121, // 128: SpaceX.API.Device.GetPingResponse.ResultsEntry.value:type_name -> SpaceX.API.Device.PingResult
+	59,  // 129: SpaceX.API.Device.GetConnectionsResponse.ServicesEntry.value:type_name -> SpaceX.API.Device.GetConnectionsResponse.ServiceConnection
+	1,   // 130: SpaceX.API.Device.SpeedtestStatus.Direction.err:type_name -> SpaceX.API.Device.SpeedtestError
+	3,   // 131: SpaceX.API.Device.Device.Stream:input_type -> SpaceX.API.Device.ToDevice
+	5,   // 132: SpaceX.API.Device.Device.Handle:input_type -> SpaceX.API.Device.Request
+	4,   // 133: SpaceX.API.Device.Device.Stream:output_type -> SpaceX.API.Device.FromDevice
+	6,   // 134: SpaceX.API.Device.Device.Handle:output_type -> SpaceX.API.Device.Response
+	133, // [133:135] is the sub-list for method output_type
+	131, // [131:133] is the sub-list for method input_type
+	131, // [131:131] is the sub-list for extension type_name
+	131, // [131:131] is the sub-list for extension extendee
+	0,   // [0:131] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_device_proto_init() }
@@ -2711,7 +6613,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FactoryResetRequest); i {
+			switch v := v.(*EnableDebugTelemRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2723,7 +6625,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FactoryResetResponse); i {
+			switch v := v.(*EnableDebugTelemResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2735,7 +6637,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetHistoryRequest); i {
+			switch v := v.(*FactoryResetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2747,7 +6649,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetLogRequest); i {
+			switch v := v.(*FactoryResetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2759,7 +6661,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetLogResponse); i {
+			switch v := v.(*FuseRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2771,7 +6673,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPingRequest); i {
+			switch v := v.(*FuseResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2783,7 +6685,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPingResponse); i {
+			switch v := v.(*GetHistoryRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2795,7 +6697,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PingHostRequest); i {
+			switch v := v.(*GetLogRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2807,7 +6709,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PingHostResponse); i {
+			switch v := v.(*GetLogResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2819,7 +6721,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetStatusRequest); i {
+			switch v := v.(*GetPingRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2831,7 +6733,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RebootRequest); i {
+			switch v := v.(*GetPingResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2843,7 +6745,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RebootResponse); i {
+			switch v := v.(*PingHostRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2855,7 +6757,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SpeedTestRequest); i {
+			switch v := v.(*PingHostResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2867,7 +6769,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SpeedTestResponse); i {
+			switch v := v.(*GetStatusRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2879,7 +6781,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetDeviceInfoRequest); i {
+			switch v := v.(*RebootRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2891,7 +6793,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetDeviceInfoResponse); i {
+			switch v := v.(*RebootResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2903,7 +6805,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetTrustedKeysRequest); i {
+			switch v := v.(*SpeedTestStats); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2915,7 +6817,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetTrustedKeysResponse); i {
+			switch v := v.(*ClientPlatform); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2927,7 +6829,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetSkuRequest); i {
+			switch v := v.(*SpeedTestRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2939,7 +6841,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetSkuResponse); i {
+			switch v := v.(*SpeedTestResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2951,7 +6853,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateRequest); i {
+			switch v := v.(*GetConnectionsRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2963,7 +6865,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateResponse); i {
+			switch v := v.(*GetConnectionsResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2975,7 +6877,7 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetNetworkInterfacesRequest); i {
+			switch v := v.(*GetDeviceInfoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2987,6 +6889,126 @@ func file_spacex_api_device_device_proto_init() {
 			}
 		}
 		file_spacex_api_device_device_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetDeviceInfoResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTrustedKeysRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTrustedKeysResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetSkuRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetSkuResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UpdateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UpdateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*RestartControlRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*RestartControlResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetNetworkInterfacesRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*GetNetworkInterfacesResponse); i {
 			case 0:
 				return &v.state
@@ -2998,6 +7020,222 @@ func file_spacex_api_device_device_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_device_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetHeapDumpRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetHeapDumpResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetLocationRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetLocationResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishSetEmcRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishSetEmcResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetEmcRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetEmcResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetPersistentStatsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StartSpeedtestRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StartSpeedtestResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SpeedtestStatus); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetSpeedtestStatusRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetSpeedtestStatusResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReportClientSpeedtestRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReportClientSpeedtestResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetConnectionsResponse_ServiceConnection); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_device_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SpeedtestStatus_Direction); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	file_spacex_api_device_device_proto_msgTypes[0].OneofWrappers = []interface{}{
 		(*ToDevice_Request)(nil),
@@ -3010,6 +7248,7 @@ func file_spacex_api_device_device_proto_init() {
 		(*Request_SignedRequest)(nil),
 		(*Request_GetNextId)(nil),
 		(*Request_Authenticate)(nil),
+		(*Request_EnableDebugTelem)(nil),
 		(*Request_FactoryReset)(nil),
 		(*Request_GetDeviceInfo)(nil),
 		(*Request_GetHistory)(nil),
@@ -3023,16 +7262,43 @@ func file_spacex_api_device_device_proto_init() {
 		(*Request_SetTrustedKeys)(nil),
 		(*Request_SpeedTest)(nil),
 		(*Request_Update)(nil),
+		(*Request_GetLocation)(nil),
+		(*Request_GetHeapDump)(nil),
+		(*Request_RestartControl)(nil),
+		(*Request_Fuse)(nil),
+		(*Request_GetPersistentStats)(nil),
+		(*Request_GetConnections)(nil),
+		(*Request_StartSpeedtest)(nil),
+		(*Request_GetSpeedtestStatus)(nil),
+		(*Request_ReportClientSpeedtest)(nil),
+		(*Request_InitiateRemoteSsh)(nil),
+		(*Request_SelfTest)(nil),
+		(*Request_SetTestMode)(nil),
+		(*Request_SoftwareUpdate)(nil),
 		(*Request_DishStow)(nil),
+		(*Request_StartDishSelfTest)(nil),
+		(*Request_DishGetContext)(nil),
+		(*Request_DishGetObstructionMap)(nil),
+		(*Request_DishSetEmc)(nil),
+		(*Request_DishGetEmc)(nil),
+		(*Request_DishSetConfig)(nil),
+		(*Request_DishGetConfig)(nil),
 		(*Request_TransceiverIfLoopbackTest)(nil),
 		(*Request_TransceiverGetStatus)(nil),
+		(*Request_TransceiverGetTelemetry)(nil),
 		(*Request_WifiGetClients)(nil),
+		(*Request_WifiGetDiagnostics)(nil),
 		(*Request_WifiGetPingMetrics)(nil),
 		(*Request_WifiSetConfig)(nil),
+		(*Request_WifiGetConfig)(nil),
 		(*Request_WifiSetup)(nil),
+		(*Request_WifiSetMeshDeviceTrust)(nil),
+		(*Request_WifiSetMeshConfig)(nil),
+		(*Request_WifiGetClientHistory)(nil),
 	}
 	file_spacex_api_device_device_proto_msgTypes[3].OneofWrappers = []interface{}{
 		(*Response_GetNextId)(nil),
+		(*Response_EnableDebugTelem)(nil),
 		(*Response_FactoryReset)(nil),
 		(*Response_GetDeviceInfo)(nil),
 		(*Response_GetLog)(nil),
@@ -3044,36 +7310,64 @@ func file_spacex_api_device_device_proto_init() {
 		(*Response_SetSku)(nil),
 		(*Response_SetTrustedKeys)(nil),
 		(*Response_Update)(nil),
+		(*Response_GetLocation)(nil),
+		(*Response_GetHeapDump)(nil),
+		(*Response_RestartControl)(nil),
+		(*Response_Fuse)(nil),
+		(*Response_GetConnections)(nil),
+		(*Response_StartSpeedtest)(nil),
+		(*Response_GetSpeedtestStatus)(nil),
+		(*Response_ReportClientSpeedtest)(nil),
+		(*Response_InitiateRemoteSsh)(nil),
+		(*Response_SelfTest)(nil),
+		(*Response_SetTestMode)(nil),
+		(*Response_SoftwareUpdate)(nil),
 		(*Response_DishAuthenticate)(nil),
+		(*Response_DishGetContext)(nil),
 		(*Response_DishGetHistory)(nil),
 		(*Response_DishGetStatus)(nil),
+		(*Response_DishGetObstructionMap)(nil),
 		(*Response_DishStow)(nil),
+		(*Response_StartDishSelfTest)(nil),
+		(*Response_DishSetEmc)(nil),
+		(*Response_DishGetEmc)(nil),
+		(*Response_DishSetConfig)(nil),
+		(*Response_DishGetConfig)(nil),
 		(*Response_TransceiverIfLoopbackTest)(nil),
 		(*Response_TransceiverGetStatus)(nil),
+		(*Response_TransceiverGetTelemetry)(nil),
 		(*Response_WifiAuthenticate)(nil),
 		(*Response_WifiGetClients)(nil),
+		(*Response_WifiGetDiagnostics)(nil),
 		(*Response_WifiGetHistory)(nil),
 		(*Response_WifiGetPingMetrics)(nil),
 		(*Response_WifiGetStatus)(nil),
 		(*Response_WifiSetConfig)(nil),
+		(*Response_WifiGetConfig)(nil),
 		(*Response_WifiSetup)(nil),
+		(*Response_WifiGetPersistentStats)(nil),
+		(*Response_WifiSetMeshDeviceTrust)(nil),
+		(*Response_WifiSetMeshConfig)(nil),
+		(*Response_WifiGetClientHistory)(nil),
 	}
 	file_spacex_api_device_device_proto_msgTypes[4].OneofWrappers = []interface{}{
 		(*Event_WifiNewClientConnected)(nil),
 		(*Event_WifiAccountBonding)(nil),
+		(*Event_WifiNewPeer)(nil),
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_device_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   30,
+			NumEnums:      3,
+			NumMessages:   59,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
 		GoTypes:           file_spacex_api_device_device_proto_goTypes,
 		DependencyIndexes: file_spacex_api_device_device_proto_depIdxs,
+		EnumInfos:         file_spacex_api_device_device_proto_enumTypes,
 		MessageInfos:      file_spacex_api_device_device_proto_msgTypes,
 	}.Build()
 	File_spacex_api_device_device_proto = out.File
blob - 51ada24153ef5af7eb709ac78e27a560e17fecf7
blob + 0cdc8643de96b801e7eabaa219a28c412cfc9e63
--- device/dish.pb.go
+++ device/dish.pb.go
@@ -9,6 +9,7 @@ package device
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	satellites "olowe.co/dishy/satellites"
 	reflect "reflect"
 	sync "sync"
 )
@@ -20,6 +21,226 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+type UserMobilityClass int32
+
+const (
+	UserMobilityClass_STATIONARY UserMobilityClass = 0
+	UserMobilityClass_NOMADIC    UserMobilityClass = 1
+	UserMobilityClass_MOBILE     UserMobilityClass = 2
+)
+
+// Enum value maps for UserMobilityClass.
+var (
+	UserMobilityClass_name = map[int32]string{
+		0: "STATIONARY",
+		1: "NOMADIC",
+		2: "MOBILE",
+	}
+	UserMobilityClass_value = map[string]int32{
+		"STATIONARY": 0,
+		"NOMADIC":    1,
+		"MOBILE":     2,
+	}
+)
+
+func (x UserMobilityClass) Enum() *UserMobilityClass {
+	p := new(UserMobilityClass)
+	*p = x
+	return p
+}
+
+func (x UserMobilityClass) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (UserMobilityClass) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[0].Descriptor()
+}
+
+func (UserMobilityClass) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[0]
+}
+
+func (x UserMobilityClass) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use UserMobilityClass.Descriptor instead.
+func (UserMobilityClass) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{0}
+}
+
+type SoftwareUpdateState int32
+
+const (
+	SoftwareUpdateState_SOFTWARE_UPDATE_STATE_UNKNOWN SoftwareUpdateState = 0
+	SoftwareUpdateState_IDLE                          SoftwareUpdateState = 1
+	SoftwareUpdateState_FETCHING                      SoftwareUpdateState = 2
+	SoftwareUpdateState_PRE_CHECK                     SoftwareUpdateState = 3
+	SoftwareUpdateState_WRITING                       SoftwareUpdateState = 4
+	SoftwareUpdateState_POST_CHECK                    SoftwareUpdateState = 5
+	SoftwareUpdateState_REBOOT_REQUIRED               SoftwareUpdateState = 6
+	SoftwareUpdateState_DISABLED                      SoftwareUpdateState = 7
+	SoftwareUpdateState_FAULTED                       SoftwareUpdateState = 8
+)
+
+// Enum value maps for SoftwareUpdateState.
+var (
+	SoftwareUpdateState_name = map[int32]string{
+		0: "SOFTWARE_UPDATE_STATE_UNKNOWN",
+		1: "IDLE",
+		2: "FETCHING",
+		3: "PRE_CHECK",
+		4: "WRITING",
+		5: "POST_CHECK",
+		6: "REBOOT_REQUIRED",
+		7: "DISABLED",
+		8: "FAULTED",
+	}
+	SoftwareUpdateState_value = map[string]int32{
+		"SOFTWARE_UPDATE_STATE_UNKNOWN": 0,
+		"IDLE":                          1,
+		"FETCHING":                      2,
+		"PRE_CHECK":                     3,
+		"WRITING":                       4,
+		"POST_CHECK":                    5,
+		"REBOOT_REQUIRED":               6,
+		"DISABLED":                      7,
+		"FAULTED":                       8,
+	}
+)
+
+func (x SoftwareUpdateState) Enum() *SoftwareUpdateState {
+	p := new(SoftwareUpdateState)
+	*p = x
+	return p
+}
+
+func (x SoftwareUpdateState) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SoftwareUpdateState) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[1].Descriptor()
+}
+
+func (SoftwareUpdateState) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[1]
+}
+
+func (x SoftwareUpdateState) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SoftwareUpdateState.Descriptor instead.
+func (SoftwareUpdateState) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{1}
+}
+
+type UserClassOfService int32
+
+const (
+	UserClassOfService_UNKNOWN_USER_CLASS_OF_SERVICE UserClassOfService = 0
+	UserClassOfService_CONSUMER                      UserClassOfService = 1
+	UserClassOfService_BUSINESS                      UserClassOfService = 2
+	UserClassOfService_BUSINESS_PLUS                 UserClassOfService = 3
+	UserClassOfService_COMMERCIAL_AVIATION           UserClassOfService = 4
+)
+
+// Enum value maps for UserClassOfService.
+var (
+	UserClassOfService_name = map[int32]string{
+		0: "UNKNOWN_USER_CLASS_OF_SERVICE",
+		1: "CONSUMER",
+		2: "BUSINESS",
+		3: "BUSINESS_PLUS",
+		4: "COMMERCIAL_AVIATION",
+	}
+	UserClassOfService_value = map[string]int32{
+		"UNKNOWN_USER_CLASS_OF_SERVICE": 0,
+		"CONSUMER":                      1,
+		"BUSINESS":                      2,
+		"BUSINESS_PLUS":                 3,
+		"COMMERCIAL_AVIATION":           4,
+	}
+)
+
+func (x UserClassOfService) Enum() *UserClassOfService {
+	p := new(UserClassOfService)
+	*p = x
+	return p
+}
+
+func (x UserClassOfService) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (UserClassOfService) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[2].Descriptor()
+}
+
+func (UserClassOfService) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[2]
+}
+
+func (x UserClassOfService) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use UserClassOfService.Descriptor instead.
+func (UserClassOfService) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{2}
+}
+
+type HasActuators int32
+
+const (
+	HasActuators_HAS_ACTUATORS_UNKNOWN HasActuators = 0
+	HasActuators_HAS_ACTUATORS_YES     HasActuators = 1
+	HasActuators_HAS_ACTUATORS_NO      HasActuators = 2
+)
+
+// Enum value maps for HasActuators.
+var (
+	HasActuators_name = map[int32]string{
+		0: "HAS_ACTUATORS_UNKNOWN",
+		1: "HAS_ACTUATORS_YES",
+		2: "HAS_ACTUATORS_NO",
+	}
+	HasActuators_value = map[string]int32{
+		"HAS_ACTUATORS_UNKNOWN": 0,
+		"HAS_ACTUATORS_YES":     1,
+		"HAS_ACTUATORS_NO":      2,
+	}
+)
+
+func (x HasActuators) Enum() *HasActuators {
+	p := new(HasActuators)
+	*p = x
+	return p
+}
+
+func (x HasActuators) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HasActuators) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[3].Descriptor()
+}
+
+func (HasActuators) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[3]
+}
+
+func (x HasActuators) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HasActuators.Descriptor instead.
+func (HasActuators) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{3}
+}
+
 type DishState int32
 
 const (
@@ -56,11 +277,11 @@ func (x DishState) String() string {
 }
 
 func (DishState) Descriptor() protoreflect.EnumDescriptor {
-	return file_spacex_api_device_dish_proto_enumTypes[0].Descriptor()
+	return file_spacex_api_device_dish_proto_enumTypes[4].Descriptor()
 }
 
 func (DishState) Type() protoreflect.EnumType {
-	return &file_spacex_api_device_dish_proto_enumTypes[0]
+	return &file_spacex_api_device_dish_proto_enumTypes[4]
 }
 
 func (x DishState) Number() protoreflect.EnumNumber {
@@ -69,13 +290,146 @@ func (x DishState) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use DishState.Descriptor instead.
 func (DishState) EnumDescriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{0}
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{4}
 }
 
+type DishOutage_Cause int32
+
+const (
+	DishOutage_UNKNOWN           DishOutage_Cause = 0
+	DishOutage_BOOTING           DishOutage_Cause = 1
+	DishOutage_STOWED            DishOutage_Cause = 2
+	DishOutage_THERMAL_SHUTDOWN  DishOutage_Cause = 3
+	DishOutage_NO_SCHEDULE       DishOutage_Cause = 4
+	DishOutage_NO_SATS           DishOutage_Cause = 5
+	DishOutage_OBSTRUCTED        DishOutage_Cause = 6
+	DishOutage_NO_DOWNLINK       DishOutage_Cause = 7
+	DishOutage_NO_PINGS          DishOutage_Cause = 8
+	DishOutage_ACTUATOR_ACTIVITY DishOutage_Cause = 9
+	DishOutage_CABLE_TEST        DishOutage_Cause = 10
+)
+
+// Enum value maps for DishOutage_Cause.
+var (
+	DishOutage_Cause_name = map[int32]string{
+		0:  "UNKNOWN",
+		1:  "BOOTING",
+		2:  "STOWED",
+		3:  "THERMAL_SHUTDOWN",
+		4:  "NO_SCHEDULE",
+		5:  "NO_SATS",
+		6:  "OBSTRUCTED",
+		7:  "NO_DOWNLINK",
+		8:  "NO_PINGS",
+		9:  "ACTUATOR_ACTIVITY",
+		10: "CABLE_TEST",
+	}
+	DishOutage_Cause_value = map[string]int32{
+		"UNKNOWN":           0,
+		"BOOTING":           1,
+		"STOWED":            2,
+		"THERMAL_SHUTDOWN":  3,
+		"NO_SCHEDULE":       4,
+		"NO_SATS":           5,
+		"OBSTRUCTED":        6,
+		"NO_DOWNLINK":       7,
+		"NO_PINGS":          8,
+		"ACTUATOR_ACTIVITY": 9,
+		"CABLE_TEST":        10,
+	}
+)
+
+func (x DishOutage_Cause) Enum() *DishOutage_Cause {
+	p := new(DishOutage_Cause)
+	*p = x
+	return p
+}
+
+func (x DishOutage_Cause) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DishOutage_Cause) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[5].Descriptor()
+}
+
+func (DishOutage_Cause) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[5]
+}
+
+func (x DishOutage_Cause) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DishOutage_Cause.Descriptor instead.
+func (DishOutage_Cause) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{4, 0}
+}
+
+type SetTestModeRequest_RfMode int32
+
+const (
+	SetTestModeRequest_RX     SetTestModeRequest_RfMode = 0
+	SetTestModeRequest_IDLE   SetTestModeRequest_RfMode = 1
+	SetTestModeRequest_TX     SetTestModeRequest_RfMode = 2
+	SetTestModeRequest_CAL    SetTestModeRequest_RfMode = 3
+	SetTestModeRequest_USER   SetTestModeRequest_RfMode = 4
+	SetTestModeRequest_NORMAL SetTestModeRequest_RfMode = 420
+)
+
+// Enum value maps for SetTestModeRequest_RfMode.
+var (
+	SetTestModeRequest_RfMode_name = map[int32]string{
+		0:   "RX",
+		1:   "IDLE",
+		2:   "TX",
+		3:   "CAL",
+		4:   "USER",
+		420: "NORMAL",
+	}
+	SetTestModeRequest_RfMode_value = map[string]int32{
+		"RX":     0,
+		"IDLE":   1,
+		"TX":     2,
+		"CAL":    3,
+		"USER":   4,
+		"NORMAL": 420,
+	}
+)
+
+func (x SetTestModeRequest_RfMode) Enum() *SetTestModeRequest_RfMode {
+	p := new(SetTestModeRequest_RfMode)
+	*p = x
+	return p
+}
+
+func (x SetTestModeRequest_RfMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SetTestModeRequest_RfMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_proto_enumTypes[6].Descriptor()
+}
+
+func (SetTestModeRequest_RfMode) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_proto_enumTypes[6]
+}
+
+func (x SetTestModeRequest_RfMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SetTestModeRequest_RfMode.Descriptor instead.
+func (SetTestModeRequest_RfMode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{18, 0}
+}
+
 type DishStowRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	Unstow bool `protobuf:"varint,1,opt,name=unstow,proto3" json:"unstow,omitempty"`
 }
 
 func (x *DishStowRequest) Reset() {
@@ -110,6 +464,13 @@ func (*DishStowRequest) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{0}
 }
 
+func (x *DishStowRequest) GetUnstow() bool {
+	if x != nil {
+		return x.Unstow
+	}
+	return false
+}
+
 type DishStowResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -148,25 +509,323 @@ func (*DishStowResponse) Descriptor() ([]byte, []int) 
 	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{1}
 }
 
+type DishGetContextRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *DishGetContextRequest) Reset() {
+	*x = DishGetContextRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetContextRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetContextRequest) ProtoMessage() {}
+
+func (x *DishGetContextRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetContextRequest.ProtoReflect.Descriptor instead.
+func (*DishGetContextRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{2}
+}
+
+type DishGetContextResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DeviceInfo                 *DeviceInfo  `protobuf:"bytes,1,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
+	DeviceState                *DeviceState `protobuf:"bytes,7,opt,name=device_state,json=deviceState,proto3" json:"device_state,omitempty"`
+	ObstructionFraction        float32      `protobuf:"fixed32,2,opt,name=obstruction_fraction,json=obstructionFraction,proto3" json:"obstruction_fraction,omitempty"`
+	ObstructionValidS          float32      `protobuf:"fixed32,3,opt,name=obstruction_valid_s,json=obstructionValidS,proto3" json:"obstruction_valid_s,omitempty"`
+	ObstructionCurrent         bool         `protobuf:"varint,12,opt,name=obstruction_current,json=obstructionCurrent,proto3" json:"obstruction_current,omitempty"`
+	CellId                     uint32       `protobuf:"varint,4,opt,name=cell_id,json=cellId,proto3" json:"cell_id,omitempty"`
+	PopRackId                  uint32       `protobuf:"varint,5,opt,name=pop_rack_id,json=popRackId,proto3" json:"pop_rack_id,omitempty"`
+	InitialSatelliteId         uint32       `protobuf:"varint,8,opt,name=initial_satellite_id,json=initialSatelliteId,proto3" json:"initial_satellite_id,omitempty"`
+	InitialGatewayId           uint32       `protobuf:"varint,9,opt,name=initial_gateway_id,json=initialGatewayId,proto3" json:"initial_gateway_id,omitempty"`
+	OnBackupBeam               bool         `protobuf:"varint,10,opt,name=on_backup_beam,json=onBackupBeam,proto3" json:"on_backup_beam,omitempty"`
+	SecondsToSlotEnd           float32      `protobuf:"fixed32,6,opt,name=seconds_to_slot_end,json=secondsToSlotEnd,proto3" json:"seconds_to_slot_end,omitempty"`
+	DebugTelemetryEnabled      bool         `protobuf:"varint,11,opt,name=debug_telemetry_enabled,json=debugTelemetryEnabled,proto3" json:"debug_telemetry_enabled,omitempty"`
+	PopPingDropRate_15SMean    float32      `protobuf:"fixed32,13,opt,name=pop_ping_drop_rate_15s_mean,json=popPingDropRate15sMean,proto3" json:"pop_ping_drop_rate_15s_mean,omitempty"`
+	PopPingLatencyMs_15SMean   float32      `protobuf:"fixed32,14,opt,name=pop_ping_latency_ms_15s_mean,json=popPingLatencyMs15sMean,proto3" json:"pop_ping_latency_ms_15s_mean,omitempty"`
+	SecondsSinceLast_1SOutage  float32      `protobuf:"fixed32,15,opt,name=seconds_since_last_1s_outage,json=secondsSinceLast1sOutage,proto3" json:"seconds_since_last_1s_outage,omitempty"`
+	SecondsSinceLast_2SOutage  float32      `protobuf:"fixed32,16,opt,name=seconds_since_last_2s_outage,json=secondsSinceLast2sOutage,proto3" json:"seconds_since_last_2s_outage,omitempty"`
+	SecondsSinceLast_5SOutage  float32      `protobuf:"fixed32,17,opt,name=seconds_since_last_5s_outage,json=secondsSinceLast5sOutage,proto3" json:"seconds_since_last_5s_outage,omitempty"`
+	SecondsSinceLast_15SOutage float32      `protobuf:"fixed32,18,opt,name=seconds_since_last_15s_outage,json=secondsSinceLast15sOutage,proto3" json:"seconds_since_last_15s_outage,omitempty"`
+	SecondsSinceLast_60SOutage float32      `protobuf:"fixed32,19,opt,name=seconds_since_last_60s_outage,json=secondsSinceLast60sOutage,proto3" json:"seconds_since_last_60s_outage,omitempty"`
+}
+
+func (x *DishGetContextResponse) Reset() {
+	*x = DishGetContextResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetContextResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetContextResponse) ProtoMessage() {}
+
+func (x *DishGetContextResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetContextResponse.ProtoReflect.Descriptor instead.
+func (*DishGetContextResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *DishGetContextResponse) GetDeviceInfo() *DeviceInfo {
+	if x != nil {
+		return x.DeviceInfo
+	}
+	return nil
+}
+
+func (x *DishGetContextResponse) GetDeviceState() *DeviceState {
+	if x != nil {
+		return x.DeviceState
+	}
+	return nil
+}
+
+func (x *DishGetContextResponse) GetObstructionFraction() float32 {
+	if x != nil {
+		return x.ObstructionFraction
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetObstructionValidS() float32 {
+	if x != nil {
+		return x.ObstructionValidS
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetObstructionCurrent() bool {
+	if x != nil {
+		return x.ObstructionCurrent
+	}
+	return false
+}
+
+func (x *DishGetContextResponse) GetCellId() uint32 {
+	if x != nil {
+		return x.CellId
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetPopRackId() uint32 {
+	if x != nil {
+		return x.PopRackId
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetInitialSatelliteId() uint32 {
+	if x != nil {
+		return x.InitialSatelliteId
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetInitialGatewayId() uint32 {
+	if x != nil {
+		return x.InitialGatewayId
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetOnBackupBeam() bool {
+	if x != nil {
+		return x.OnBackupBeam
+	}
+	return false
+}
+
+func (x *DishGetContextResponse) GetSecondsToSlotEnd() float32 {
+	if x != nil {
+		return x.SecondsToSlotEnd
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetDebugTelemetryEnabled() bool {
+	if x != nil {
+		return x.DebugTelemetryEnabled
+	}
+	return false
+}
+
+func (x *DishGetContextResponse) GetPopPingDropRate_15SMean() float32 {
+	if x != nil {
+		return x.PopPingDropRate_15SMean
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetPopPingLatencyMs_15SMean() float32 {
+	if x != nil {
+		return x.PopPingLatencyMs_15SMean
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetSecondsSinceLast_1SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_1SOutage
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetSecondsSinceLast_2SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_2SOutage
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetSecondsSinceLast_5SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_5SOutage
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetSecondsSinceLast_15SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_15SOutage
+	}
+	return 0
+}
+
+func (x *DishGetContextResponse) GetSecondsSinceLast_60SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_60SOutage
+	}
+	return 0
+}
+
+type DishOutage struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Cause            DishOutage_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=SpaceX.API.Device.DishOutage_Cause" json:"cause,omitempty"`
+	StartTimestampNs int64            `protobuf:"varint,2,opt,name=start_timestamp_ns,json=startTimestampNs,proto3" json:"start_timestamp_ns,omitempty"`
+	DurationNs       uint64           `protobuf:"varint,3,opt,name=duration_ns,json=durationNs,proto3" json:"duration_ns,omitempty"`
+	DidSwitch        bool             `protobuf:"varint,4,opt,name=did_switch,json=didSwitch,proto3" json:"did_switch,omitempty"`
+}
+
+func (x *DishOutage) Reset() {
+	*x = DishOutage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishOutage) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishOutage) ProtoMessage() {}
+
+func (x *DishOutage) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishOutage.ProtoReflect.Descriptor instead.
+func (*DishOutage) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *DishOutage) GetCause() DishOutage_Cause {
+	if x != nil {
+		return x.Cause
+	}
+	return DishOutage_UNKNOWN
+}
+
+func (x *DishOutage) GetStartTimestampNs() int64 {
+	if x != nil {
+		return x.StartTimestampNs
+	}
+	return 0
+}
+
+func (x *DishOutage) GetDurationNs() uint64 {
+	if x != nil {
+		return x.DurationNs
+	}
+	return 0
+}
+
+func (x *DishOutage) GetDidSwitch() bool {
+	if x != nil {
+		return x.DidSwitch
+	}
+	return false
+}
+
 type DishGetHistoryResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Current               uint64    `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
-	PopPingDropRate       []float32 `protobuf:"fixed32,1001,rep,packed,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
-	PopPingLatencyMs      []float32 `protobuf:"fixed32,1002,rep,packed,name=pop_ping_latency_ms,json=popPingLatencyMs,proto3" json:"pop_ping_latency_ms,omitempty"`
-	DownlinkThroughputBps []float32 `protobuf:"fixed32,1003,rep,packed,name=downlink_throughput_bps,json=downlinkThroughputBps,proto3" json:"downlink_throughput_bps,omitempty"`
-	UplinkThroughputBps   []float32 `protobuf:"fixed32,1004,rep,packed,name=uplink_throughput_bps,json=uplinkThroughputBps,proto3" json:"uplink_throughput_bps,omitempty"`
-	Snr                   []float32 `protobuf:"fixed32,1005,rep,packed,name=snr,proto3" json:"snr,omitempty"`
-	Scheduled             []bool    `protobuf:"varint,1006,rep,packed,name=scheduled,proto3" json:"scheduled,omitempty"`
-	Obstructed            []bool    `protobuf:"varint,1007,rep,packed,name=obstructed,proto3" json:"obstructed,omitempty"`
+	Current               uint64        `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
+	PopPingDropRate       []float32     `protobuf:"fixed32,1001,rep,packed,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
+	PopPingLatencyMs      []float32     `protobuf:"fixed32,1002,rep,packed,name=pop_ping_latency_ms,json=popPingLatencyMs,proto3" json:"pop_ping_latency_ms,omitempty"`
+	DownlinkThroughputBps []float32     `protobuf:"fixed32,1003,rep,packed,name=downlink_throughput_bps,json=downlinkThroughputBps,proto3" json:"downlink_throughput_bps,omitempty"`
+	UplinkThroughputBps   []float32     `protobuf:"fixed32,1004,rep,packed,name=uplink_throughput_bps,json=uplinkThroughputBps,proto3" json:"uplink_throughput_bps,omitempty"`
+	Outages               []*DishOutage `protobuf:"bytes,1009,rep,name=outages,proto3" json:"outages,omitempty"`
 }
 
 func (x *DishGetHistoryResponse) Reset() {
 	*x = DishGetHistoryResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_dish_proto_msgTypes[2]
+		mi := &file_spacex_api_device_dish_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -179,7 +838,7 @@ func (x *DishGetHistoryResponse) String() string {
 func (*DishGetHistoryResponse) ProtoMessage() {}
 
 func (x *DishGetHistoryResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_dish_proto_msgTypes[2]
+	mi := &file_spacex_api_device_dish_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -192,7 +851,7 @@ func (x *DishGetHistoryResponse) ProtoReflect() protor
 
 // Deprecated: Use DishGetHistoryResponse.ProtoReflect.Descriptor instead.
 func (*DishGetHistoryResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{2}
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{5}
 }
 
 func (x *DishGetHistoryResponse) GetCurrent() uint64 {
@@ -230,49 +889,47 @@ func (x *DishGetHistoryResponse) GetUplinkThroughputBp
 	return nil
 }
 
-func (x *DishGetHistoryResponse) GetSnr() []float32 {
+func (x *DishGetHistoryResponse) GetOutages() []*DishOutage {
 	if x != nil {
-		return x.Snr
+		return x.Outages
 	}
 	return nil
 }
 
-func (x *DishGetHistoryResponse) GetScheduled() []bool {
-	if x != nil {
-		return x.Scheduled
-	}
-	return nil
-}
-
-func (x *DishGetHistoryResponse) GetObstructed() []bool {
-	if x != nil {
-		return x.Obstructed
-	}
-	return nil
-}
-
 type DishGetStatusResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DeviceInfo                 *DeviceInfo           `protobuf:"bytes,1,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
-	DeviceState                *DeviceState          `protobuf:"bytes,2,opt,name=device_state,json=deviceState,proto3" json:"device_state,omitempty"`
-	State                      DishState             `protobuf:"varint,1006,opt,name=state,proto3,enum=SpaceX.API.Device.DishState" json:"state,omitempty"`
-	Alerts                     *DishAlerts           `protobuf:"bytes,1005,opt,name=alerts,proto3" json:"alerts,omitempty"`
-	Snr                        float32               `protobuf:"fixed32,1001,opt,name=snr,proto3" json:"snr,omitempty"`
-	SecondsToFirstNonemptySlot float32               `protobuf:"fixed32,1002,opt,name=seconds_to_first_nonempty_slot,json=secondsToFirstNonemptySlot,proto3" json:"seconds_to_first_nonempty_slot,omitempty"`
-	PopPingDropRate            float32               `protobuf:"fixed32,1003,opt,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
-	DownlinkThroughputBps      float32               `protobuf:"fixed32,1007,opt,name=downlink_throughput_bps,json=downlinkThroughputBps,proto3" json:"downlink_throughput_bps,omitempty"`
-	UplinkThroughputBps        float32               `protobuf:"fixed32,1008,opt,name=uplink_throughput_bps,json=uplinkThroughputBps,proto3" json:"uplink_throughput_bps,omitempty"`
-	PopPingLatencyMs           float32               `protobuf:"fixed32,1009,opt,name=pop_ping_latency_ms,json=popPingLatencyMs,proto3" json:"pop_ping_latency_ms,omitempty"`
-	ObstructionStats           *DishObstructionStats `protobuf:"bytes,1004,opt,name=obstruction_stats,json=obstructionStats,proto3" json:"obstruction_stats,omitempty"`
+	DeviceInfo                 *DeviceInfo                  `protobuf:"bytes,1,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
+	DeviceState                *DeviceState                 `protobuf:"bytes,2,opt,name=device_state,json=deviceState,proto3" json:"device_state,omitempty"`
+	Alerts                     *DishAlerts                  `protobuf:"bytes,1005,opt,name=alerts,proto3" json:"alerts,omitempty"`
+	Outage                     *DishOutage                  `protobuf:"bytes,1014,opt,name=outage,proto3" json:"outage,omitempty"`
+	GpsStats                   *DishGpsStats                `protobuf:"bytes,1015,opt,name=gps_stats,json=gpsStats,proto3" json:"gps_stats,omitempty"`
+	SecondsToFirstNonemptySlot float32                      `protobuf:"fixed32,1002,opt,name=seconds_to_first_nonempty_slot,json=secondsToFirstNonemptySlot,proto3" json:"seconds_to_first_nonempty_slot,omitempty"`
+	PopPingDropRate            float32                      `protobuf:"fixed32,1003,opt,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
+	DownlinkThroughputBps      float32                      `protobuf:"fixed32,1007,opt,name=downlink_throughput_bps,json=downlinkThroughputBps,proto3" json:"downlink_throughput_bps,omitempty"`
+	UplinkThroughputBps        float32                      `protobuf:"fixed32,1008,opt,name=uplink_throughput_bps,json=uplinkThroughputBps,proto3" json:"uplink_throughput_bps,omitempty"`
+	PopPingLatencyMs           float32                      `protobuf:"fixed32,1009,opt,name=pop_ping_latency_ms,json=popPingLatencyMs,proto3" json:"pop_ping_latency_ms,omitempty"`
+	ObstructionStats           *DishObstructionStats        `protobuf:"bytes,1004,opt,name=obstruction_stats,json=obstructionStats,proto3" json:"obstruction_stats,omitempty"`
+	StowRequested              bool                         `protobuf:"varint,1010,opt,name=stow_requested,json=stowRequested,proto3" json:"stow_requested,omitempty"`
+	BoresightAzimuthDeg        float32                      `protobuf:"fixed32,1011,opt,name=boresight_azimuth_deg,json=boresightAzimuthDeg,proto3" json:"boresight_azimuth_deg,omitempty"`
+	BoresightElevationDeg      float32                      `protobuf:"fixed32,1012,opt,name=boresight_elevation_deg,json=boresightElevationDeg,proto3" json:"boresight_elevation_deg,omitempty"`
+	EthSpeedMbps               int32                        `protobuf:"varint,1016,opt,name=eth_speed_mbps,json=ethSpeedMbps,proto3" json:"eth_speed_mbps,omitempty"`
+	MobilityClass              UserMobilityClass            `protobuf:"varint,1017,opt,name=mobility_class,json=mobilityClass,proto3,enum=SpaceX.API.Device.UserMobilityClass" json:"mobility_class,omitempty"`
+	IsSnrAboveNoiseFloor       bool                         `protobuf:"varint,1018,opt,name=is_snr_above_noise_floor,json=isSnrAboveNoiseFloor,proto3" json:"is_snr_above_noise_floor,omitempty"`
+	ReadyStates                *DishReadyStates             `protobuf:"bytes,1019,opt,name=ready_states,json=readyStates,proto3" json:"ready_states,omitempty"`
+	ClassOfService             UserClassOfService           `protobuf:"varint,1020,opt,name=class_of_service,json=classOfService,proto3,enum=SpaceX.API.Device.UserClassOfService" json:"class_of_service,omitempty"`
+	SoftwareUpdateState        SoftwareUpdateState          `protobuf:"varint,1021,opt,name=software_update_state,json=softwareUpdateState,proto3,enum=SpaceX.API.Device.SoftwareUpdateState" json:"software_update_state,omitempty"`
+	IsSnrPersistentlyLow       bool                         `protobuf:"varint,1022,opt,name=is_snr_persistently_low,json=isSnrPersistentlyLow,proto3" json:"is_snr_persistently_low,omitempty"`
+	HasActuators               HasActuators                 `protobuf:"varint,1023,opt,name=has_actuators,json=hasActuators,proto3,enum=SpaceX.API.Device.HasActuators" json:"has_actuators,omitempty"`
+	DisablementCode            satellites.UtDisablementCode `protobuf:"varint,1024,opt,name=disablement_code,json=disablementCode,proto3,enum=SpaceX.API.Satellites.Network.UtDisablementCode" json:"disablement_code,omitempty"`
 }
 
 func (x *DishGetStatusResponse) Reset() {
 	*x = DishGetStatusResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_dish_proto_msgTypes[3]
+		mi := &file_spacex_api_device_dish_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -285,7 +942,7 @@ func (x *DishGetStatusResponse) String() string {
 func (*DishGetStatusResponse) ProtoMessage() {}
 
 func (x *DishGetStatusResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_dish_proto_msgTypes[3]
+	mi := &file_spacex_api_device_dish_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -298,7 +955,7 @@ func (x *DishGetStatusResponse) ProtoReflect() protore
 
 // Deprecated: Use DishGetStatusResponse.ProtoReflect.Descriptor instead.
 func (*DishGetStatusResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{3}
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *DishGetStatusResponse) GetDeviceInfo() *DeviceInfo {
@@ -315,25 +972,25 @@ func (x *DishGetStatusResponse) GetDeviceState() *Devi
 	return nil
 }
 
-func (x *DishGetStatusResponse) GetState() DishState {
+func (x *DishGetStatusResponse) GetAlerts() *DishAlerts {
 	if x != nil {
-		return x.State
+		return x.Alerts
 	}
-	return DishState_UNKNOWN
+	return nil
 }
 
-func (x *DishGetStatusResponse) GetAlerts() *DishAlerts {
+func (x *DishGetStatusResponse) GetOutage() *DishOutage {
 	if x != nil {
-		return x.Alerts
+		return x.Outage
 	}
 	return nil
 }
 
-func (x *DishGetStatusResponse) GetSnr() float32 {
+func (x *DishGetStatusResponse) GetGpsStats() *DishGpsStats {
 	if x != nil {
-		return x.Snr
+		return x.GpsStats
 	}
-	return 0
+	return nil
 }
 
 func (x *DishGetStatusResponse) GetSecondsToFirstNonemptySlot() float32 {
@@ -378,107 +1035,113 @@ func (x *DishGetStatusResponse) GetObstructionStats() 
 	return nil
 }
 
-type DishAlerts struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	MotorsStuck        bool `protobuf:"varint,1,opt,name=motors_stuck,json=motorsStuck,proto3" json:"motors_stuck,omitempty"`
-	ThermalThrottle    bool `protobuf:"varint,3,opt,name=thermal_throttle,json=thermalThrottle,proto3" json:"thermal_throttle,omitempty"`
-	ThermalShutdown    bool `protobuf:"varint,2,opt,name=thermal_shutdown,json=thermalShutdown,proto3" json:"thermal_shutdown,omitempty"`
-	UnexpectedLocation bool `protobuf:"varint,4,opt,name=unexpected_location,json=unexpectedLocation,proto3" json:"unexpected_location,omitempty"`
-}
-
-func (x *DishAlerts) Reset() {
-	*x = DishAlerts{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_dish_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
+func (x *DishGetStatusResponse) GetStowRequested() bool {
+	if x != nil {
+		return x.StowRequested
+	}
+	return false
+}
+
+func (x *DishGetStatusResponse) GetBoresightAzimuthDeg() float32 {
+	if x != nil {
+		return x.BoresightAzimuthDeg
+	}
+	return 0
+}
+
+func (x *DishGetStatusResponse) GetBoresightElevationDeg() float32 {
+	if x != nil {
+		return x.BoresightElevationDeg
+	}
+	return 0
+}
+
+func (x *DishGetStatusResponse) GetEthSpeedMbps() int32 {
+	if x != nil {
+		return x.EthSpeedMbps
+	}
+	return 0
+}
+
+func (x *DishGetStatusResponse) GetMobilityClass() UserMobilityClass {
+	if x != nil {
+		return x.MobilityClass
+	}
+	return UserMobilityClass_STATIONARY
+}
+
+func (x *DishGetStatusResponse) GetIsSnrAboveNoiseFloor() bool {
+	if x != nil {
+		return x.IsSnrAboveNoiseFloor
+	}
+	return false
+}
+
+func (x *DishGetStatusResponse) GetReadyStates() *DishReadyStates {
+	if x != nil {
+		return x.ReadyStates
 	}
+	return nil
 }
 
-func (x *DishAlerts) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DishAlerts) ProtoMessage() {}
-
-func (x *DishAlerts) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_dish_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
+func (x *DishGetStatusResponse) GetClassOfService() UserClassOfService {
+	if x != nil {
+		return x.ClassOfService
 	}
-	return mi.MessageOf(x)
+	return UserClassOfService_UNKNOWN_USER_CLASS_OF_SERVICE
 }
 
-// Deprecated: Use DishAlerts.ProtoReflect.Descriptor instead.
-func (*DishAlerts) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *DishAlerts) GetMotorsStuck() bool {
+func (x *DishGetStatusResponse) GetSoftwareUpdateState() SoftwareUpdateState {
 	if x != nil {
-		return x.MotorsStuck
+		return x.SoftwareUpdateState
 	}
-	return false
+	return SoftwareUpdateState_SOFTWARE_UPDATE_STATE_UNKNOWN
 }
 
-func (x *DishAlerts) GetThermalThrottle() bool {
+func (x *DishGetStatusResponse) GetIsSnrPersistentlyLow() bool {
 	if x != nil {
-		return x.ThermalThrottle
+		return x.IsSnrPersistentlyLow
 	}
 	return false
 }
 
-func (x *DishAlerts) GetThermalShutdown() bool {
+func (x *DishGetStatusResponse) GetHasActuators() HasActuators {
 	if x != nil {
-		return x.ThermalShutdown
+		return x.HasActuators
 	}
-	return false
+	return HasActuators_HAS_ACTUATORS_UNKNOWN
 }
 
-func (x *DishAlerts) GetUnexpectedLocation() bool {
+func (x *DishGetStatusResponse) GetDisablementCode() satellites.UtDisablementCode {
 	if x != nil {
-		return x.UnexpectedLocation
+		return x.DisablementCode
 	}
-	return false
+	return satellites.UtDisablementCode(0)
 }
 
-type DishObstructionStats struct {
+type DishGetObstructionMapRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
-
-	CurrentlyObstructed        bool      `protobuf:"varint,5,opt,name=currently_obstructed,json=currentlyObstructed,proto3" json:"currently_obstructed,omitempty"`
-	FractionObstructed         float32   `protobuf:"fixed32,1,opt,name=fraction_obstructed,json=fractionObstructed,proto3" json:"fraction_obstructed,omitempty"`
-	Last_24HObstructedS        float32   `protobuf:"fixed32,1006,opt,name=last_24h_obstructed_s,json=last24hObstructedS,proto3" json:"last_24h_obstructed_s,omitempty"`
-	ValidS                     float32   `protobuf:"fixed32,4,opt,name=valid_s,json=validS,proto3" json:"valid_s,omitempty"`
-	WedgeFractionObstructed    []float32 `protobuf:"fixed32,2,rep,packed,name=wedge_fraction_obstructed,json=wedgeFractionObstructed,proto3" json:"wedge_fraction_obstructed,omitempty"`
-	WedgeAbsFractionObstructed []float32 `protobuf:"fixed32,3,rep,packed,name=wedge_abs_fraction_obstructed,json=wedgeAbsFractionObstructed,proto3" json:"wedge_abs_fraction_obstructed,omitempty"`
 }
 
-func (x *DishObstructionStats) Reset() {
-	*x = DishObstructionStats{}
+func (x *DishGetObstructionMapRequest) Reset() {
+	*x = DishGetObstructionMapRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_dish_proto_msgTypes[5]
+		mi := &file_spacex_api_device_dish_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *DishObstructionStats) String() string {
+func (x *DishGetObstructionMapRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*DishObstructionStats) ProtoMessage() {}
+func (*DishGetObstructionMapRequest) ProtoMessage() {}
 
-func (x *DishObstructionStats) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_dish_proto_msgTypes[5]
+func (x *DishGetObstructionMapRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -489,78 +1152,108 @@ func (x *DishObstructionStats) ProtoReflect() protoref
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DishObstructionStats.ProtoReflect.Descriptor instead.
-func (*DishObstructionStats) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{5}
+// Deprecated: Use DishGetObstructionMapRequest.ProtoReflect.Descriptor instead.
+func (*DishGetObstructionMapRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{7}
 }
 
-func (x *DishObstructionStats) GetCurrentlyObstructed() bool {
-	if x != nil {
-		return x.CurrentlyObstructed
-	}
-	return false
+type DishGetObstructionMapResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	NumRows uint32    `protobuf:"varint,1,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
+	NumCols uint32    `protobuf:"varint,2,opt,name=num_cols,json=numCols,proto3" json:"num_cols,omitempty"`
+	Snr     []float32 `protobuf:"fixed32,3,rep,packed,name=snr,proto3" json:"snr,omitempty"`
 }
 
-func (x *DishObstructionStats) GetFractionObstructed() float32 {
-	if x != nil {
-		return x.FractionObstructed
+func (x *DishGetObstructionMapResponse) Reset() {
+	*x = DishGetObstructionMapResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return 0
 }
 
-func (x *DishObstructionStats) GetLast_24HObstructedS() float32 {
-	if x != nil {
-		return x.Last_24HObstructedS
+func (x *DishGetObstructionMapResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetObstructionMapResponse) ProtoMessage() {}
+
+func (x *DishGetObstructionMapResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return 0
+	return mi.MessageOf(x)
 }
 
-func (x *DishObstructionStats) GetValidS() float32 {
+// Deprecated: Use DishGetObstructionMapResponse.ProtoReflect.Descriptor instead.
+func (*DishGetObstructionMapResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *DishGetObstructionMapResponse) GetNumRows() uint32 {
 	if x != nil {
-		return x.ValidS
+		return x.NumRows
 	}
 	return 0
 }
 
-func (x *DishObstructionStats) GetWedgeFractionObstructed() []float32 {
+func (x *DishGetObstructionMapResponse) GetNumCols() uint32 {
 	if x != nil {
-		return x.WedgeFractionObstructed
+		return x.NumCols
 	}
-	return nil
+	return 0
 }
 
-func (x *DishObstructionStats) GetWedgeAbsFractionObstructed() []float32 {
+func (x *DishGetObstructionMapResponse) GetSnr() []float32 {
 	if x != nil {
-		return x.WedgeAbsFractionObstructed
+		return x.Snr
 	}
 	return nil
 }
 
-type DishAuthenticateResponse struct {
+type DishAlerts struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Dish *ChallengeResponse `protobuf:"bytes,2,opt,name=dish,proto3" json:"dish,omitempty"`
+	MotorsStuck                bool `protobuf:"varint,1,opt,name=motors_stuck,json=motorsStuck,proto3" json:"motors_stuck,omitempty"`
+	ThermalThrottle            bool `protobuf:"varint,3,opt,name=thermal_throttle,json=thermalThrottle,proto3" json:"thermal_throttle,omitempty"`
+	ThermalShutdown            bool `protobuf:"varint,2,opt,name=thermal_shutdown,json=thermalShutdown,proto3" json:"thermal_shutdown,omitempty"`
+	MastNotNearVertical        bool `protobuf:"varint,5,opt,name=mast_not_near_vertical,json=mastNotNearVertical,proto3" json:"mast_not_near_vertical,omitempty"`
+	UnexpectedLocation         bool `protobuf:"varint,4,opt,name=unexpected_location,json=unexpectedLocation,proto3" json:"unexpected_location,omitempty"`
+	SlowEthernetSpeeds         bool `protobuf:"varint,6,opt,name=slow_ethernet_speeds,json=slowEthernetSpeeds,proto3" json:"slow_ethernet_speeds,omitempty"`
+	Roaming                    bool `protobuf:"varint,7,opt,name=roaming,proto3" json:"roaming,omitempty"`
+	InstallPending             bool `protobuf:"varint,8,opt,name=install_pending,json=installPending,proto3" json:"install_pending,omitempty"`
+	IsHeating                  bool `protobuf:"varint,9,opt,name=is_heating,json=isHeating,proto3" json:"is_heating,omitempty"`
+	PowerSupplyThermalThrottle bool `protobuf:"varint,10,opt,name=power_supply_thermal_throttle,json=powerSupplyThermalThrottle,proto3" json:"power_supply_thermal_throttle,omitempty"`
 }
 
-func (x *DishAuthenticateResponse) Reset() {
-	*x = DishAuthenticateResponse{}
+func (x *DishAlerts) Reset() {
+	*x = DishAlerts{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_dish_proto_msgTypes[6]
+		mi := &file_spacex_api_device_dish_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *DishAuthenticateResponse) String() string {
+func (x *DishAlerts) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*DishAuthenticateResponse) ProtoMessage() {}
+func (*DishAlerts) ProtoMessage() {}
 
-func (x *DishAuthenticateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_dish_proto_msgTypes[6]
+func (x *DishAlerts) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -571,68 +1264,974 @@ func (x *DishAuthenticateResponse) ProtoReflect() prot
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DishAuthenticateResponse.ProtoReflect.Descriptor instead.
-func (*DishAuthenticateResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{6}
+// Deprecated: Use DishAlerts.ProtoReflect.Descriptor instead.
+func (*DishAlerts) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{9}
 }
 
-func (x *DishAuthenticateResponse) GetDish() *ChallengeResponse {
+func (x *DishAlerts) GetMotorsStuck() bool {
 	if x != nil {
-		return x.Dish
+		return x.MotorsStuck
 	}
-	return nil
+	return false
 }
 
-var File_spacex_api_device_dish_proto protoreflect.FileDescriptor
+func (x *DishAlerts) GetThermalThrottle() bool {
+	if x != nil {
+		return x.ThermalThrottle
+	}
+	return false
+}
 
-var file_spacex_api_device_dish_proto_rawDesc = []byte{
-	0x0a, 0x1c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x1a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd1, 0x02, 0x0a, 0x16, 0x44, 0x69, 0x73,
-	0x68, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a,
-	0x12, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72,
-	0x61, 0x74, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0f, 0x70, 0x6f, 0x70, 0x50,
-	0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70,
-	0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f,
-	0x6d, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x10, 0x70, 0x6f, 0x70, 0x50, 0x69,
-	0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x12, 0x37, 0x0a, 0x17, 0x64,
-	0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70,
-	0x75, 0x74, 0x5f, 0x62, 0x70, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x15, 0x64,
-	0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75,
-	0x74, 0x42, 0x70, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74,
-	0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x70, 0x73, 0x18, 0xec, 0x07,
-	0x20, 0x03, 0x28, 0x02, 0x52, 0x13, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x72, 0x6f,
-	0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x42, 0x70, 0x73, 0x12, 0x11, 0x0a, 0x03, 0x73, 0x6e, 0x72,
-	0x18, 0xed, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x1d, 0x0a, 0x09,
-	0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x18, 0xee, 0x07, 0x20, 0x03, 0x28, 0x08,
-	0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x6f,
-	0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x18, 0xef, 0x07, 0x20, 0x03, 0x28, 0x08,
-	0x52, 0x0a, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x22, 0x82, 0x05, 0x0a,
-	0x15, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
-	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53,
+func (x *DishAlerts) GetThermalShutdown() bool {
+	if x != nil {
+		return x.ThermalShutdown
+	}
+	return false
+}
+
+func (x *DishAlerts) GetMastNotNearVertical() bool {
+	if x != nil {
+		return x.MastNotNearVertical
+	}
+	return false
+}
+
+func (x *DishAlerts) GetUnexpectedLocation() bool {
+	if x != nil {
+		return x.UnexpectedLocation
+	}
+	return false
+}
+
+func (x *DishAlerts) GetSlowEthernetSpeeds() bool {
+	if x != nil {
+		return x.SlowEthernetSpeeds
+	}
+	return false
+}
+
+func (x *DishAlerts) GetRoaming() bool {
+	if x != nil {
+		return x.Roaming
+	}
+	return false
+}
+
+func (x *DishAlerts) GetInstallPending() bool {
+	if x != nil {
+		return x.InstallPending
+	}
+	return false
+}
+
+func (x *DishAlerts) GetIsHeating() bool {
+	if x != nil {
+		return x.IsHeating
+	}
+	return false
+}
+
+func (x *DishAlerts) GetPowerSupplyThermalThrottle() bool {
+	if x != nil {
+		return x.PowerSupplyThermalThrottle
+	}
+	return false
+}
+
+type DishReadyStates struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Cady bool `protobuf:"varint,1,opt,name=cady,proto3" json:"cady,omitempty"`
+	Scp  bool `protobuf:"varint,2,opt,name=scp,proto3" json:"scp,omitempty"`
+	L1L2 bool `protobuf:"varint,3,opt,name=l1l2,proto3" json:"l1l2,omitempty"`
+	Xphy bool `protobuf:"varint,4,opt,name=xphy,proto3" json:"xphy,omitempty"`
+	Aap  bool `protobuf:"varint,5,opt,name=aap,proto3" json:"aap,omitempty"`
+	Rf   bool `protobuf:"varint,6,opt,name=rf,proto3" json:"rf,omitempty"`
+}
+
+func (x *DishReadyStates) Reset() {
+	*x = DishReadyStates{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishReadyStates) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishReadyStates) ProtoMessage() {}
+
+func (x *DishReadyStates) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishReadyStates.ProtoReflect.Descriptor instead.
+func (*DishReadyStates) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *DishReadyStates) GetCady() bool {
+	if x != nil {
+		return x.Cady
+	}
+	return false
+}
+
+func (x *DishReadyStates) GetScp() bool {
+	if x != nil {
+		return x.Scp
+	}
+	return false
+}
+
+func (x *DishReadyStates) GetL1L2() bool {
+	if x != nil {
+		return x.L1L2
+	}
+	return false
+}
+
+func (x *DishReadyStates) GetXphy() bool {
+	if x != nil {
+		return x.Xphy
+	}
+	return false
+}
+
+func (x *DishReadyStates) GetAap() bool {
+	if x != nil {
+		return x.Aap
+	}
+	return false
+}
+
+func (x *DishReadyStates) GetRf() bool {
+	if x != nil {
+		return x.Rf
+	}
+	return false
+}
+
+type DishGpsStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	GpsValid        bool   `protobuf:"varint,1,opt,name=gps_valid,json=gpsValid,proto3" json:"gps_valid,omitempty"`
+	GpsSats         uint32 `protobuf:"varint,2,opt,name=gps_sats,json=gpsSats,proto3" json:"gps_sats,omitempty"`
+	NoSatsAfterTtff bool   `protobuf:"varint,3,opt,name=no_sats_after_ttff,json=noSatsAfterTtff,proto3" json:"no_sats_after_ttff,omitempty"`
+}
+
+func (x *DishGpsStats) Reset() {
+	*x = DishGpsStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGpsStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGpsStats) ProtoMessage() {}
+
+func (x *DishGpsStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGpsStats.ProtoReflect.Descriptor instead.
+func (*DishGpsStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *DishGpsStats) GetGpsValid() bool {
+	if x != nil {
+		return x.GpsValid
+	}
+	return false
+}
+
+func (x *DishGpsStats) GetGpsSats() uint32 {
+	if x != nil {
+		return x.GpsSats
+	}
+	return 0
+}
+
+func (x *DishGpsStats) GetNoSatsAfterTtff() bool {
+	if x != nil {
+		return x.NoSatsAfterTtff
+	}
+	return false
+}
+
+type DishObstructionStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	CurrentlyObstructed              bool    `protobuf:"varint,5,opt,name=currently_obstructed,json=currentlyObstructed,proto3" json:"currently_obstructed,omitempty"`
+	FractionObstructed               float32 `protobuf:"fixed32,1,opt,name=fraction_obstructed,json=fractionObstructed,proto3" json:"fraction_obstructed,omitempty"`
+	ValidS                           float32 `protobuf:"fixed32,4,opt,name=valid_s,json=validS,proto3" json:"valid_s,omitempty"`
+	AvgProlongedObstructionDurationS float32 `protobuf:"fixed32,6,opt,name=avg_prolonged_obstruction_duration_s,json=avgProlongedObstructionDurationS,proto3" json:"avg_prolonged_obstruction_duration_s,omitempty"`
+	AvgProlongedObstructionIntervalS float32 `protobuf:"fixed32,7,opt,name=avg_prolonged_obstruction_interval_s,json=avgProlongedObstructionIntervalS,proto3" json:"avg_prolonged_obstruction_interval_s,omitempty"`
+	AvgProlongedObstructionValid     bool    `protobuf:"varint,8,opt,name=avg_prolonged_obstruction_valid,json=avgProlongedObstructionValid,proto3" json:"avg_prolonged_obstruction_valid,omitempty"`
+}
+
+func (x *DishObstructionStats) Reset() {
+	*x = DishObstructionStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishObstructionStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishObstructionStats) ProtoMessage() {}
+
+func (x *DishObstructionStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishObstructionStats.ProtoReflect.Descriptor instead.
+func (*DishObstructionStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *DishObstructionStats) GetCurrentlyObstructed() bool {
+	if x != nil {
+		return x.CurrentlyObstructed
+	}
+	return false
+}
+
+func (x *DishObstructionStats) GetFractionObstructed() float32 {
+	if x != nil {
+		return x.FractionObstructed
+	}
+	return 0
+}
+
+func (x *DishObstructionStats) GetValidS() float32 {
+	if x != nil {
+		return x.ValidS
+	}
+	return 0
+}
+
+func (x *DishObstructionStats) GetAvgProlongedObstructionDurationS() float32 {
+	if x != nil {
+		return x.AvgProlongedObstructionDurationS
+	}
+	return 0
+}
+
+func (x *DishObstructionStats) GetAvgProlongedObstructionIntervalS() float32 {
+	if x != nil {
+		return x.AvgProlongedObstructionIntervalS
+	}
+	return 0
+}
+
+func (x *DishObstructionStats) GetAvgProlongedObstructionValid() bool {
+	if x != nil {
+		return x.AvgProlongedObstructionValid
+	}
+	return false
+}
+
+type DishAuthenticateResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Dish *ChallengeResponse `protobuf:"bytes,2,opt,name=dish,proto3" json:"dish,omitempty"`
+}
+
+func (x *DishAuthenticateResponse) Reset() {
+	*x = DishAuthenticateResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishAuthenticateResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishAuthenticateResponse) ProtoMessage() {}
+
+func (x *DishAuthenticateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishAuthenticateResponse.ProtoReflect.Descriptor instead.
+func (*DishAuthenticateResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *DishAuthenticateResponse) GetDish() *ChallengeResponse {
+	if x != nil {
+		return x.Dish
+	}
+	return nil
+}
+
+type SelfTestRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Detailed bool `protobuf:"varint,1,opt,name=detailed,proto3" json:"detailed,omitempty"`
+}
+
+func (x *SelfTestRequest) Reset() {
+	*x = SelfTestRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SelfTestRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelfTestRequest) ProtoMessage() {}
+
+func (x *SelfTestRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelfTestRequest.ProtoReflect.Descriptor instead.
+func (*SelfTestRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *SelfTestRequest) GetDetailed() bool {
+	if x != nil {
+		return x.Detailed
+	}
+	return false
+}
+
+type SelfTestResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Passed bool   `protobuf:"varint,1,opt,name=passed,proto3" json:"passed,omitempty"`
+	Report string `protobuf:"bytes,2,opt,name=report,proto3" json:"report,omitempty"`
+}
+
+func (x *SelfTestResponse) Reset() {
+	*x = SelfTestResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SelfTestResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelfTestResponse) ProtoMessage() {}
+
+func (x *SelfTestResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelfTestResponse.ProtoReflect.Descriptor instead.
+func (*SelfTestResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *SelfTestResponse) GetPassed() bool {
+	if x != nil {
+		return x.Passed
+	}
+	return false
+}
+
+func (x *SelfTestResponse) GetReport() string {
+	if x != nil {
+		return x.Report
+	}
+	return ""
+}
+
+type StartDishSelfTestRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *StartDishSelfTestRequest) Reset() {
+	*x = StartDishSelfTestRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StartDishSelfTestRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StartDishSelfTestRequest) ProtoMessage() {}
+
+func (x *StartDishSelfTestRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StartDishSelfTestRequest.ProtoReflect.Descriptor instead.
+func (*StartDishSelfTestRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{16}
+}
+
+type StartDishSelfTestResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *StartDishSelfTestResponse) Reset() {
+	*x = StartDishSelfTestResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StartDishSelfTestResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StartDishSelfTestResponse) ProtoMessage() {}
+
+func (x *StartDishSelfTestResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StartDishSelfTestResponse.ProtoReflect.Descriptor instead.
+func (*StartDishSelfTestResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{17}
+}
+
+type SetTestModeRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RfMode                SetTestModeRequest_RfMode `protobuf:"varint,1,opt,name=rf_mode,json=rfMode,proto3,enum=SpaceX.API.Device.SetTestModeRequest_RfMode" json:"rf_mode,omitempty"`
+	DisableLossOfCommFdir bool                      `protobuf:"varint,1001,opt,name=disable_loss_of_comm_fdir,json=disableLossOfCommFdir,proto3" json:"disable_loss_of_comm_fdir,omitempty"`
+	EnableRulesOverride   bool                      `protobuf:"varint,1002,opt,name=enable_rules_override,json=enableRulesOverride,proto3" json:"enable_rules_override,omitempty"`
+}
+
+func (x *SetTestModeRequest) Reset() {
+	*x = SetTestModeRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetTestModeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetTestModeRequest) ProtoMessage() {}
+
+func (x *SetTestModeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetTestModeRequest.ProtoReflect.Descriptor instead.
+func (*SetTestModeRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *SetTestModeRequest) GetRfMode() SetTestModeRequest_RfMode {
+	if x != nil {
+		return x.RfMode
+	}
+	return SetTestModeRequest_RX
+}
+
+func (x *SetTestModeRequest) GetDisableLossOfCommFdir() bool {
+	if x != nil {
+		return x.DisableLossOfCommFdir
+	}
+	return false
+}
+
+func (x *SetTestModeRequest) GetEnableRulesOverride() bool {
+	if x != nil {
+		return x.EnableRulesOverride
+	}
+	return false
+}
+
+type SetTestModeResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SetTestModeResponse) Reset() {
+	*x = SetTestModeResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetTestModeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetTestModeResponse) ProtoMessage() {}
+
+func (x *SetTestModeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetTestModeResponse.ProtoReflect.Descriptor instead.
+func (*SetTestModeResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{19}
+}
+
+type DishSetConfigRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DishConfig *DishConfig `protobuf:"bytes,1,opt,name=dish_config,json=dishConfig,proto3" json:"dish_config,omitempty"`
+}
+
+func (x *DishSetConfigRequest) Reset() {
+	*x = DishSetConfigRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishSetConfigRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishSetConfigRequest) ProtoMessage() {}
+
+func (x *DishSetConfigRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishSetConfigRequest.ProtoReflect.Descriptor instead.
+func (*DishSetConfigRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *DishSetConfigRequest) GetDishConfig() *DishConfig {
+	if x != nil {
+		return x.DishConfig
+	}
+	return nil
+}
+
+type DishSetConfigResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UpdatedDishConfig *DishConfig `protobuf:"bytes,1,opt,name=updated_dish_config,json=updatedDishConfig,proto3" json:"updated_dish_config,omitempty"`
+}
+
+func (x *DishSetConfigResponse) Reset() {
+	*x = DishSetConfigResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishSetConfigResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishSetConfigResponse) ProtoMessage() {}
+
+func (x *DishSetConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishSetConfigResponse.ProtoReflect.Descriptor instead.
+func (*DishSetConfigResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *DishSetConfigResponse) GetUpdatedDishConfig() *DishConfig {
+	if x != nil {
+		return x.UpdatedDishConfig
+	}
+	return nil
+}
+
+type DishGetConfigRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *DishGetConfigRequest) Reset() {
+	*x = DishGetConfigRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetConfigRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetConfigRequest) ProtoMessage() {}
+
+func (x *DishGetConfigRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetConfigRequest.ProtoReflect.Descriptor instead.
+func (*DishGetConfigRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{22}
+}
+
+type DishGetConfigResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DishConfig *DishConfig `protobuf:"bytes,1,opt,name=dish_config,json=dishConfig,proto3" json:"dish_config,omitempty"`
+}
+
+func (x *DishGetConfigResponse) Reset() {
+	*x = DishGetConfigResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishGetConfigResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishGetConfigResponse) ProtoMessage() {}
+
+func (x *DishGetConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishGetConfigResponse.ProtoReflect.Descriptor instead.
+func (*DishGetConfigResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *DishGetConfigResponse) GetDishConfig() *DishConfig {
+	if x != nil {
+		return x.DishConfig
+	}
+	return nil
+}
+
+var File_spacex_api_device_dish_proto protoreflect.FileDescriptor
+
+var file_spacex_api_device_dish_proto_rawDesc = []byte{
+	0x0a, 0x1c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x1a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x22, 0x29, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x73, 0x74, 0x6f, 0x77, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x73, 0x74, 0x6f, 0x77, 0x22, 0x12, 0x0a, 0x10, 0x44,
+	0x69, 0x73, 0x68, 0x53, 0x74, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x17, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x95, 0x08, 0x0a, 0x16, 0x44, 0x69, 0x73,
+	0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74,
+	0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x62, 0x73,
+	0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x12, 0x2f, 0x0a, 0x13, 0x6f, 0x62, 0x73,
+	0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x65,
+	0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x63, 0x65, 0x6c,
+	0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x63, 0x6b, 0x5f,
+	0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x6f, 0x70, 0x52, 0x61, 0x63,
+	0x6b, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73,
+	0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x74, 0x65, 0x6c, 0x6c,
+	0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
+	0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
+	0x79, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70,
+	0x5f, 0x62, 0x65, 0x61, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x6e, 0x42,
+	0x61, 0x63, 0x6b, 0x75, 0x70, 0x42, 0x65, 0x61, 0x6d, 0x12, 0x2d, 0x0a, 0x13, 0x73, 0x65, 0x63,
+	0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x65, 0x6e, 0x64,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54,
+	0x6f, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x62, 0x75,
+	0x67, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x65, 0x62, 0x75, 0x67,
+	0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+	0x12, 0x3b, 0x0a, 0x1b, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f,
+	0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x35, 0x73, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x18,
+	0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x72,
+	0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x31, 0x35, 0x73, 0x4d, 0x65, 0x61, 0x6e, 0x12, 0x3d, 0x0a,
+	0x1c, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63,
+	0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x31, 0x35, 0x73, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x18, 0x0e, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x17, 0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x4d, 0x73, 0x31, 0x35, 0x73, 0x4d, 0x65, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x1c,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65,
+	0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1c,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x10, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65,
+	0x4c, 0x61, 0x73, 0x74, 0x32, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1c,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65,
+	0x4c, 0x61, 0x73, 0x74, 0x35, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x1d,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x31, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x12, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x19, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63,
+	0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x35, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x40,
+	0x0a, 0x1d, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f,
+	0x6c, 0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18,
+	0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x19, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69,
+	0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65,
+	0x22, 0xef, 0x02, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x68, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12,
+	0x39, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x61,
+	0x75, 0x73, 0x65, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6e, 0x73,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64,
+	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x69, 0x64,
+	0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x64,
+	0x69, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xb7, 0x01, 0x0a, 0x05, 0x43, 0x61, 0x75,
+	0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06,
+	0x53, 0x54, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x48, 0x45, 0x52,
+	0x4d, 0x41, 0x4c, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x0f,
+	0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x10, 0x04, 0x12,
+	0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x5f, 0x53, 0x41, 0x54, 0x53, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a,
+	0x4f, 0x42, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b,
+	0x4e, 0x4f, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x07, 0x12, 0x0c, 0x0a,
+	0x08, 0x4e, 0x4f, 0x5f, 0x50, 0x49, 0x4e, 0x47, 0x53, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x41,
+	0x43, 0x54, 0x55, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59,
+	0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54,
+	0x10, 0x0a, 0x22, 0xd8, 0x02, 0x0a, 0x16, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
+	0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07,
+	0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x70, 0x5f, 0x70,
+	0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xe9, 0x07,
+	0x20, 0x03, 0x28, 0x02, 0x52, 0x0f, 0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f,
+	0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e,
+	0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0xea, 0x07, 0x20,
+	0x03, 0x28, 0x02, 0x52, 0x10, 0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x4d, 0x73, 0x12, 0x37, 0x0a, 0x17, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e,
+	0x6b, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x70, 0x73,
+	0x18, 0xeb, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e,
+	0x6b, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x42, 0x70, 0x73, 0x12, 0x33,
+	0x0a, 0x15, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68,
+	0x70, 0x75, 0x74, 0x5f, 0x62, 0x70, 0x73, 0x18, 0xec, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x13,
+	0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74,
+	0x42, 0x70, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x73, 0x18, 0xf1,
+	0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x4f, 0x75,
+	0x74, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x73, 0x4a, 0x06, 0x08,
+	0xed, 0x07, 0x10, 0xee, 0x07, 0x4a, 0x06, 0x08, 0xee, 0x07, 0x10, 0xef, 0x07, 0x4a, 0x06, 0x08,
+	0xef, 0x07, 0x10, 0xf0, 0x07, 0x4a, 0x06, 0x08, 0xf0, 0x07, 0x10, 0xf1, 0x07, 0x22, 0xe1, 0x0b,
+	0x0a, 0x15, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53,
 	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61,
-	0x74, 0x65, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x53, 0x70, 0x61, 0x63,
-	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69,
-	0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36,
-	0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x06,
-	0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x11, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0xe9, 0x07,
-	0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x73, 0x65, 0x63,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x61, 0x6c,
+	0x65, 0x72, 0x74, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x44, 0x69, 0x73, 0x68, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72,
+	0x74, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xf6, 0x07, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x4f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x67, 0x70,
+	0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x47, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
+	0x08, 0x67, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x73, 0x65, 0x63,
 	0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x6f,
 	0x6e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01,
 	0x28, 0x02, 0x52, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54, 0x6f, 0x46, 0x69, 0x72,
@@ -655,50 +2254,227 @@ var file_spacex_api_device_dish_proto_rawDesc = []byte
 	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x4f,
 	0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
 	0x10, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
-	0x73, 0x22, 0xb6, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x68, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73,
-	0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x73, 0x74, 0x75, 0x63, 0x6b,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x74,
-	0x75, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74,
-	0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74,
-	0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x29,
-	0x0a, 0x10, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f,
-	0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61,
-	0x6c, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x75, 0x6e, 0x65,
-	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
-	0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc6, 0x02, 0x0a, 0x14, 0x44,
-	0x69, 0x73, 0x68, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
-	0x61, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79,
-	0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x4f, 0x62, 0x73, 0x74,
-	0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x02, 0x52, 0x12, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x73,
-	0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f,
-	0x32, 0x34, 0x68, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x73,
-	0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x32, 0x34, 0x68,
-	0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x53, 0x12, 0x17, 0x0a, 0x07, 0x76,
-	0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x76, 0x61,
-	0x6c, 0x69, 0x64, 0x53, 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x66, 0x72,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65,
-	0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x02, 0x52, 0x17, 0x77, 0x65, 0x64, 0x67, 0x65, 0x46, 0x72,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64,
-	0x12, 0x41, 0x0a, 0x1d, 0x77, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x61, 0x62, 0x73, 0x5f, 0x66, 0x72,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65,
-	0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x02, 0x52, 0x1a, 0x77, 0x65, 0x64, 0x67, 0x65, 0x41, 0x62,
-	0x73, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63,
+	0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x77,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x62, 0x6f, 0x72,
+	0x65, 0x73, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x61, 0x7a, 0x69, 0x6d, 0x75, 0x74, 0x68, 0x5f, 0x64,
+	0x65, 0x67, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x62, 0x6f, 0x72, 0x65, 0x73,
+	0x69, 0x67, 0x68, 0x74, 0x41, 0x7a, 0x69, 0x6d, 0x75, 0x74, 0x68, 0x44, 0x65, 0x67, 0x12, 0x37,
+	0x0a, 0x17, 0x62, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x65, 0x6c, 0x65, 0x76,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x67, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x15, 0x62, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6c, 0x65, 0x76, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x74, 0x68, 0x5f, 0x73,
+	0x70, 0x65, 0x65, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x0c, 0x65, 0x74, 0x68, 0x53, 0x70, 0x65, 0x65, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x4c,
+	0x0a, 0x0e, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72,
+	0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x0d, 0x6d,
+	0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x18,
+	0x69, 0x73, 0x5f, 0x73, 0x6e, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x6e, 0x6f, 0x69,
+	0x73, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x14, 0x69, 0x73, 0x53, 0x6e, 0x72, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x69, 0x73, 0x65,
+	0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x44, 0x69, 0x73, 0x68, 0x52, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73,
+	0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a,
+	0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65,
+	0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52,
+	0x0e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x5b, 0x0a, 0x15, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x26, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x13, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
+	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x17,
+	0x69, 0x73, 0x5f, 0x73, 0x6e, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e,
+	0x74, 0x6c, 0x79, 0x5f, 0x6c, 0x6f, 0x77, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14,
+	0x69, 0x73, 0x53, 0x6e, 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x6c,
+	0x79, 0x4c, 0x6f, 0x77, 0x12, 0x45, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x75,
+	0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x48, 0x61, 0x73, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x0c, 0x68,
+	0x61, 0x73, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x10, 0x64,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18,
+	0x80, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x53, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x4e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x55, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4a, 0x06, 0x08, 0xe9, 0x07, 0x10, 0xea,
+	0x07, 0x4a, 0x06, 0x08, 0xee, 0x07, 0x10, 0xef, 0x07, 0x4a, 0x06, 0x08, 0xf5, 0x07, 0x10, 0xf6,
+	0x07, 0x22, 0x1e, 0x0a, 0x1c, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73, 0x74,
+	0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x22, 0x67, 0x0a, 0x1d, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73, 0x74,
+	0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x19, 0x0a,
+	0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x07, 0x6e, 0x75, 0x6d, 0x43, 0x6f, 0x6c, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x22, 0xc2, 0x03, 0x0a, 0x0a, 0x44,
+	0x69, 0x73, 0x68, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x6f, 0x74,
+	0x6f, 0x72, 0x73, 0x5f, 0x73, 0x74, 0x75, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0b, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x74, 0x75, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10,
+	0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54,
+	0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f,
+	0x77, 0x6e, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6e,
+	0x65, 0x61, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x4e, 0x65, 0x61, 0x72, 0x56,
+	0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70,
+	0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
+	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x6c, 0x6f, 0x77,
+	0x5f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x73,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6c, 0x6f, 0x77, 0x45, 0x74, 0x68, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x6f,
+	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x6f, 0x61,
+	0x6d, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f,
+	0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69,
+	0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a,
+	0x0a, 0x69, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x09, 0x69, 0x73, 0x48, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x1d,
+	0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x74, 0x68, 0x65,
+	0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x1a, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79,
+	0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x22,
+	0x81, 0x01, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x68, 0x52, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61,
+	0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x04, 0x63, 0x61, 0x64, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x63, 0x70, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x73, 0x63, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x31, 0x6c,
+	0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x31, 0x6c, 0x32, 0x12, 0x12, 0x0a,
+	0x04, 0x78, 0x70, 0x68, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x78, 0x70, 0x68,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x61, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03,
+	0x61, 0x61, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x02, 0x72, 0x66, 0x22, 0x73, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x68, 0x47, 0x70, 0x73, 0x53, 0x74,
+	0x61, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x67, 0x70, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64,
+	0x12, 0x19, 0x0a, 0x08, 0x67, 0x70, 0x73, 0x5f, 0x73, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x07, 0x67, 0x70, 0x73, 0x53, 0x61, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6e,
+	0x6f, 0x5f, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x74, 0x66,
+	0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x53, 0x61, 0x74, 0x73, 0x41,
+	0x66, 0x74, 0x65, 0x72, 0x54, 0x74, 0x66, 0x66, 0x22, 0xc8, 0x03, 0x0a, 0x14, 0x44, 0x69, 0x73,
+	0x68, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
+	0x73, 0x12, 0x31, 0x0a, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x6f,
+	0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75,
+	0x63, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x02, 0x52, 0x12, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x73, 0x74, 0x72,
+	0x75, 0x63, 0x74, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x12, 0x4e,
+	0x0a, 0x24, 0x61, 0x76, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x64, 0x5f,
+	0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x20, 0x61, 0x76,
+	0x67, 0x50, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x4e,
+	0x0a, 0x24, 0x61, 0x76, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x64, 0x5f,
+	0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65,
+	0x72, 0x76, 0x61, 0x6c, 0x5f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x20, 0x61, 0x76,
+	0x67, 0x50, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x12, 0x45,
+	0x0a, 0x1f, 0x61, 0x76, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x64, 0x5f,
+	0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x61, 0x76, 0x67, 0x50, 0x72, 0x6f, 0x6c,
+	0x6f, 0x6e, 0x67, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x56, 0x61, 0x6c, 0x69, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10,
+	0x04, 0x4a, 0x06, 0x08, 0xee, 0x07, 0x10, 0xef, 0x07, 0x52, 0x19, 0x77, 0x65, 0x64, 0x67, 0x65,
+	0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75,
+	0x63, 0x74, 0x65, 0x64, 0x52, 0x1d, 0x77, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x61, 0x62, 0x73, 0x5f,
+	0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x74, 0x72, 0x75, 0x63,
 	0x74, 0x65, 0x64, 0x22, 0x54, 0x0a, 0x18, 0x44, 0x69, 0x73, 0x68, 0x41, 0x75, 0x74, 0x68, 0x65,
 	0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
 	0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
 	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
 	0x65, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x52, 0x04, 0x64, 0x69, 0x73, 0x68, 0x2a, 0x43, 0x0a, 0x09, 0x44, 0x69, 0x73,
-	0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
-	0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44,
-	0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x49, 0x4e, 0x47, 0x10,
-	0x02, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x42, 0x17,
-	0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69,
-	0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6e, 0x73, 0x65, 0x52, 0x04, 0x64, 0x69, 0x73, 0x68, 0x22, 0x2d, 0x0a, 0x0f, 0x53, 0x65, 0x6c,
+	0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+	0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+	0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x10, 0x53, 0x65, 0x6c, 0x66,
+	0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61,
+	0x73, 0x73, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x1a, 0x0a, 0x18,
+	0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72,
+	0x74, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x54, 0x65, 0x73,
+	0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x07,
+	0x72, 0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x66, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x72, 0x66, 0x4d,
+	0x6f, 0x64, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c,
+	0x6f, 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x5f, 0x66, 0x64, 0x69, 0x72,
+	0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x4c, 0x6f, 0x73, 0x73, 0x4f, 0x66, 0x43, 0x6f, 0x6d, 0x6d, 0x46, 0x64, 0x69, 0x72, 0x12, 0x33,
+	0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x6f,
+	0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x4f, 0x76, 0x65, 0x72, 0x72,
+	0x69, 0x64, 0x65, 0x22, 0x42, 0x0a, 0x06, 0x52, 0x66, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a,
+	0x02, 0x52, 0x58, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x01, 0x12,
+	0x06, 0x0a, 0x02, 0x54, 0x58, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x43, 0x41, 0x4c, 0x10, 0x03,
+	0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x4f,
+	0x52, 0x4d, 0x41, 0x4c, 0x10, 0xa4, 0x03, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x54, 0x65,
+	0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56,
+	0x0a, 0x14, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x66, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65,
+	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x4d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x64, 0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x16,
+	0x0a, 0x14, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x68, 0x47, 0x65,
+	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x3e, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2a,
+	0x3c, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43,
+	0x6c, 0x61, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41,
+	0x52, 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x4d, 0x41, 0x44, 0x49, 0x43, 0x10,
+	0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x42, 0x49, 0x4c, 0x45, 0x10, 0x02, 0x2a, 0xac, 0x01,
+	0x0a, 0x13, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52,
+	0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55,
+	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45,
+	0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x45, 0x54, 0x43, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x02,
+	0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x03, 0x12,
+	0x0b, 0x0a, 0x07, 0x57, 0x52, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a,
+	0x50, 0x4f, 0x53, 0x54, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f,
+	0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10,
+	0x06, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x07, 0x12,
+	0x0b, 0x0a, 0x07, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x45, 0x44, 0x10, 0x08, 0x2a, 0x7f, 0x0a, 0x12,
+	0x55, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x55, 0x53,
+	0x45, 0x52, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x4f, 0x46, 0x5f, 0x53, 0x45, 0x52, 0x56,
+	0x49, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x53, 0x55, 0x4d, 0x45,
+	0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10,
+	0x02, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x4c,
+	0x55, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x52, 0x43, 0x49,
+	0x41, 0x4c, 0x5f, 0x41, 0x56, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x56, 0x0a,
+	0x0c, 0x48, 0x61, 0x73, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x19, 0x0a,
+	0x15, 0x48, 0x41, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x55, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x5f, 0x55,
+	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x41, 0x53, 0x5f,
+	0x41, 0x43, 0x54, 0x55, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x5f, 0x59, 0x45, 0x53, 0x10, 0x01, 0x12,
+	0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x55, 0x41, 0x54, 0x4f, 0x52, 0x53,
+	0x5f, 0x4e, 0x4f, 0x10, 0x02, 0x2a, 0x43, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x68, 0x53, 0x74, 0x61,
+	0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d,
+	0x0a, 0x09, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a,
+	0x07, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -713,33 +2489,73 @@ func file_spacex_api_device_dish_proto_rawDescGZIP() [
 	return file_spacex_api_device_dish_proto_rawDescData
 }
 
-var file_spacex_api_device_dish_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_spacex_api_device_dish_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_spacex_api_device_dish_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
+var file_spacex_api_device_dish_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
 var file_spacex_api_device_dish_proto_goTypes = []interface{}{
-	(DishState)(0),                   // 0: SpaceX.API.Device.DishState
-	(*DishStowRequest)(nil),          // 1: SpaceX.API.Device.DishStowRequest
-	(*DishStowResponse)(nil),         // 2: SpaceX.API.Device.DishStowResponse
-	(*DishGetHistoryResponse)(nil),   // 3: SpaceX.API.Device.DishGetHistoryResponse
-	(*DishGetStatusResponse)(nil),    // 4: SpaceX.API.Device.DishGetStatusResponse
-	(*DishAlerts)(nil),               // 5: SpaceX.API.Device.DishAlerts
-	(*DishObstructionStats)(nil),     // 6: SpaceX.API.Device.DishObstructionStats
-	(*DishAuthenticateResponse)(nil), // 7: SpaceX.API.Device.DishAuthenticateResponse
-	(*DeviceInfo)(nil),               // 8: SpaceX.API.Device.DeviceInfo
-	(*DeviceState)(nil),              // 9: SpaceX.API.Device.DeviceState
-	(*ChallengeResponse)(nil),        // 10: SpaceX.API.Device.ChallengeResponse
+	(UserMobilityClass)(0),                // 0: SpaceX.API.Device.UserMobilityClass
+	(SoftwareUpdateState)(0),              // 1: SpaceX.API.Device.SoftwareUpdateState
+	(UserClassOfService)(0),               // 2: SpaceX.API.Device.UserClassOfService
+	(HasActuators)(0),                     // 3: SpaceX.API.Device.HasActuators
+	(DishState)(0),                        // 4: SpaceX.API.Device.DishState
+	(DishOutage_Cause)(0),                 // 5: SpaceX.API.Device.DishOutage.Cause
+	(SetTestModeRequest_RfMode)(0),        // 6: SpaceX.API.Device.SetTestModeRequest.RfMode
+	(*DishStowRequest)(nil),               // 7: SpaceX.API.Device.DishStowRequest
+	(*DishStowResponse)(nil),              // 8: SpaceX.API.Device.DishStowResponse
+	(*DishGetContextRequest)(nil),         // 9: SpaceX.API.Device.DishGetContextRequest
+	(*DishGetContextResponse)(nil),        // 10: SpaceX.API.Device.DishGetContextResponse
+	(*DishOutage)(nil),                    // 11: SpaceX.API.Device.DishOutage
+	(*DishGetHistoryResponse)(nil),        // 12: SpaceX.API.Device.DishGetHistoryResponse
+	(*DishGetStatusResponse)(nil),         // 13: SpaceX.API.Device.DishGetStatusResponse
+	(*DishGetObstructionMapRequest)(nil),  // 14: SpaceX.API.Device.DishGetObstructionMapRequest
+	(*DishGetObstructionMapResponse)(nil), // 15: SpaceX.API.Device.DishGetObstructionMapResponse
+	(*DishAlerts)(nil),                    // 16: SpaceX.API.Device.DishAlerts
+	(*DishReadyStates)(nil),               // 17: SpaceX.API.Device.DishReadyStates
+	(*DishGpsStats)(nil),                  // 18: SpaceX.API.Device.DishGpsStats
+	(*DishObstructionStats)(nil),          // 19: SpaceX.API.Device.DishObstructionStats
+	(*DishAuthenticateResponse)(nil),      // 20: SpaceX.API.Device.DishAuthenticateResponse
+	(*SelfTestRequest)(nil),               // 21: SpaceX.API.Device.SelfTestRequest
+	(*SelfTestResponse)(nil),              // 22: SpaceX.API.Device.SelfTestResponse
+	(*StartDishSelfTestRequest)(nil),      // 23: SpaceX.API.Device.StartDishSelfTestRequest
+	(*StartDishSelfTestResponse)(nil),     // 24: SpaceX.API.Device.StartDishSelfTestResponse
+	(*SetTestModeRequest)(nil),            // 25: SpaceX.API.Device.SetTestModeRequest
+	(*SetTestModeResponse)(nil),           // 26: SpaceX.API.Device.SetTestModeResponse
+	(*DishSetConfigRequest)(nil),          // 27: SpaceX.API.Device.DishSetConfigRequest
+	(*DishSetConfigResponse)(nil),         // 28: SpaceX.API.Device.DishSetConfigResponse
+	(*DishGetConfigRequest)(nil),          // 29: SpaceX.API.Device.DishGetConfigRequest
+	(*DishGetConfigResponse)(nil),         // 30: SpaceX.API.Device.DishGetConfigResponse
+	(*DeviceInfo)(nil),                    // 31: SpaceX.API.Device.DeviceInfo
+	(*DeviceState)(nil),                   // 32: SpaceX.API.Device.DeviceState
+	(satellites.UtDisablementCode)(0),     // 33: SpaceX.API.Satellites.Network.UtDisablementCode
+	(*ChallengeResponse)(nil),             // 34: SpaceX.API.Device.ChallengeResponse
+	(*DishConfig)(nil),                    // 35: SpaceX.API.Device.DishConfig
 }
 var file_spacex_api_device_dish_proto_depIdxs = []int32{
-	8,  // 0: SpaceX.API.Device.DishGetStatusResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
-	9,  // 1: SpaceX.API.Device.DishGetStatusResponse.device_state:type_name -> SpaceX.API.Device.DeviceState
-	0,  // 2: SpaceX.API.Device.DishGetStatusResponse.state:type_name -> SpaceX.API.Device.DishState
-	5,  // 3: SpaceX.API.Device.DishGetStatusResponse.alerts:type_name -> SpaceX.API.Device.DishAlerts
-	6,  // 4: SpaceX.API.Device.DishGetStatusResponse.obstruction_stats:type_name -> SpaceX.API.Device.DishObstructionStats
-	10, // 5: SpaceX.API.Device.DishAuthenticateResponse.dish:type_name -> SpaceX.API.Device.ChallengeResponse
-	6,  // [6:6] is the sub-list for method output_type
-	6,  // [6:6] is the sub-list for method input_type
-	6,  // [6:6] is the sub-list for extension type_name
-	6,  // [6:6] is the sub-list for extension extendee
-	0,  // [0:6] is the sub-list for field type_name
+	31, // 0: SpaceX.API.Device.DishGetContextResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
+	32, // 1: SpaceX.API.Device.DishGetContextResponse.device_state:type_name -> SpaceX.API.Device.DeviceState
+	5,  // 2: SpaceX.API.Device.DishOutage.cause:type_name -> SpaceX.API.Device.DishOutage.Cause
+	11, // 3: SpaceX.API.Device.DishGetHistoryResponse.outages:type_name -> SpaceX.API.Device.DishOutage
+	31, // 4: SpaceX.API.Device.DishGetStatusResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
+	32, // 5: SpaceX.API.Device.DishGetStatusResponse.device_state:type_name -> SpaceX.API.Device.DeviceState
+	16, // 6: SpaceX.API.Device.DishGetStatusResponse.alerts:type_name -> SpaceX.API.Device.DishAlerts
+	11, // 7: SpaceX.API.Device.DishGetStatusResponse.outage:type_name -> SpaceX.API.Device.DishOutage
+	18, // 8: SpaceX.API.Device.DishGetStatusResponse.gps_stats:type_name -> SpaceX.API.Device.DishGpsStats
+	19, // 9: SpaceX.API.Device.DishGetStatusResponse.obstruction_stats:type_name -> SpaceX.API.Device.DishObstructionStats
+	0,  // 10: SpaceX.API.Device.DishGetStatusResponse.mobility_class:type_name -> SpaceX.API.Device.UserMobilityClass
+	17, // 11: SpaceX.API.Device.DishGetStatusResponse.ready_states:type_name -> SpaceX.API.Device.DishReadyStates
+	2,  // 12: SpaceX.API.Device.DishGetStatusResponse.class_of_service:type_name -> SpaceX.API.Device.UserClassOfService
+	1,  // 13: SpaceX.API.Device.DishGetStatusResponse.software_update_state:type_name -> SpaceX.API.Device.SoftwareUpdateState
+	3,  // 14: SpaceX.API.Device.DishGetStatusResponse.has_actuators:type_name -> SpaceX.API.Device.HasActuators
+	33, // 15: SpaceX.API.Device.DishGetStatusResponse.disablement_code:type_name -> SpaceX.API.Satellites.Network.UtDisablementCode
+	34, // 16: SpaceX.API.Device.DishAuthenticateResponse.dish:type_name -> SpaceX.API.Device.ChallengeResponse
+	6,  // 17: SpaceX.API.Device.SetTestModeRequest.rf_mode:type_name -> SpaceX.API.Device.SetTestModeRequest.RfMode
+	35, // 18: SpaceX.API.Device.DishSetConfigRequest.dish_config:type_name -> SpaceX.API.Device.DishConfig
+	35, // 19: SpaceX.API.Device.DishSetConfigResponse.updated_dish_config:type_name -> SpaceX.API.Device.DishConfig
+	35, // 20: SpaceX.API.Device.DishGetConfigResponse.dish_config:type_name -> SpaceX.API.Device.DishConfig
+	21, // [21:21] is the sub-list for method output_type
+	21, // [21:21] is the sub-list for method input_type
+	21, // [21:21] is the sub-list for extension type_name
+	21, // [21:21] is the sub-list for extension extendee
+	0,  // [0:21] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_dish_proto_init() }
@@ -748,6 +2564,7 @@ func file_spacex_api_device_dish_proto_init() {
 		return
 	}
 	file_spacex_api_device_common_proto_init()
+	file_spacex_api_device_dish_config_proto_init()
 	if !protoimpl.UnsafeEnabled {
 		file_spacex_api_device_dish_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DishStowRequest); i {
@@ -774,7 +2591,7 @@ func file_spacex_api_device_dish_proto_init() {
 			}
 		}
 		file_spacex_api_device_dish_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DishGetHistoryResponse); i {
+			switch v := v.(*DishGetContextRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -786,7 +2603,7 @@ func file_spacex_api_device_dish_proto_init() {
 			}
 		}
 		file_spacex_api_device_dish_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DishGetStatusResponse); i {
+			switch v := v.(*DishGetContextResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -798,7 +2615,7 @@ func file_spacex_api_device_dish_proto_init() {
 			}
 		}
 		file_spacex_api_device_dish_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DishAlerts); i {
+			switch v := v.(*DishOutage); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -810,7 +2627,7 @@ func file_spacex_api_device_dish_proto_init() {
 			}
 		}
 		file_spacex_api_device_dish_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DishObstructionStats); i {
+			switch v := v.(*DishGetHistoryResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -822,6 +2639,90 @@ func file_spacex_api_device_dish_proto_init() {
 			}
 		}
 		file_spacex_api_device_dish_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetStatusResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetObstructionMapRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetObstructionMapResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishAlerts); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishReadyStates); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGpsStats); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishObstructionStats); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DishAuthenticateResponse); i {
 			case 0:
 				return &v.state
@@ -833,14 +2734,134 @@ func file_spacex_api_device_dish_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_dish_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelfTestRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelfTestResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StartDishSelfTestRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StartDishSelfTestResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTestModeRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTestModeResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishSetConfigRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishSetConfigResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetConfigRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_dish_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishGetConfigResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_dish_proto_rawDesc,
-			NumEnums:      1,
-			NumMessages:   7,
+			NumEnums:      7,
+			NumMessages:   24,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
blob - ca19d45aaaada0254671421c2861689090cff33c
blob + 670f69a0081f6f43302f8c94c101faa61f02445e
--- device/transceiver.pb.go
+++ device/transceiver.pb.go
@@ -495,8 +495,325 @@ func (x *TransceiverFaults) GetDcVoltageFault() bool {
 		return x.DcVoltageFault
 	}
 	return false
+}
+
+type TransceiverGetTelemetryRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *TransceiverGetTelemetryRequest) Reset() {
+	*x = TransceiverGetTelemetryRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_transceiver_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TransceiverGetTelemetryRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TransceiverGetTelemetryRequest) ProtoMessage() {}
+
+func (x *TransceiverGetTelemetryRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_transceiver_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TransceiverGetTelemetryRequest.ProtoReflect.Descriptor instead.
+func (*TransceiverGetTelemetryRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_transceiver_proto_rawDescGZIP(), []int{5}
+}
+
+type TransceiverGetTelemetryResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AntennaPointingMode                uint32  `protobuf:"varint,1001,opt,name=antenna_pointing_mode,json=antennaPointingMode,proto3" json:"antenna_pointing_mode,omitempty"`
+	AntennaPitch                       float32 `protobuf:"fixed32,1002,opt,name=antenna_pitch,json=antennaPitch,proto3" json:"antenna_pitch,omitempty"`
+	AntennaRoll                        float32 `protobuf:"fixed32,1003,opt,name=antenna_roll,json=antennaRoll,proto3" json:"antenna_roll,omitempty"`
+	AntennaRxTheta                     float32 `protobuf:"fixed32,1004,opt,name=antenna_rx_theta,json=antennaRxTheta,proto3" json:"antenna_rx_theta,omitempty"`
+	AntennaTrueHeading                 float32 `protobuf:"fixed32,1005,opt,name=antenna_true_heading,json=antennaTrueHeading,proto3" json:"antenna_true_heading,omitempty"`
+	RxChannel                          uint32  `protobuf:"varint,1006,opt,name=rx_channel,json=rxChannel,proto3" json:"rx_channel,omitempty"`
+	CurrentCellId                      uint32  `protobuf:"varint,1007,opt,name=current_cell_id,json=currentCellId,proto3" json:"current_cell_id,omitempty"`
+	SecondsUntilSlotEnd                float32 `protobuf:"fixed32,1008,opt,name=seconds_until_slot_end,json=secondsUntilSlotEnd,proto3" json:"seconds_until_slot_end,omitempty"`
+	WbRssiPeakMagDb                    float32 `protobuf:"fixed32,1009,opt,name=wb_rssi_peak_mag_db,json=wbRssiPeakMagDb,proto3" json:"wb_rssi_peak_mag_db,omitempty"`
+	PopPingDropRate                    float32 `protobuf:"fixed32,1010,opt,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
+	SnrDb                              float32 `protobuf:"fixed32,1011,opt,name=snr_db,json=snrDb,proto3" json:"snr_db,omitempty"`
+	L1SnrAvgDb                         float32 `protobuf:"fixed32,1012,opt,name=l1_snr_avg_db,json=l1SnrAvgDb,proto3" json:"l1_snr_avg_db,omitempty"`
+	L1SnrMinDb                         float32 `protobuf:"fixed32,1013,opt,name=l1_snr_min_db,json=l1SnrMinDb,proto3" json:"l1_snr_min_db,omitempty"`
+	L1SnrMaxDb                         float32 `protobuf:"fixed32,1014,opt,name=l1_snr_max_db,json=l1SnrMaxDb,proto3" json:"l1_snr_max_db,omitempty"`
+	LmacSatelliteId                    uint32  `protobuf:"varint,1015,opt,name=lmac_satellite_id,json=lmacSatelliteId,proto3" json:"lmac_satellite_id,omitempty"`
+	TargetSatelliteId                  uint32  `protobuf:"varint,1016,opt,name=target_satellite_id,json=targetSatelliteId,proto3" json:"target_satellite_id,omitempty"`
+	GrantMcs                           uint32  `protobuf:"varint,1017,opt,name=grant_mcs,json=grantMcs,proto3" json:"grant_mcs,omitempty"`
+	GrantSymbolsAvg                    float32 `protobuf:"fixed32,1018,opt,name=grant_symbols_avg,json=grantSymbolsAvg,proto3" json:"grant_symbols_avg,omitempty"`
+	DedGrant                           uint32  `protobuf:"varint,1019,opt,name=ded_grant,json=dedGrant,proto3" json:"ded_grant,omitempty"`
+	MobilityProactiveSlotChange        uint32  `protobuf:"varint,1020,opt,name=mobility_proactive_slot_change,json=mobilityProactiveSlotChange,proto3" json:"mobility_proactive_slot_change,omitempty"`
+	MobilityReactiveSlotChange         uint32  `protobuf:"varint,1021,opt,name=mobility_reactive_slot_change,json=mobilityReactiveSlotChange,proto3" json:"mobility_reactive_slot_change,omitempty"`
+	RfpTotalSynFailed                  uint32  `protobuf:"varint,1022,opt,name=rfp_total_syn_failed,json=rfpTotalSynFailed,proto3" json:"rfp_total_syn_failed,omitempty"`
+	NumOutOfSeq                        uint32  `protobuf:"varint,1023,opt,name=num_out_of_seq,json=numOutOfSeq,proto3" json:"num_out_of_seq,omitempty"`
+	NumUlmapDrop                       uint32  `protobuf:"varint,1024,opt,name=num_ulmap_drop,json=numUlmapDrop,proto3" json:"num_ulmap_drop,omitempty"`
+	CurrentSecondsOfSchedule           float32 `protobuf:"fixed32,1025,opt,name=current_seconds_of_schedule,json=currentSecondsOfSchedule,proto3" json:"current_seconds_of_schedule,omitempty"`
+	SendLabelSwitchToGroundFailedCalls uint32  `protobuf:"varint,1026,opt,name=send_label_switch_to_ground_failed_calls,json=sendLabelSwitchToGroundFailedCalls,proto3" json:"send_label_switch_to_ground_failed_calls,omitempty"`
+	EmaVelocityX                       float64 `protobuf:"fixed64,1027,opt,name=ema_velocity_x,json=emaVelocityX,proto3" json:"ema_velocity_x,omitempty"`
+	EmaVelocityY                       float64 `protobuf:"fixed64,1028,opt,name=ema_velocity_y,json=emaVelocityY,proto3" json:"ema_velocity_y,omitempty"`
+	EmaVelocityZ                       float64 `protobuf:"fixed64,1029,opt,name=ema_velocity_z,json=emaVelocityZ,proto3" json:"ema_velocity_z,omitempty"`
+	CeRssiDb                           float32 `protobuf:"fixed32,1030,opt,name=ce_rssi_db,json=ceRssiDb,proto3" json:"ce_rssi_db,omitempty"`
 }
 
+func (x *TransceiverGetTelemetryResponse) Reset() {
+	*x = TransceiverGetTelemetryResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_transceiver_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TransceiverGetTelemetryResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TransceiverGetTelemetryResponse) ProtoMessage() {}
+
+func (x *TransceiverGetTelemetryResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_transceiver_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TransceiverGetTelemetryResponse.ProtoReflect.Descriptor instead.
+func (*TransceiverGetTelemetryResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_transceiver_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *TransceiverGetTelemetryResponse) GetAntennaPointingMode() uint32 {
+	if x != nil {
+		return x.AntennaPointingMode
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetAntennaPitch() float32 {
+	if x != nil {
+		return x.AntennaPitch
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetAntennaRoll() float32 {
+	if x != nil {
+		return x.AntennaRoll
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetAntennaRxTheta() float32 {
+	if x != nil {
+		return x.AntennaRxTheta
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetAntennaTrueHeading() float32 {
+	if x != nil {
+		return x.AntennaTrueHeading
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetRxChannel() uint32 {
+	if x != nil {
+		return x.RxChannel
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetCurrentCellId() uint32 {
+	if x != nil {
+		return x.CurrentCellId
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetSecondsUntilSlotEnd() float32 {
+	if x != nil {
+		return x.SecondsUntilSlotEnd
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetWbRssiPeakMagDb() float32 {
+	if x != nil {
+		return x.WbRssiPeakMagDb
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetPopPingDropRate() float32 {
+	if x != nil {
+		return x.PopPingDropRate
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetSnrDb() float32 {
+	if x != nil {
+		return x.SnrDb
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetL1SnrAvgDb() float32 {
+	if x != nil {
+		return x.L1SnrAvgDb
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetL1SnrMinDb() float32 {
+	if x != nil {
+		return x.L1SnrMinDb
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetL1SnrMaxDb() float32 {
+	if x != nil {
+		return x.L1SnrMaxDb
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetLmacSatelliteId() uint32 {
+	if x != nil {
+		return x.LmacSatelliteId
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetTargetSatelliteId() uint32 {
+	if x != nil {
+		return x.TargetSatelliteId
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetGrantMcs() uint32 {
+	if x != nil {
+		return x.GrantMcs
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetGrantSymbolsAvg() float32 {
+	if x != nil {
+		return x.GrantSymbolsAvg
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetDedGrant() uint32 {
+	if x != nil {
+		return x.DedGrant
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetMobilityProactiveSlotChange() uint32 {
+	if x != nil {
+		return x.MobilityProactiveSlotChange
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetMobilityReactiveSlotChange() uint32 {
+	if x != nil {
+		return x.MobilityReactiveSlotChange
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetRfpTotalSynFailed() uint32 {
+	if x != nil {
+		return x.RfpTotalSynFailed
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetNumOutOfSeq() uint32 {
+	if x != nil {
+		return x.NumOutOfSeq
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetNumUlmapDrop() uint32 {
+	if x != nil {
+		return x.NumUlmapDrop
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetCurrentSecondsOfSchedule() float32 {
+	if x != nil {
+		return x.CurrentSecondsOfSchedule
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetSendLabelSwitchToGroundFailedCalls() uint32 {
+	if x != nil {
+		return x.SendLabelSwitchToGroundFailedCalls
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetEmaVelocityX() float64 {
+	if x != nil {
+		return x.EmaVelocityX
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetEmaVelocityY() float64 {
+	if x != nil {
+		return x.EmaVelocityY
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetEmaVelocityZ() float64 {
+	if x != nil {
+		return x.EmaVelocityZ
+	}
+	return 0
+}
+
+func (x *TransceiverGetTelemetryResponse) GetCeRssiDb() float32 {
+	if x != nil {
+		return x.CeRssiDb
+	}
+	return 0
+}
+
 var File_spacex_api_device_transceiver_proto protoreflect.FileDescriptor
 
 var file_spacex_api_device_transceiver_proto_rawDesc = []byte{
@@ -576,25 +893,113 @@ var file_spacex_api_device_transceiver_proto_rawDesc =
 	0x72, 0x54, 0x65, 0x6d, 0x70, 0x50, 0x63, 0x62, 0x61, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x28,
 	0x0a, 0x10, 0x64, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x75,
 	0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x63, 0x56, 0x6f, 0x6c, 0x74,
-	0x61, 0x67, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x2a, 0x5e, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e,
-	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72,
-	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x53, 0x54, 0x41, 0x54,
-	0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4d,
-	0x4f, 0x44, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10,
-	0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x44, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x49,
-	0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x4d, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e,
-	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x78, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65,
-	0x12, 0x10, 0x0a, 0x0c, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
-	0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c,
-	0x45, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x44, 0x49, 0x53,
-	0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x53, 0x0a, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
-	0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x42, 0x6c,
-	0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x54,
-	0x42, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54,
-	0x42, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54,
-	0x42, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x42, 0x17, 0x5a, 0x15,
-	0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x61, 0x67, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x54, 0x72, 0x61, 0x6e,
+	0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd9, 0x0a, 0x0a, 0x1f, 0x54,
+	0x72, 0x61, 0x6e, 0x73, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33,
+	0x0a, 0x15, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69,
+	0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13,
+	0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x4d,
+	0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x70,
+	0x69, 0x74, 0x63, 0x68, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x61, 0x6e, 0x74,
+	0x65, 0x6e, 0x6e, 0x61, 0x50, 0x69, 0x74, 0x63, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6e, 0x74,
+	0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x0b, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x12, 0x29, 0x0a,
+	0x10, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x68, 0x65, 0x74,
+	0x61, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e,
+	0x61, 0x52, 0x78, 0x54, 0x68, 0x65, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x14, 0x61, 0x6e, 0x74, 0x65,
+	0x6e, 0x6e, 0x61, 0x5f, 0x74, 0x72, 0x75, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67,
+	0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61,
+	0x54, 0x72, 0x75, 0x65, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x72,
+	0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x09, 0x72, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x63,
+	0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0xef,
+	0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x65,
+	0x6c, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f,
+	0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0xf0,
+	0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x55, 0x6e,
+	0x74, 0x69, 0x6c, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x77, 0x62,
+	0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f, 0x70, 0x65, 0x61, 0x6b, 0x5f, 0x6d, 0x61, 0x67, 0x5f, 0x64,
+	0x62, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x77, 0x62, 0x52, 0x73, 0x73, 0x69,
+	0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x67, 0x44, 0x62, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x70,
+	0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18,
+	0xf2, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x44,
+	0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6e, 0x72, 0x5f, 0x64,
+	0x62, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x6e, 0x72, 0x44, 0x62, 0x12,
+	0x22, 0x0a, 0x0d, 0x6c, 0x31, 0x5f, 0x73, 0x6e, 0x72, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x64, 0x62,
+	0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6c, 0x31, 0x53, 0x6e, 0x72, 0x41, 0x76,
+	0x67, 0x44, 0x62, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x31, 0x5f, 0x73, 0x6e, 0x72, 0x5f, 0x6d, 0x69,
+	0x6e, 0x5f, 0x64, 0x62, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6c, 0x31, 0x53,
+	0x6e, 0x72, 0x4d, 0x69, 0x6e, 0x44, 0x62, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x31, 0x5f, 0x73, 0x6e,
+	0x72, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x62, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x0a, 0x6c, 0x31, 0x53, 0x6e, 0x72, 0x4d, 0x61, 0x78, 0x44, 0x62, 0x12, 0x2b, 0x0a, 0x11, 0x6c,
+	0x6d, 0x61, 0x63, 0x5f, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64,
+	0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6c, 0x6d, 0x61, 0x63, 0x53, 0x61, 0x74,
+	0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x74, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0xf8, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x61,
+	0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61,
+	0x6e, 0x74, 0x5f, 0x6d, 0x63, 0x73, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x67,
+	0x72, 0x61, 0x6e, 0x74, 0x4d, 0x63, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x6e, 0x74,
+	0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xfa, 0x07, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
+	0x73, 0x41, 0x76, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x6e,
+	0x74, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x65, 0x64, 0x47, 0x72, 0x61,
+	0x6e, 0x74, 0x12, 0x44, 0x0a, 0x1e, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70,
+	0x72, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x6d, 0x6f, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6c,
+	0x6f, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x1d, 0x6d, 0x6f, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6c,
+	0x6f, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x1a, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14,
+	0x72, 0x66, 0x70, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x5f, 0x66, 0x61,
+	0x69, 0x6c, 0x65, 0x64, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x66, 0x70,
+	0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x24,
+	0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x71,
+	0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x4f, 0x75, 0x74, 0x4f,
+	0x66, 0x53, 0x65, 0x71, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6c, 0x6d, 0x61,
+	0x70, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e,
+	0x75, 0x6d, 0x55, 0x6c, 0x6d, 0x61, 0x70, 0x44, 0x72, 0x6f, 0x70, 0x12, 0x3e, 0x0a, 0x1b, 0x63,
+	0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6f,
+	0x66, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28,
+	0x02, 0x52, 0x18, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x4f, 0x66, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x55, 0x0a, 0x28, 0x73,
+	0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68,
+	0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65,
+	0x64, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x22,
+	0x73, 0x65, 0x6e, 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54,
+	0x6f, 0x47, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x61, 0x6c,
+	0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x6c, 0x6f, 0x63, 0x69,
+	0x74, 0x79, 0x5f, 0x78, 0x18, 0x83, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x65, 0x6d, 0x61,
+	0x56, 0x65, 0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x58, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61,
+	0x5f, 0x76, 0x65, 0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x79, 0x18, 0x84, 0x08, 0x20, 0x01,
+	0x28, 0x01, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x59,
+	0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79,
+	0x5f, 0x7a, 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x56, 0x65,
+	0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x5a, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, 0x5f, 0x72, 0x73,
+	0x73, 0x69, 0x5f, 0x64, 0x62, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x63, 0x65,
+	0x52, 0x73, 0x73, 0x69, 0x44, 0x62, 0x2a, 0x5e, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63,
+	0x65, 0x69, 0x76, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74,
+	0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f,
+	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44,
+	0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12,
+	0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x44, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41,
+	0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x4d, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63,
+	0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x78, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10,
+	0x0a, 0x0c, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
+	0x12, 0x10, 0x0a, 0x0c, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44,
+	0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x58, 0x52, 0x58, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42,
+	0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x53, 0x0a, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x65,
+	0x69, 0x76, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x61, 0x6e,
+	0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x42, 0x5f,
+	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x42, 0x5f,
+	0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x42, 0x5f,
+	0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -610,7 +1015,7 @@ func file_spacex_api_device_transceiver_proto_rawDescG
 }
 
 var file_spacex_api_device_transceiver_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_spacex_api_device_transceiver_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
+var file_spacex_api_device_transceiver_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
 var file_spacex_api_device_transceiver_proto_goTypes = []interface{}{
 	(TransceiverModulatorState)(0),            // 0: SpaceX.API.Device.TransceiverModulatorState
 	(TransceiverTxRxState)(0),                 // 1: SpaceX.API.Device.TransceiverTxRxState
@@ -620,21 +1025,23 @@ var file_spacex_api_device_transceiver_proto_goTypes =
 	(*TransceiverGetStatusRequest)(nil),       // 5: SpaceX.API.Device.TransceiverGetStatusRequest
 	(*TransceiverGetStatusResponse)(nil),      // 6: SpaceX.API.Device.TransceiverGetStatusResponse
 	(*TransceiverFaults)(nil),                 // 7: SpaceX.API.Device.TransceiverFaults
-	(DishState)(0),                            // 8: SpaceX.API.Device.DishState
+	(*TransceiverGetTelemetryRequest)(nil),    // 8: SpaceX.API.Device.TransceiverGetTelemetryRequest
+	(*TransceiverGetTelemetryResponse)(nil),   // 9: SpaceX.API.Device.TransceiverGetTelemetryResponse
+	(DishState)(0),                            // 10: SpaceX.API.Device.DishState
 }
 var file_spacex_api_device_transceiver_proto_depIdxs = []int32{
-	0, // 0: SpaceX.API.Device.TransceiverGetStatusResponse.mod_state:type_name -> SpaceX.API.Device.TransceiverModulatorState
-	0, // 1: SpaceX.API.Device.TransceiverGetStatusResponse.demod_state:type_name -> SpaceX.API.Device.TransceiverModulatorState
-	1, // 2: SpaceX.API.Device.TransceiverGetStatusResponse.tx_state:type_name -> SpaceX.API.Device.TransceiverTxRxState
-	1, // 3: SpaceX.API.Device.TransceiverGetStatusResponse.rx_state:type_name -> SpaceX.API.Device.TransceiverTxRxState
-	8, // 4: SpaceX.API.Device.TransceiverGetStatusResponse.state:type_name -> SpaceX.API.Device.DishState
-	7, // 5: SpaceX.API.Device.TransceiverGetStatusResponse.faults:type_name -> SpaceX.API.Device.TransceiverFaults
-	2, // 6: SpaceX.API.Device.TransceiverGetStatusResponse.transmit_blanking_state:type_name -> SpaceX.API.Device.TransceiverTransmitBlankingState
-	7, // [7:7] is the sub-list for method output_type
-	7, // [7:7] is the sub-list for method input_type
-	7, // [7:7] is the sub-list for extension type_name
-	7, // [7:7] is the sub-list for extension extendee
-	0, // [0:7] is the sub-list for field type_name
+	0,  // 0: SpaceX.API.Device.TransceiverGetStatusResponse.mod_state:type_name -> SpaceX.API.Device.TransceiverModulatorState
+	0,  // 1: SpaceX.API.Device.TransceiverGetStatusResponse.demod_state:type_name -> SpaceX.API.Device.TransceiverModulatorState
+	1,  // 2: SpaceX.API.Device.TransceiverGetStatusResponse.tx_state:type_name -> SpaceX.API.Device.TransceiverTxRxState
+	1,  // 3: SpaceX.API.Device.TransceiverGetStatusResponse.rx_state:type_name -> SpaceX.API.Device.TransceiverTxRxState
+	10, // 4: SpaceX.API.Device.TransceiverGetStatusResponse.state:type_name -> SpaceX.API.Device.DishState
+	7,  // 5: SpaceX.API.Device.TransceiverGetStatusResponse.faults:type_name -> SpaceX.API.Device.TransceiverFaults
+	2,  // 6: SpaceX.API.Device.TransceiverGetStatusResponse.transmit_blanking_state:type_name -> SpaceX.API.Device.TransceiverTransmitBlankingState
+	7,  // [7:7] is the sub-list for method output_type
+	7,  // [7:7] is the sub-list for method input_type
+	7,  // [7:7] is the sub-list for extension type_name
+	7,  // [7:7] is the sub-list for extension extendee
+	0,  // [0:7] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_transceiver_proto_init() }
@@ -705,6 +1112,30 @@ func file_spacex_api_device_transceiver_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_transceiver_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TransceiverGetTelemetryRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_transceiver_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TransceiverGetTelemetryResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -712,7 +1143,7 @@ func file_spacex_api_device_transceiver_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_transceiver_proto_rawDesc,
 			NumEnums:      3,
-			NumMessages:   5,
+			NumMessages:   7,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
blob - /dev/null
blob + c21311d26cc6627cd5275bef417e3abb966d041d (mode 644)
--- /dev/null
+++ device/dish_config.pb.go
@@ -0,0 +1,369 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.28.1
+// 	protoc        v3.21.6
+// source: spacex/api/device/dish_config.proto
+
+package device
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type DishConfig_SnowMeltMode int32
+
+const (
+	DishConfig_AUTO       DishConfig_SnowMeltMode = 0
+	DishConfig_ALWAYS_ON  DishConfig_SnowMeltMode = 1
+	DishConfig_ALWAYS_OFF DishConfig_SnowMeltMode = 2
+)
+
+// Enum value maps for DishConfig_SnowMeltMode.
+var (
+	DishConfig_SnowMeltMode_name = map[int32]string{
+		0: "AUTO",
+		1: "ALWAYS_ON",
+		2: "ALWAYS_OFF",
+	}
+	DishConfig_SnowMeltMode_value = map[string]int32{
+		"AUTO":       0,
+		"ALWAYS_ON":  1,
+		"ALWAYS_OFF": 2,
+	}
+)
+
+func (x DishConfig_SnowMeltMode) Enum() *DishConfig_SnowMeltMode {
+	p := new(DishConfig_SnowMeltMode)
+	*p = x
+	return p
+}
+
+func (x DishConfig_SnowMeltMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DishConfig_SnowMeltMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_config_proto_enumTypes[0].Descriptor()
+}
+
+func (DishConfig_SnowMeltMode) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_config_proto_enumTypes[0]
+}
+
+func (x DishConfig_SnowMeltMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DishConfig_SnowMeltMode.Descriptor instead.
+func (DishConfig_SnowMeltMode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_config_proto_rawDescGZIP(), []int{0, 0}
+}
+
+type DishConfig_LocationRequestMode int32
+
+const (
+	DishConfig_NONE  DishConfig_LocationRequestMode = 0
+	DishConfig_LOCAL DishConfig_LocationRequestMode = 1
+)
+
+// Enum value maps for DishConfig_LocationRequestMode.
+var (
+	DishConfig_LocationRequestMode_name = map[int32]string{
+		0: "NONE",
+		1: "LOCAL",
+	}
+	DishConfig_LocationRequestMode_value = map[string]int32{
+		"NONE":  0,
+		"LOCAL": 1,
+	}
+)
+
+func (x DishConfig_LocationRequestMode) Enum() *DishConfig_LocationRequestMode {
+	p := new(DishConfig_LocationRequestMode)
+	*p = x
+	return p
+}
+
+func (x DishConfig_LocationRequestMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DishConfig_LocationRequestMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_config_proto_enumTypes[1].Descriptor()
+}
+
+func (DishConfig_LocationRequestMode) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_config_proto_enumTypes[1]
+}
+
+func (x DishConfig_LocationRequestMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DishConfig_LocationRequestMode.Descriptor instead.
+func (DishConfig_LocationRequestMode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_config_proto_rawDescGZIP(), []int{0, 1}
+}
+
+type DishConfig_LevelDishMode int32
+
+const (
+	DishConfig_TILT_LIKE_NORMAL DishConfig_LevelDishMode = 0
+	DishConfig_FORCE_LEVEL      DishConfig_LevelDishMode = 1
+)
+
+// Enum value maps for DishConfig_LevelDishMode.
+var (
+	DishConfig_LevelDishMode_name = map[int32]string{
+		0: "TILT_LIKE_NORMAL",
+		1: "FORCE_LEVEL",
+	}
+	DishConfig_LevelDishMode_value = map[string]int32{
+		"TILT_LIKE_NORMAL": 0,
+		"FORCE_LEVEL":      1,
+	}
+)
+
+func (x DishConfig_LevelDishMode) Enum() *DishConfig_LevelDishMode {
+	p := new(DishConfig_LevelDishMode)
+	*p = x
+	return p
+}
+
+func (x DishConfig_LevelDishMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DishConfig_LevelDishMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_dish_config_proto_enumTypes[2].Descriptor()
+}
+
+func (DishConfig_LevelDishMode) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_dish_config_proto_enumTypes[2]
+}
+
+func (x DishConfig_LevelDishMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DishConfig_LevelDishMode.Descriptor instead.
+func (DishConfig_LevelDishMode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_config_proto_rawDescGZIP(), []int{0, 2}
+}
+
+type DishConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SnowMeltMode             DishConfig_SnowMeltMode        `protobuf:"varint,1,opt,name=snow_melt_mode,json=snowMeltMode,proto3,enum=SpaceX.API.Device.DishConfig_SnowMeltMode" json:"snow_melt_mode,omitempty"`
+	ApplySnowMeltMode        bool                           `protobuf:"varint,1001,opt,name=apply_snow_melt_mode,json=applySnowMeltMode,proto3" json:"apply_snow_melt_mode,omitempty"`
+	LocationRequestMode      DishConfig_LocationRequestMode `protobuf:"varint,2,opt,name=location_request_mode,json=locationRequestMode,proto3,enum=SpaceX.API.Device.DishConfig_LocationRequestMode" json:"location_request_mode,omitempty"`
+	ApplyLocationRequestMode bool                           `protobuf:"varint,2001,opt,name=apply_location_request_mode,json=applyLocationRequestMode,proto3" json:"apply_location_request_mode,omitempty"`
+	LevelDishMode            DishConfig_LevelDishMode       `protobuf:"varint,3,opt,name=level_dish_mode,json=levelDishMode,proto3,enum=SpaceX.API.Device.DishConfig_LevelDishMode" json:"level_dish_mode,omitempty"`
+	ApplyLevelDishMode       bool                           `protobuf:"varint,3001,opt,name=apply_level_dish_mode,json=applyLevelDishMode,proto3" json:"apply_level_dish_mode,omitempty"`
+}
+
+func (x *DishConfig) Reset() {
+	*x = DishConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_dish_config_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DishConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DishConfig) ProtoMessage() {}
+
+func (x *DishConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_dish_config_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DishConfig.ProtoReflect.Descriptor instead.
+func (*DishConfig) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_dish_config_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DishConfig) GetSnowMeltMode() DishConfig_SnowMeltMode {
+	if x != nil {
+		return x.SnowMeltMode
+	}
+	return DishConfig_AUTO
+}
+
+func (x *DishConfig) GetApplySnowMeltMode() bool {
+	if x != nil {
+		return x.ApplySnowMeltMode
+	}
+	return false
+}
+
+func (x *DishConfig) GetLocationRequestMode() DishConfig_LocationRequestMode {
+	if x != nil {
+		return x.LocationRequestMode
+	}
+	return DishConfig_NONE
+}
+
+func (x *DishConfig) GetApplyLocationRequestMode() bool {
+	if x != nil {
+		return x.ApplyLocationRequestMode
+	}
+	return false
+}
+
+func (x *DishConfig) GetLevelDishMode() DishConfig_LevelDishMode {
+	if x != nil {
+		return x.LevelDishMode
+	}
+	return DishConfig_TILT_LIKE_NORMAL
+}
+
+func (x *DishConfig) GetApplyLevelDishMode() bool {
+	if x != nil {
+		return x.ApplyLevelDishMode
+	}
+	return false
+}
+
+var File_spacex_api_device_dish_config_proto protoreflect.FileDescriptor
+
+var file_spacex_api_device_dish_config_proto_rawDesc = []byte{
+	0x0a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0xdd, 0x04, 0x0a, 0x0a, 0x44, 0x69, 0x73,
+	0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x6e, 0x6f, 0x77, 0x5f,
+	0x6d, 0x65, 0x6c, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53,
+	0x6e, 0x6f, 0x77, 0x4d, 0x65, 0x6c, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x73, 0x6e, 0x6f,
+	0x77, 0x4d, 0x65, 0x6c, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x5f, 0x73, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x6c, 0x74, 0x5f, 0x6d, 0x6f, 0x64,
+	0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53,
+	0x6e, 0x6f, 0x77, 0x4d, 0x65, 0x6c, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
+	0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44,
+	0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x13, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x6f,
+	0x64, 0x65, 0x12, 0x3e, 0x0a, 0x1b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64,
+	0x65, 0x18, 0xd1, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x6f,
+	0x64, 0x65, 0x12, 0x53, 0x0a, 0x0f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x68,
+	0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x44, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+	0x44, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x44,
+	0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
+	0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x65,
+	0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x37, 0x0a, 0x0c, 0x53,
+	0x6e, 0x6f, 0x77, 0x4d, 0x65, 0x6c, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x41,
+	0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53, 0x5f,
+	0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53, 0x5f, 0x4f,
+	0x46, 0x46, 0x10, 0x02, 0x22, 0x2a, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e,
+	0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x01,
+	0x22, 0x36, 0x0a, 0x0d, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64,
+	0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x49, 0x4c, 0x54, 0x5f, 0x4c, 0x49, 0x4b, 0x45, 0x5f, 0x4e,
+	0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x43, 0x45,
+	0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0x01, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_spacex_api_device_dish_config_proto_rawDescOnce sync.Once
+	file_spacex_api_device_dish_config_proto_rawDescData = file_spacex_api_device_dish_config_proto_rawDesc
+)
+
+func file_spacex_api_device_dish_config_proto_rawDescGZIP() []byte {
+	file_spacex_api_device_dish_config_proto_rawDescOnce.Do(func() {
+		file_spacex_api_device_dish_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_spacex_api_device_dish_config_proto_rawDescData)
+	})
+	return file_spacex_api_device_dish_config_proto_rawDescData
+}
+
+var file_spacex_api_device_dish_config_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_spacex_api_device_dish_config_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_spacex_api_device_dish_config_proto_goTypes = []interface{}{
+	(DishConfig_SnowMeltMode)(0),        // 0: SpaceX.API.Device.DishConfig.SnowMeltMode
+	(DishConfig_LocationRequestMode)(0), // 1: SpaceX.API.Device.DishConfig.LocationRequestMode
+	(DishConfig_LevelDishMode)(0),       // 2: SpaceX.API.Device.DishConfig.LevelDishMode
+	(*DishConfig)(nil),                  // 3: SpaceX.API.Device.DishConfig
+}
+var file_spacex_api_device_dish_config_proto_depIdxs = []int32{
+	0, // 0: SpaceX.API.Device.DishConfig.snow_melt_mode:type_name -> SpaceX.API.Device.DishConfig.SnowMeltMode
+	1, // 1: SpaceX.API.Device.DishConfig.location_request_mode:type_name -> SpaceX.API.Device.DishConfig.LocationRequestMode
+	2, // 2: SpaceX.API.Device.DishConfig.level_dish_mode:type_name -> SpaceX.API.Device.DishConfig.LevelDishMode
+	3, // [3:3] is the sub-list for method output_type
+	3, // [3:3] is the sub-list for method input_type
+	3, // [3:3] is the sub-list for extension type_name
+	3, // [3:3] is the sub-list for extension extendee
+	0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_spacex_api_device_dish_config_proto_init() }
+func file_spacex_api_device_dish_config_proto_init() {
+	if File_spacex_api_device_dish_config_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_spacex_api_device_dish_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DishConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_spacex_api_device_dish_config_proto_rawDesc,
+			NumEnums:      3,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_spacex_api_device_dish_config_proto_goTypes,
+		DependencyIndexes: file_spacex_api_device_dish_config_proto_depIdxs,
+		EnumInfos:         file_spacex_api_device_dish_config_proto_enumTypes,
+		MessageInfos:      file_spacex_api_device_dish_config_proto_msgTypes,
+	}.Build()
+	File_spacex_api_device_dish_config_proto = out.File
+	file_spacex_api_device_dish_config_proto_rawDesc = nil
+	file_spacex_api_device_dish_config_proto_goTypes = nil
+	file_spacex_api_device_dish_config_proto_depIdxs = nil
+}
blob - c1bc22e5cc29d7bde4a7f59ab0af05015b5b844a
blob + 8e7ea5a08838c6ba1afc8dbe5a0496808a6e3d07
--- device/wifi.pb.go
+++ device/wifi.pb.go
@@ -9,6 +9,8 @@ package device
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
+	telemetron "olowe.co/dishy/telemetron"
 	reflect "reflect"
 	sync "sync"
 )
@@ -20,6 +22,58 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+type WifiGetClientHistoryResponse_WifiLimitedReason int32
+
+const (
+	WifiGetClientHistoryResponse_LIMIT_UNKNOWN         WifiGetClientHistoryResponse_WifiLimitedReason = 0
+	WifiGetClientHistoryResponse_LIMIT_NONE            WifiGetClientHistoryResponse_WifiLimitedReason = 1
+	WifiGetClientHistoryResponse_LIMIT_UNCLASSIFIED    WifiGetClientHistoryResponse_WifiLimitedReason = 2
+	WifiGetClientHistoryResponse_LIMIT_DROPPED_PACKETS WifiGetClientHistoryResponse_WifiLimitedReason = 3
+)
+
+// Enum value maps for WifiGetClientHistoryResponse_WifiLimitedReason.
+var (
+	WifiGetClientHistoryResponse_WifiLimitedReason_name = map[int32]string{
+		0: "LIMIT_UNKNOWN",
+		1: "LIMIT_NONE",
+		2: "LIMIT_UNCLASSIFIED",
+		3: "LIMIT_DROPPED_PACKETS",
+	}
+	WifiGetClientHistoryResponse_WifiLimitedReason_value = map[string]int32{
+		"LIMIT_UNKNOWN":         0,
+		"LIMIT_NONE":            1,
+		"LIMIT_UNCLASSIFIED":    2,
+		"LIMIT_DROPPED_PACKETS": 3,
+	}
+)
+
+func (x WifiGetClientHistoryResponse_WifiLimitedReason) Enum() *WifiGetClientHistoryResponse_WifiLimitedReason {
+	p := new(WifiGetClientHistoryResponse_WifiLimitedReason)
+	*p = x
+	return p
+}
+
+func (x WifiGetClientHistoryResponse_WifiLimitedReason) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiGetClientHistoryResponse_WifiLimitedReason) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_proto_enumTypes[0].Descriptor()
+}
+
+func (WifiGetClientHistoryResponse_WifiLimitedReason) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_proto_enumTypes[0]
+}
+
+func (x WifiGetClientHistoryResponse_WifiLimitedReason) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiGetClientHistoryResponse_WifiLimitedReason.Descriptor instead.
+func (WifiGetClientHistoryResponse_WifiLimitedReason) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{15, 0}
+}
+
 type WifiClient_Interface int32
 
 const (
@@ -56,11 +110,11 @@ func (x WifiClient_Interface) String() string {
 }
 
 func (WifiClient_Interface) Descriptor() protoreflect.EnumDescriptor {
-	return file_spacex_api_device_wifi_proto_enumTypes[0].Descriptor()
+	return file_spacex_api_device_wifi_proto_enumTypes[1].Descriptor()
 }
 
 func (WifiClient_Interface) Type() protoreflect.EnumType {
-	return &file_spacex_api_device_wifi_proto_enumTypes[0]
+	return &file_spacex_api_device_wifi_proto_enumTypes[1]
 }
 
 func (x WifiClient_Interface) Number() protoreflect.EnumNumber {
@@ -69,19 +123,169 @@ func (x WifiClient_Interface) Number() protoreflect.En
 
 // Deprecated: Use WifiClient_Interface.Descriptor instead.
 func (WifiClient_Interface) EnumDescriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{6, 0}
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{18, 0}
 }
 
-type WifiSetConfigRequest struct {
+type WifiClient_Role int32
+
+const (
+	WifiClient_ROLE_UNKNOWN WifiClient_Role = 0
+	WifiClient_CLIENT       WifiClient_Role = 1
+	WifiClient_REPEATER     WifiClient_Role = 2
+	WifiClient_CONTROLLER   WifiClient_Role = 3
+)
+
+// Enum value maps for WifiClient_Role.
+var (
+	WifiClient_Role_name = map[int32]string{
+		0: "ROLE_UNKNOWN",
+		1: "CLIENT",
+		2: "REPEATER",
+		3: "CONTROLLER",
+	}
+	WifiClient_Role_value = map[string]int32{
+		"ROLE_UNKNOWN": 0,
+		"CLIENT":       1,
+		"REPEATER":     2,
+		"CONTROLLER":   3,
+	}
+)
+
+func (x WifiClient_Role) Enum() *WifiClient_Role {
+	p := new(WifiClient_Role)
+	*p = x
+	return p
+}
+
+func (x WifiClient_Role) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiClient_Role) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_proto_enumTypes[2].Descriptor()
+}
+
+func (WifiClient_Role) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_proto_enumTypes[2]
+}
+
+func (x WifiClient_Role) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiClient_Role.Descriptor instead.
+func (WifiClient_Role) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{18, 1}
+}
+
+type WifiScanResults_Network_Source int32
+
+const (
+	WifiScanResults_Network_UNKNOWN     WifiScanResults_Network_Source = 0
+	WifiScanResults_Network_SCAN_2_4GHZ WifiScanResults_Network_Source = 1
+	WifiScanResults_Network_SCAN_5GHZ   WifiScanResults_Network_Source = 2
+)
+
+// Enum value maps for WifiScanResults_Network_Source.
+var (
+	WifiScanResults_Network_Source_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "SCAN_2_4GHZ",
+		2: "SCAN_5GHZ",
+	}
+	WifiScanResults_Network_Source_value = map[string]int32{
+		"UNKNOWN":     0,
+		"SCAN_2_4GHZ": 1,
+		"SCAN_5GHZ":   2,
+	}
+)
+
+func (x WifiScanResults_Network_Source) Enum() *WifiScanResults_Network_Source {
+	p := new(WifiScanResults_Network_Source)
+	*p = x
+	return p
+}
+
+func (x WifiScanResults_Network_Source) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiScanResults_Network_Source) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_proto_enumTypes[3].Descriptor()
+}
+
+func (WifiScanResults_Network_Source) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_proto_enumTypes[3]
+}
+
+func (x WifiScanResults_Network_Source) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiScanResults_Network_Source.Descriptor instead.
+func (WifiScanResults_Network_Source) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{33, 0, 0}
+}
+
+type WifiNetwork_Band int32
+
+const (
+	WifiNetwork_WIFI_UNKNOWN WifiNetwork_Band = 0
+	WifiNetwork_WIFI_2_4GHZ  WifiNetwork_Band = 1
+	WifiNetwork_WIFI_5GHZ    WifiNetwork_Band = 2
+)
+
+// Enum value maps for WifiNetwork_Band.
+var (
+	WifiNetwork_Band_name = map[int32]string{
+		0: "WIFI_UNKNOWN",
+		1: "WIFI_2_4GHZ",
+		2: "WIFI_5GHZ",
+	}
+	WifiNetwork_Band_value = map[string]int32{
+		"WIFI_UNKNOWN": 0,
+		"WIFI_2_4GHZ":  1,
+		"WIFI_5GHZ":    2,
+	}
+)
+
+func (x WifiNetwork_Band) Enum() *WifiNetwork_Band {
+	p := new(WifiNetwork_Band)
+	*p = x
+	return p
+}
+
+func (x WifiNetwork_Band) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiNetwork_Band) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_proto_enumTypes[4].Descriptor()
+}
+
+func (WifiNetwork_Band) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_proto_enumTypes[4]
+}
+
+func (x WifiNetwork_Band) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiNetwork_Band.Descriptor instead.
+func (WifiNetwork_Band) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{34, 0}
+}
+
+type WifiClients struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	WifiConfig *WifiConfig `protobuf:"bytes,1,opt,name=wifi_config,json=wifiConfig,proto3" json:"wifi_config,omitempty"`
+	Clients []*WifiClient `protobuf:"bytes,1,rep,name=clients,proto3" json:"clients,omitempty"`
 }
 
-func (x *WifiSetConfigRequest) Reset() {
-	*x = WifiSetConfigRequest{}
+func (x *WifiClients) Reset() {
+	*x = WifiClients{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -89,13 +293,13 @@ func (x *WifiSetConfigRequest) Reset() {
 	}
 }
 
-func (x *WifiSetConfigRequest) String() string {
+func (x *WifiClients) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiSetConfigRequest) ProtoMessage() {}
+func (*WifiClients) ProtoMessage() {}
 
-func (x *WifiSetConfigRequest) ProtoReflect() protoreflect.Message {
+func (x *WifiClients) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -107,26 +311,32 @@ func (x *WifiSetConfigRequest) ProtoReflect() protoref
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiSetConfigRequest.ProtoReflect.Descriptor instead.
-func (*WifiSetConfigRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use WifiClients.ProtoReflect.Descriptor instead.
+func (*WifiClients) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *WifiSetConfigRequest) GetWifiConfig() *WifiConfig {
+func (x *WifiClients) GetClients() []*WifiClient {
 	if x != nil {
-		return x.WifiConfig
+		return x.Clients
 	}
 	return nil
 }
 
-type WifiSetConfigResponse struct {
+type ToController struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Message:
+	//
+	//	*ToController_Clients
+	//	*ToController_MeshJoin
+	Message isToController_Message `protobuf_oneof:"message"`
 }
 
-func (x *WifiSetConfigResponse) Reset() {
-	*x = WifiSetConfigResponse{}
+func (x *ToController) Reset() {
+	*x = ToController{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -134,13 +344,13 @@ func (x *WifiSetConfigResponse) Reset() {
 	}
 }
 
-func (x *WifiSetConfigResponse) String() string {
+func (x *ToController) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiSetConfigResponse) ProtoMessage() {}
+func (*ToController) ProtoMessage() {}
 
-func (x *WifiSetConfigResponse) ProtoReflect() protoreflect.Message {
+func (x *ToController) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -152,19 +362,58 @@ func (x *WifiSetConfigResponse) ProtoReflect() protore
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiSetConfigResponse.ProtoReflect.Descriptor instead.
-func (*WifiSetConfigResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use ToController.ProtoReflect.Descriptor instead.
+func (*ToController) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{1}
 }
 
-type WifiGetClientsRequest struct {
+func (m *ToController) GetMessage() isToController_Message {
+	if m != nil {
+		return m.Message
+	}
+	return nil
+}
+
+func (x *ToController) GetClients() *WifiClients {
+	if x, ok := x.GetMessage().(*ToController_Clients); ok {
+		return x.Clients
+	}
+	return nil
+}
+
+func (x *ToController) GetMeshJoin() *WifiMeshJoin {
+	if x, ok := x.GetMessage().(*ToController_MeshJoin); ok {
+		return x.MeshJoin
+	}
+	return nil
+}
+
+type isToController_Message interface {
+	isToController_Message()
+}
+
+type ToController_Clients struct {
+	Clients *WifiClients `protobuf:"bytes,1,opt,name=clients,proto3,oneof"`
+}
+
+type ToController_MeshJoin struct {
+	MeshJoin *WifiMeshJoin `protobuf:"bytes,2,opt,name=mesh_join,json=meshJoin,proto3,oneof"`
+}
+
+func (*ToController_Clients) isToController_Message() {}
+
+func (*ToController_MeshJoin) isToController_Message() {}
+
+type WifiMeshJoin struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	Incarnation uint64 `protobuf:"varint,1,opt,name=incarnation,proto3" json:"incarnation,omitempty"`
 }
 
-func (x *WifiGetClientsRequest) Reset() {
-	*x = WifiGetClientsRequest{}
+func (x *WifiMeshJoin) Reset() {
+	*x = WifiMeshJoin{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -172,13 +421,13 @@ func (x *WifiGetClientsRequest) Reset() {
 	}
 }
 
-func (x *WifiGetClientsRequest) String() string {
+func (x *WifiMeshJoin) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetClientsRequest) ProtoMessage() {}
+func (*WifiMeshJoin) ProtoMessage() {}
 
-func (x *WifiGetClientsRequest) ProtoReflect() protoreflect.Message {
+func (x *WifiMeshJoin) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -190,21 +439,31 @@ func (x *WifiGetClientsRequest) ProtoReflect() protore
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetClientsRequest.ProtoReflect.Descriptor instead.
-func (*WifiGetClientsRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use WifiMeshJoin.ProtoReflect.Descriptor instead.
+func (*WifiMeshJoin) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{2}
 }
 
-type WifiGetClientsResponse struct {
+func (x *WifiMeshJoin) GetIncarnation() uint64 {
+	if x != nil {
+		return x.Incarnation
+	}
+	return 0
+}
+
+type FromController struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Clients []*WifiClient `protobuf:"bytes,1,rep,name=clients,proto3" json:"clients,omitempty"`
+	// Types that are assignable to Message:
+	//
+	//	*FromController_WifiConfig
+	Message isFromController_Message `protobuf_oneof:"message"`
 }
 
-func (x *WifiGetClientsResponse) Reset() {
-	*x = WifiGetClientsResponse{}
+func (x *FromController) Reset() {
+	*x = FromController{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -212,13 +471,13 @@ func (x *WifiGetClientsResponse) Reset() {
 	}
 }
 
-func (x *WifiGetClientsResponse) String() string {
+func (x *FromController) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetClientsResponse) ProtoMessage() {}
+func (*FromController) ProtoMessage() {}
 
-func (x *WifiGetClientsResponse) ProtoReflect() protoreflect.Message {
+func (x *FromController) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -230,30 +489,45 @@ func (x *WifiGetClientsResponse) ProtoReflect() protor
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetClientsResponse.ProtoReflect.Descriptor instead.
-func (*WifiGetClientsResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use FromController.ProtoReflect.Descriptor instead.
+func (*FromController) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{3}
 }
 
-func (x *WifiGetClientsResponse) GetClients() []*WifiClient {
-	if x != nil {
-		return x.Clients
+func (m *FromController) GetMessage() isFromController_Message {
+	if m != nil {
+		return m.Message
 	}
 	return nil
 }
 
-type WifiGetHistoryResponse struct {
+func (x *FromController) GetWifiConfig() *WifiConfig {
+	if x, ok := x.GetMessage().(*FromController_WifiConfig); ok {
+		return x.WifiConfig
+	}
+	return nil
+}
+
+type isFromController_Message interface {
+	isFromController_Message()
+}
+
+type FromController_WifiConfig struct {
+	WifiConfig *WifiConfig `protobuf:"bytes,1,opt,name=wifi_config,json=wifiConfig,proto3,oneof"`
+}
+
+func (*FromController_WifiConfig) isFromController_Message() {}
+
+type WifiSetConfigRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Current       uint64    `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
-	PingDropRate  []float32 `protobuf:"fixed32,1001,rep,packed,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
-	PingLatencyMs []float32 `protobuf:"fixed32,1002,rep,packed,name=ping_latency_ms,json=pingLatencyMs,proto3" json:"ping_latency_ms,omitempty"`
+	WifiConfig *WifiConfig `protobuf:"bytes,1,opt,name=wifi_config,json=wifiConfig,proto3" json:"wifi_config,omitempty"`
 }
 
-func (x *WifiGetHistoryResponse) Reset() {
-	*x = WifiGetHistoryResponse{}
+func (x *WifiSetConfigRequest) Reset() {
+	*x = WifiSetConfigRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -261,13 +535,13 @@ func (x *WifiGetHistoryResponse) Reset() {
 	}
 }
 
-func (x *WifiGetHistoryResponse) String() string {
+func (x *WifiSetConfigRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetHistoryResponse) ProtoMessage() {}
+func (*WifiSetConfigRequest) ProtoMessage() {}
 
-func (x *WifiGetHistoryResponse) ProtoReflect() protoreflect.Message {
+func (x *WifiSetConfigRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -279,42 +553,28 @@ func (x *WifiGetHistoryResponse) ProtoReflect() protor
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetHistoryResponse.ProtoReflect.Descriptor instead.
-func (*WifiGetHistoryResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use WifiSetConfigRequest.ProtoReflect.Descriptor instead.
+func (*WifiSetConfigRequest) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{4}
 }
 
-func (x *WifiGetHistoryResponse) GetCurrent() uint64 {
+func (x *WifiSetConfigRequest) GetWifiConfig() *WifiConfig {
 	if x != nil {
-		return x.Current
+		return x.WifiConfig
 	}
-	return 0
-}
-
-func (x *WifiGetHistoryResponse) GetPingDropRate() []float32 {
-	if x != nil {
-		return x.PingDropRate
-	}
 	return nil
 }
 
-func (x *WifiGetHistoryResponse) GetPingLatencyMs() []float32 {
-	if x != nil {
-		return x.PingLatencyMs
-	}
-	return nil
-}
-
-type WifiNewClientConnectedEvent struct {
+type WifiSetConfigResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Client *WifiClient `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"`
+	UpdatedWifiConfig *WifiConfig `protobuf:"bytes,1,opt,name=updated_wifi_config,json=updatedWifiConfig,proto3" json:"updated_wifi_config,omitempty"`
 }
 
-func (x *WifiNewClientConnectedEvent) Reset() {
-	*x = WifiNewClientConnectedEvent{}
+func (x *WifiSetConfigResponse) Reset() {
+	*x = WifiSetConfigResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -322,13 +582,13 @@ func (x *WifiNewClientConnectedEvent) Reset() {
 	}
 }
 
-func (x *WifiNewClientConnectedEvent) String() string {
+func (x *WifiSetConfigResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiNewClientConnectedEvent) ProtoMessage() {}
+func (*WifiSetConfigResponse) ProtoMessage() {}
 
-func (x *WifiNewClientConnectedEvent) ProtoReflect() protoreflect.Message {
+func (x *WifiSetConfigResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -340,36 +600,26 @@ func (x *WifiNewClientConnectedEvent) ProtoReflect() p
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiNewClientConnectedEvent.ProtoReflect.Descriptor instead.
-func (*WifiNewClientConnectedEvent) Descriptor() ([]byte, []int) {
+// Deprecated: Use WifiSetConfigResponse.ProtoReflect.Descriptor instead.
+func (*WifiSetConfigResponse) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{5}
 }
 
-func (x *WifiNewClientConnectedEvent) GetClient() *WifiClient {
+func (x *WifiSetConfigResponse) GetUpdatedWifiConfig() *WifiConfig {
 	if x != nil {
-		return x.Client
+		return x.UpdatedWifiConfig
 	}
 	return nil
 }
 
-type WifiClient struct {
+type WifiGetConfigRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
-
-	Name            string               `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	MacAddress      string               `protobuf:"bytes,2,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"`
-	IpAddress       string               `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"`
-	SignalStrength  float32              `protobuf:"fixed32,4,opt,name=signal_strength,json=signalStrength,proto3" json:"signal_strength,omitempty"`
-	RxStats         *WifiClient_RxStats  `protobuf:"bytes,5,opt,name=rx_stats,json=rxStats,proto3" json:"rx_stats,omitempty"`
-	TxStats         *WifiClient_TxStats  `protobuf:"bytes,6,opt,name=tx_stats,json=txStats,proto3" json:"tx_stats,omitempty"`
-	AssociatedTimeS uint32               `protobuf:"varint,7,opt,name=associated_time_s,json=associatedTimeS,proto3" json:"associated_time_s,omitempty"`
-	ModeStr         string               `protobuf:"bytes,8,opt,name=mode_str,json=modeStr,proto3" json:"mode_str,omitempty"`
-	Iface           WifiClient_Interface `protobuf:"varint,9,opt,name=iface,proto3,enum=SpaceX.API.Device.WifiClient_Interface" json:"iface,omitempty"`
 }
 
-func (x *WifiClient) Reset() {
-	*x = WifiClient{}
+func (x *WifiGetConfigRequest) Reset() {
+	*x = WifiGetConfigRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_spacex_api_device_wifi_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -377,13 +627,13 @@ func (x *WifiClient) Reset() {
 	}
 }
 
-func (x *WifiClient) String() string {
+func (x *WifiGetConfigRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiClient) ProtoMessage() {}
+func (*WifiGetConfigRequest) ProtoMessage() {}
 
-func (x *WifiClient) ProtoReflect() protoreflect.Message {
+func (x *WifiGetConfigRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_spacex_api_device_wifi_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -395,101 +645,136 @@ func (x *WifiClient) ProtoReflect() protoreflect.Messa
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiClient.ProtoReflect.Descriptor instead.
-func (*WifiClient) Descriptor() ([]byte, []int) {
+// Deprecated: Use WifiGetConfigRequest.ProtoReflect.Descriptor instead.
+func (*WifiGetConfigRequest) Descriptor() ([]byte, []int) {
 	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{6}
 }
 
-func (x *WifiClient) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
+type WifiGetConfigResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (x *WifiClient) GetMacAddress() string {
-	if x != nil {
-		return x.MacAddress
-	}
-	return ""
+	WifiConfig *WifiConfig `protobuf:"bytes,1,opt,name=wifi_config,json=wifiConfig,proto3" json:"wifi_config,omitempty"`
 }
 
-func (x *WifiClient) GetIpAddress() string {
-	if x != nil {
-		return x.IpAddress
+func (x *WifiGetConfigResponse) Reset() {
+	*x = WifiGetConfigResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return ""
 }
 
-func (x *WifiClient) GetSignalStrength() float32 {
-	if x != nil {
-		return x.SignalStrength
-	}
-	return 0
+func (x *WifiGetConfigResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (x *WifiClient) GetRxStats() *WifiClient_RxStats {
-	if x != nil {
-		return x.RxStats
+func (*WifiGetConfigResponse) ProtoMessage() {}
+
+func (x *WifiGetConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return nil
+	return mi.MessageOf(x)
 }
 
-func (x *WifiClient) GetTxStats() *WifiClient_TxStats {
+// Deprecated: Use WifiGetConfigResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetConfigResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *WifiGetConfigResponse) GetWifiConfig() *WifiConfig {
 	if x != nil {
-		return x.TxStats
+		return x.WifiConfig
 	}
 	return nil
 }
 
-func (x *WifiClient) GetAssociatedTimeS() uint32 {
-	if x != nil {
-		return x.AssociatedTimeS
+type WifiSetMeshDeviceTrustRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DeviceId string   `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	Auth     MeshAuth `protobuf:"varint,2,opt,name=auth,proto3,enum=SpaceX.API.Device.MeshAuth" json:"auth,omitempty"`
+}
+
+func (x *WifiSetMeshDeviceTrustRequest) Reset() {
+	*x = WifiSetMeshDeviceTrustRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return 0
 }
 
-func (x *WifiClient) GetModeStr() string {
+func (x *WifiSetMeshDeviceTrustRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiSetMeshDeviceTrustRequest) ProtoMessage() {}
+
+func (x *WifiSetMeshDeviceTrustRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiSetMeshDeviceTrustRequest.ProtoReflect.Descriptor instead.
+func (*WifiSetMeshDeviceTrustRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *WifiSetMeshDeviceTrustRequest) GetDeviceId() string {
 	if x != nil {
-		return x.ModeStr
+		return x.DeviceId
 	}
 	return ""
 }
 
-func (x *WifiClient) GetIface() WifiClient_Interface {
+func (x *WifiSetMeshDeviceTrustRequest) GetAuth() MeshAuth {
 	if x != nil {
-		return x.Iface
+		return x.Auth
 	}
-	return WifiClient_UNKNOWN
+	return MeshAuth_MESH_AUTH_UNKNOWN
 }
 
-type WifiSetupRequest struct {
+type WifiSetMeshDeviceTrustResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
-
-	Skip            bool   `protobuf:"varint,1,opt,name=skip,proto3" json:"skip,omitempty"`
-	NetworkName     string `protobuf:"bytes,2,opt,name=network_name,json=networkName,proto3" json:"network_name,omitempty"`
-	NetworkPassword string `protobuf:"bytes,3,opt,name=network_password,json=networkPassword,proto3" json:"network_password,omitempty"`
 }
 
-func (x *WifiSetupRequest) Reset() {
-	*x = WifiSetupRequest{}
+func (x *WifiSetMeshDeviceTrustResponse) Reset() {
+	*x = WifiSetMeshDeviceTrustResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[7]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiSetupRequest) String() string {
+func (x *WifiSetMeshDeviceTrustResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiSetupRequest) ProtoMessage() {}
+func (*WifiSetMeshDeviceTrustResponse) ProtoMessage() {}
 
-func (x *WifiSetupRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[7]
+func (x *WifiSetMeshDeviceTrustResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -500,55 +785,89 @@ func (x *WifiSetupRequest) ProtoReflect() protoreflect
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiSetupRequest.ProtoReflect.Descriptor instead.
-func (*WifiSetupRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{7}
+// Deprecated: Use WifiSetMeshDeviceTrustResponse.ProtoReflect.Descriptor instead.
+func (*WifiSetMeshDeviceTrustResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{9}
 }
 
-func (x *WifiSetupRequest) GetSkip() bool {
-	if x != nil {
-		return x.Skip
+type WifiSetMeshConfigRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MeshConfig *MeshConfig `protobuf:"bytes,1,opt,name=mesh_config,json=meshConfig,proto3" json:"mesh_config,omitempty"`
+	DeviceId   string      `protobuf:"bytes,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+}
+
+func (x *WifiSetMeshConfigRequest) Reset() {
+	*x = WifiSetMeshConfigRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return false
 }
 
-func (x *WifiSetupRequest) GetNetworkName() string {
+func (x *WifiSetMeshConfigRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiSetMeshConfigRequest) ProtoMessage() {}
+
+func (x *WifiSetMeshConfigRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiSetMeshConfigRequest.ProtoReflect.Descriptor instead.
+func (*WifiSetMeshConfigRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *WifiSetMeshConfigRequest) GetMeshConfig() *MeshConfig {
 	if x != nil {
-		return x.NetworkName
+		return x.MeshConfig
 	}
-	return ""
+	return nil
 }
 
-func (x *WifiSetupRequest) GetNetworkPassword() string {
+func (x *WifiSetMeshConfigRequest) GetDeviceId() string {
 	if x != nil {
-		return x.NetworkPassword
+		return x.DeviceId
 	}
 	return ""
 }
 
-type WifiSetupResponse struct {
+type WifiSetMeshConfigResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 }
 
-func (x *WifiSetupResponse) Reset() {
-	*x = WifiSetupResponse{}
+func (x *WifiSetMeshConfigResponse) Reset() {
+	*x = WifiSetMeshConfigResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[8]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiSetupResponse) String() string {
+func (x *WifiSetMeshConfigResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiSetupResponse) ProtoMessage() {}
+func (*WifiSetMeshConfigResponse) ProtoMessage() {}
 
-func (x *WifiSetupResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[8]
+func (x *WifiSetMeshConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -559,45 +878,34 @@ func (x *WifiSetupResponse) ProtoReflect() protoreflec
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiSetupResponse.ProtoReflect.Descriptor instead.
-func (*WifiSetupResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{8}
+// Deprecated: Use WifiSetMeshConfigResponse.ProtoReflect.Descriptor instead.
+func (*WifiSetMeshConfigResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{11}
 }
 
-type WifiGetStatusResponse struct {
+type WifiGetClientsRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
-
-	DeviceInfo           *DeviceInfo  `protobuf:"bytes,3,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
-	DeviceState          *DeviceState `protobuf:"bytes,4,opt,name=device_state,json=deviceState,proto3" json:"device_state,omitempty"`
-	CaptivePortalEnabled bool         `protobuf:"varint,1,opt,name=captive_portal_enabled,json=captivePortalEnabled,proto3" json:"captive_portal_enabled,omitempty"`
-	// Deprecated: Do not use.
-	Clients        []*WifiClient `protobuf:"bytes,2,rep,name=clients,proto3" json:"clients,omitempty"`
-	SerialNumber   string        `protobuf:"bytes,1001,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
-	Sku            string        `protobuf:"bytes,1002,opt,name=sku,proto3" json:"sku,omitempty"`
-	Ipv4WanAddress string        `protobuf:"bytes,1003,opt,name=ipv4_wan_address,json=ipv4WanAddress,proto3" json:"ipv4_wan_address,omitempty"`
-	PingDropRate   float32       `protobuf:"fixed32,1004,opt,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
-	PingLatencyMs  float32       `protobuf:"fixed32,1005,opt,name=ping_latency_ms,json=pingLatencyMs,proto3" json:"ping_latency_ms,omitempty"`
 }
 
-func (x *WifiGetStatusResponse) Reset() {
-	*x = WifiGetStatusResponse{}
+func (x *WifiGetClientsRequest) Reset() {
+	*x = WifiGetClientsRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[9]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiGetStatusResponse) String() string {
+func (x *WifiGetClientsRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetStatusResponse) ProtoMessage() {}
+func (*WifiGetClientsRequest) ProtoMessage() {}
 
-func (x *WifiGetStatusResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[9]
+func (x *WifiGetClientsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -608,100 +916,99 @@ func (x *WifiGetStatusResponse) ProtoReflect() protore
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetStatusResponse.ProtoReflect.Descriptor instead.
-func (*WifiGetStatusResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{9}
+// Deprecated: Use WifiGetClientsRequest.ProtoReflect.Descriptor instead.
+func (*WifiGetClientsRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{12}
 }
 
-func (x *WifiGetStatusResponse) GetDeviceInfo() *DeviceInfo {
-	if x != nil {
-		return x.DeviceInfo
-	}
-	return nil
+type WifiGetClientsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Clients        []*WifiClient `protobuf:"bytes,1,rep,name=clients,proto3" json:"clients,omitempty"`
+	HasClientIndex bool          `protobuf:"varint,2,opt,name=has_client_index,json=hasClientIndex,proto3" json:"has_client_index,omitempty"`
+	ClientIndex    int32         `protobuf:"varint,3,opt,name=client_index,json=clientIndex,proto3" json:"client_index,omitempty"`
 }
 
-func (x *WifiGetStatusResponse) GetDeviceState() *DeviceState {
-	if x != nil {
-		return x.DeviceState
+func (x *WifiGetClientsResponse) Reset() {
+	*x = WifiGetClientsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-func (x *WifiGetStatusResponse) GetCaptivePortalEnabled() bool {
-	if x != nil {
-		return x.CaptivePortalEnabled
-	}
-	return false
+func (x *WifiGetClientsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-// Deprecated: Do not use.
-func (x *WifiGetStatusResponse) GetClients() []*WifiClient {
-	if x != nil {
-		return x.Clients
+func (*WifiGetClientsResponse) ProtoMessage() {}
+
+func (x *WifiGetClientsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return nil
+	return mi.MessageOf(x)
 }
 
-func (x *WifiGetStatusResponse) GetSerialNumber() string {
-	if x != nil {
-		return x.SerialNumber
-	}
-	return ""
+// Deprecated: Use WifiGetClientsResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetClientsResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{13}
 }
 
-func (x *WifiGetStatusResponse) GetSku() string {
+func (x *WifiGetClientsResponse) GetClients() []*WifiClient {
 	if x != nil {
-		return x.Sku
+		return x.Clients
 	}
-	return ""
+	return nil
 }
 
-func (x *WifiGetStatusResponse) GetIpv4WanAddress() string {
+func (x *WifiGetClientsResponse) GetHasClientIndex() bool {
 	if x != nil {
-		return x.Ipv4WanAddress
+		return x.HasClientIndex
 	}
-	return ""
+	return false
 }
 
-func (x *WifiGetStatusResponse) GetPingDropRate() float32 {
+func (x *WifiGetClientsResponse) GetClientIndex() int32 {
 	if x != nil {
-		return x.PingDropRate
+		return x.ClientIndex
 	}
 	return 0
 }
 
-func (x *WifiGetStatusResponse) GetPingLatencyMs() float32 {
-	if x != nil {
-		return x.PingLatencyMs
-	}
-	return 0
-}
-
-type WifiAuthenticateRequest struct {
+type WifiGetClientHistoryRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Challenge *SignedData `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"`
+	MacAddress string `protobuf:"bytes,1,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"`
 }
 
-func (x *WifiAuthenticateRequest) Reset() {
-	*x = WifiAuthenticateRequest{}
+func (x *WifiGetClientHistoryRequest) Reset() {
+	*x = WifiGetClientHistoryRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[10]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiAuthenticateRequest) String() string {
+func (x *WifiGetClientHistoryRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiAuthenticateRequest) ProtoMessage() {}
+func (*WifiGetClientHistoryRequest) ProtoMessage() {}
 
-func (x *WifiAuthenticateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[10]
+func (x *WifiGetClientHistoryRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -712,44 +1019,48 @@ func (x *WifiAuthenticateRequest) ProtoReflect() proto
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiAuthenticateRequest.ProtoReflect.Descriptor instead.
-func (*WifiAuthenticateRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{10}
+// Deprecated: Use WifiGetClientHistoryRequest.ProtoReflect.Descriptor instead.
+func (*WifiGetClientHistoryRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{14}
 }
 
-func (x *WifiAuthenticateRequest) GetChallenge() *SignedData {
+func (x *WifiGetClientHistoryRequest) GetMacAddress() string {
 	if x != nil {
-		return x.Challenge
+		return x.MacAddress
 	}
-	return nil
+	return ""
 }
 
-type WifiAuthenticateResponse struct {
+type WifiGetClientHistoryResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Wifi *ChallengeResponse `protobuf:"bytes,1,opt,name=wifi,proto3" json:"wifi,omitempty"`
-	Dish *ChallengeResponse `protobuf:"bytes,2,opt,name=dish,proto3" json:"dish,omitempty"`
+	Current           uint64                                           `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
+	TxThroughputMbps  []float32                                        `protobuf:"fixed32,2,rep,packed,name=tx_throughput_mbps,json=txThroughputMbps,proto3" json:"tx_throughput_mbps,omitempty"`
+	RxThroughputMbps  []float32                                        `protobuf:"fixed32,3,rep,packed,name=rx_throughput_mbps,json=rxThroughputMbps,proto3" json:"rx_throughput_mbps,omitempty"`
+	ThroughputLimited []WifiGetClientHistoryResponse_WifiLimitedReason `protobuf:"varint,4,rep,packed,name=throughput_limited,json=throughputLimited,proto3,enum=SpaceX.API.Device.WifiGetClientHistoryResponse_WifiLimitedReason" json:"throughput_limited,omitempty"`
+	RxRateMbps        []float32                                        `protobuf:"fixed32,5,rep,packed,name=rx_rate_mbps,json=rxRateMbps,proto3" json:"rx_rate_mbps,omitempty"`
+	Rssi              []byte                                           `protobuf:"bytes,6,opt,name=rssi,proto3" json:"rssi,omitempty"`
 }
 
-func (x *WifiAuthenticateResponse) Reset() {
-	*x = WifiAuthenticateResponse{}
+func (x *WifiGetClientHistoryResponse) Reset() {
+	*x = WifiGetClientHistoryResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[11]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiAuthenticateResponse) String() string {
+func (x *WifiGetClientHistoryResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiAuthenticateResponse) ProtoMessage() {}
+func (*WifiGetClientHistoryResponse) ProtoMessage() {}
 
-func (x *WifiAuthenticateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[11]
+func (x *WifiGetClientHistoryResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -760,110 +1071,80 @@ func (x *WifiAuthenticateResponse) ProtoReflect() prot
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiAuthenticateResponse.ProtoReflect.Descriptor instead.
-func (*WifiAuthenticateResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{11}
+// Deprecated: Use WifiGetClientHistoryResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetClientHistoryResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{15}
 }
 
-func (x *WifiAuthenticateResponse) GetWifi() *ChallengeResponse {
+func (x *WifiGetClientHistoryResponse) GetCurrent() uint64 {
 	if x != nil {
-		return x.Wifi
+		return x.Current
 	}
-	return nil
+	return 0
 }
 
-func (x *WifiAuthenticateResponse) GetDish() *ChallengeResponse {
+func (x *WifiGetClientHistoryResponse) GetTxThroughputMbps() []float32 {
 	if x != nil {
-		return x.Dish
+		return x.TxThroughputMbps
 	}
 	return nil
 }
 
-type WifiAccountBondingEvent struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	DishId string `protobuf:"bytes,1,opt,name=dish_id,json=dishId,proto3" json:"dish_id,omitempty"`
-}
-
-func (x *WifiAccountBondingEvent) Reset() {
-	*x = WifiAccountBondingEvent{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[12]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
+func (x *WifiGetClientHistoryResponse) GetRxThroughputMbps() []float32 {
+	if x != nil {
+		return x.RxThroughputMbps
 	}
+	return nil
 }
 
-func (x *WifiAccountBondingEvent) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*WifiAccountBondingEvent) ProtoMessage() {}
-
-func (x *WifiAccountBondingEvent) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[12]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
+func (x *WifiGetClientHistoryResponse) GetThroughputLimited() []WifiGetClientHistoryResponse_WifiLimitedReason {
+	if x != nil {
+		return x.ThroughputLimited
 	}
-	return mi.MessageOf(x)
+	return nil
 }
 
-// Deprecated: Use WifiAccountBondingEvent.ProtoReflect.Descriptor instead.
-func (*WifiAccountBondingEvent) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{12}
+func (x *WifiGetClientHistoryResponse) GetRxRateMbps() []float32 {
+	if x != nil {
+		return x.RxRateMbps
+	}
+	return nil
 }
 
-func (x *WifiAccountBondingEvent) GetDishId() string {
+func (x *WifiGetClientHistoryResponse) GetRssi() []byte {
 	if x != nil {
-		return x.DishId
+		return x.Rssi
 	}
-	return ""
+	return nil
 }
 
-type PingMetrics struct {
+type WifiGetHistoryResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	LatencyMeanMs             float32 `protobuf:"fixed32,1,opt,name=latency_mean_ms,json=latencyMeanMs,proto3" json:"latency_mean_ms,omitempty"`
-	LatencyStddevMs           float32 `protobuf:"fixed32,2,opt,name=latency_stddev_ms,json=latencyStddevMs,proto3" json:"latency_stddev_ms,omitempty"`
-	LatencyMeanMs_5M          float32 `protobuf:"fixed32,3,opt,name=latency_mean_ms_5m,json=latencyMeanMs5m,proto3" json:"latency_mean_ms_5m,omitempty"`
-	LatencyMeanMs_1H          float32 `protobuf:"fixed32,4,opt,name=latency_mean_ms_1h,json=latencyMeanMs1h,proto3" json:"latency_mean_ms_1h,omitempty"`
-	LatencyMeanMs_1D          float32 `protobuf:"fixed32,5,opt,name=latency_mean_ms_1d,json=latencyMeanMs1d,proto3" json:"latency_mean_ms_1d,omitempty"`
-	DropRate                  float32 `protobuf:"fixed32,6,opt,name=drop_rate,json=dropRate,proto3" json:"drop_rate,omitempty"`
-	DropRate_5M               float32 `protobuf:"fixed32,7,opt,name=drop_rate_5m,json=dropRate5m,proto3" json:"drop_rate_5m,omitempty"`
-	DropRate_1H               float32 `protobuf:"fixed32,8,opt,name=drop_rate_1h,json=dropRate1h,proto3" json:"drop_rate_1h,omitempty"`
-	DropRate_1D               float32 `protobuf:"fixed32,9,opt,name=drop_rate_1d,json=dropRate1d,proto3" json:"drop_rate_1d,omitempty"`
-	SecondsSinceLastSuccess   float32 `protobuf:"fixed32,10,opt,name=seconds_since_last_success,json=secondsSinceLastSuccess,proto3" json:"seconds_since_last_success,omitempty"`
-	SecondsSinceLast_1SOutage float32 `protobuf:"fixed32,11,opt,name=seconds_since_last_1s_outage,json=secondsSinceLast1sOutage,proto3" json:"seconds_since_last_1s_outage,omitempty"`
-	SecondsSinceLast_5SOutage float32 `protobuf:"fixed32,12,opt,name=seconds_since_last_5s_outage,json=secondsSinceLast5sOutage,proto3" json:"seconds_since_last_5s_outage,omitempty"`
-	HappyHours_1S_1D          float32 `protobuf:"fixed32,13,opt,name=happy_hours_1s_1d,json=happyHours1s1d,proto3" json:"happy_hours_1s_1d,omitempty"`
-	HappyHours_5S_1D          float32 `protobuf:"fixed32,14,opt,name=happy_hours_5s_1d,json=happyHours5s1d,proto3" json:"happy_hours_5s_1d,omitempty"`
+	Current       uint64    `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
+	PingDropRate  []float32 `protobuf:"fixed32,1001,rep,packed,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
+	PingLatencyMs []float32 `protobuf:"fixed32,1002,rep,packed,name=ping_latency_ms,json=pingLatencyMs,proto3" json:"ping_latency_ms,omitempty"`
 }
 
-func (x *PingMetrics) Reset() {
-	*x = PingMetrics{}
+func (x *WifiGetHistoryResponse) Reset() {
+	*x = WifiGetHistoryResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[13]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *PingMetrics) String() string {
+func (x *WifiGetHistoryResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*PingMetrics) ProtoMessage() {}
+func (*WifiGetHistoryResponse) ProtoMessage() {}
 
-func (x *PingMetrics) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[13]
+func (x *WifiGetHistoryResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -874,132 +1155,57 @@ func (x *PingMetrics) ProtoReflect() protoreflect.Mess
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use PingMetrics.ProtoReflect.Descriptor instead.
-func (*PingMetrics) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{13}
+// Deprecated: Use WifiGetHistoryResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetHistoryResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{16}
 }
 
-func (x *PingMetrics) GetLatencyMeanMs() float32 {
+func (x *WifiGetHistoryResponse) GetCurrent() uint64 {
 	if x != nil {
-		return x.LatencyMeanMs
+		return x.Current
 	}
 	return 0
 }
 
-func (x *PingMetrics) GetLatencyStddevMs() float32 {
+func (x *WifiGetHistoryResponse) GetPingDropRate() []float32 {
 	if x != nil {
-		return x.LatencyStddevMs
+		return x.PingDropRate
 	}
-	return 0
+	return nil
 }
 
-func (x *PingMetrics) GetLatencyMeanMs_5M() float32 {
+func (x *WifiGetHistoryResponse) GetPingLatencyMs() []float32 {
 	if x != nil {
-		return x.LatencyMeanMs_5M
+		return x.PingLatencyMs
 	}
-	return 0
+	return nil
 }
 
-func (x *PingMetrics) GetLatencyMeanMs_1H() float32 {
-	if x != nil {
-		return x.LatencyMeanMs_1H
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetLatencyMeanMs_1D() float32 {
-	if x != nil {
-		return x.LatencyMeanMs_1D
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetDropRate() float32 {
-	if x != nil {
-		return x.DropRate
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetDropRate_5M() float32 {
-	if x != nil {
-		return x.DropRate_5M
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetDropRate_1H() float32 {
-	if x != nil {
-		return x.DropRate_1H
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetDropRate_1D() float32 {
-	if x != nil {
-		return x.DropRate_1D
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetSecondsSinceLastSuccess() float32 {
-	if x != nil {
-		return x.SecondsSinceLastSuccess
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetSecondsSinceLast_1SOutage() float32 {
-	if x != nil {
-		return x.SecondsSinceLast_1SOutage
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetSecondsSinceLast_5SOutage() float32 {
-	if x != nil {
-		return x.SecondsSinceLast_5SOutage
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetHappyHours_1S_1D() float32 {
-	if x != nil {
-		return x.HappyHours_1S_1D
-	}
-	return 0
-}
-
-func (x *PingMetrics) GetHappyHours_5S_1D() float32 {
-	if x != nil {
-		return x.HappyHours_5S_1D
-	}
-	return 0
-}
-
-type WifiGetPingMetricsRequest struct {
+type WifiNewClientConnectedEvent struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	Client *WifiClient `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"`
 }
 
-func (x *WifiGetPingMetricsRequest) Reset() {
-	*x = WifiGetPingMetricsRequest{}
+func (x *WifiNewClientConnectedEvent) Reset() {
+	*x = WifiNewClientConnectedEvent{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[14]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiGetPingMetricsRequest) String() string {
+func (x *WifiNewClientConnectedEvent) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetPingMetricsRequest) ProtoMessage() {}
+func (*WifiNewClientConnectedEvent) ProtoMessage() {}
 
-func (x *WifiGetPingMetricsRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[14]
+func (x *WifiNewClientConnectedEvent) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1010,36 +1216,64 @@ func (x *WifiGetPingMetricsRequest) ProtoReflect() pro
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetPingMetricsRequest.ProtoReflect.Descriptor instead.
-func (*WifiGetPingMetricsRequest) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{14}
+// Deprecated: Use WifiNewClientConnectedEvent.ProtoReflect.Descriptor instead.
+func (*WifiNewClientConnectedEvent) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{17}
 }
 
-type WifiGetPingMetricsResponse struct {
+func (x *WifiNewClientConnectedEvent) GetClient() *WifiClient {
+	if x != nil {
+		return x.Client
+	}
+	return nil
+}
+
+type WifiClient struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Internet *PingMetrics `protobuf:"bytes,1,opt,name=internet,proto3" json:"internet,omitempty"`
+	Name               string               `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Domain             string               `protobuf:"bytes,22,opt,name=domain,proto3" json:"domain,omitempty"`
+	MacAddress         string               `protobuf:"bytes,2,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"`
+	IpAddress          string               `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"`
+	SignalStrength     float32              `protobuf:"fixed32,4,opt,name=signal_strength,json=signalStrength,proto3" json:"signal_strength,omitempty"`
+	ChannelWidth       uint32               `protobuf:"varint,12,opt,name=channel_width,json=channelWidth,proto3" json:"channel_width,omitempty"`
+	RxStats            *WifiClient_RxStats  `protobuf:"bytes,5,opt,name=rx_stats,json=rxStats,proto3" json:"rx_stats,omitempty"`
+	TxStats            *WifiClient_TxStats  `protobuf:"bytes,6,opt,name=tx_stats,json=txStats,proto3" json:"tx_stats,omitempty"`
+	AssociatedTimeS    uint32               `protobuf:"varint,7,opt,name=associated_time_s,json=associatedTimeS,proto3" json:"associated_time_s,omitempty"`
+	ModeStr            string               `protobuf:"bytes,8,opt,name=mode_str,json=modeStr,proto3" json:"mode_str,omitempty"`
+	Iface              WifiClient_Interface `protobuf:"varint,9,opt,name=iface,proto3,enum=SpaceX.API.Device.WifiClient_Interface" json:"iface,omitempty"`
+	Snr                float32              `protobuf:"fixed32,10,opt,name=snr,proto3" json:"snr,omitempty"`
+	Psmode             int32                `protobuf:"varint,11,opt,name=psmode,proto3" json:"psmode,omitempty"`
+	UpstreamMacAddress string               `protobuf:"bytes,13,opt,name=upstream_mac_address,json=upstreamMacAddress,proto3" json:"upstream_mac_address,omitempty"`
+	Role               WifiClient_Role      `protobuf:"varint,14,opt,name=role,proto3,enum=SpaceX.API.Device.WifiClient_Role" json:"role,omitempty"`
+	DeviceId           string               `protobuf:"bytes,15,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	SwqChecks          uint32               `protobuf:"varint,16,opt,name=swq_checks,json=swqChecks,proto3" json:"swq_checks,omitempty"`
+	SwqChecksNonEmpty  uint32               `protobuf:"varint,17,opt,name=swq_checks_non_empty,json=swqChecksNonEmpty,proto3" json:"swq_checks_non_empty,omitempty"`
+	MibSteerState      uint32               `protobuf:"varint,18,opt,name=mib_steer_state,json=mibSteerState,proto3" json:"mib_steer_state,omitempty"`
+	MibSteerMethod     uint32               `protobuf:"varint,19,opt,name=mib_steer_method,json=mibSteerMethod,proto3" json:"mib_steer_method,omitempty"`
+	BtmRequests        uint32               `protobuf:"varint,20,opt,name=btm_requests,json=btmRequests,proto3" json:"btm_requests,omitempty"`
+	BtmRequestsSuccess uint32               `protobuf:"varint,21,opt,name=btm_requests_success,json=btmRequestsSuccess,proto3" json:"btm_requests_success,omitempty"`
 }
 
-func (x *WifiGetPingMetricsResponse) Reset() {
-	*x = WifiGetPingMetricsResponse{}
+func (x *WifiClient) Reset() {
+	*x = WifiClient{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[15]
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *WifiGetPingMetricsResponse) String() string {
+func (x *WifiClient) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WifiGetPingMetricsResponse) ProtoMessage() {}
+func (*WifiClient) ProtoMessage() {}
 
-func (x *WifiGetPingMetricsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[15]
+func (x *WifiClient) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1050,310 +1284,6170 @@ func (x *WifiGetPingMetricsResponse) ProtoReflect() pr
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WifiGetPingMetricsResponse.ProtoReflect.Descriptor instead.
-func (*WifiGetPingMetricsResponse) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{15}
+// Deprecated: Use WifiClient.ProtoReflect.Descriptor instead.
+func (*WifiClient) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{18}
 }
 
-func (x *WifiGetPingMetricsResponse) GetInternet() *PingMetrics {
+func (x *WifiClient) GetName() string {
 	if x != nil {
-		return x.Internet
+		return x.Name
 	}
-	return nil
+	return ""
 }
 
-type WifiClient_RxStats struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Bytes       uint64 `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
-	CountErrors uint64 `protobuf:"varint,2,opt,name=count_errors,json=countErrors,proto3" json:"count_errors,omitempty"`
-}
-
-func (x *WifiClient_RxStats) Reset() {
-	*x = WifiClient_RxStats{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[16]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *WifiClient_RxStats) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*WifiClient_RxStats) ProtoMessage() {}
-
-func (x *WifiClient_RxStats) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[16]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use WifiClient_RxStats.ProtoReflect.Descriptor instead.
-func (*WifiClient_RxStats) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{6, 0}
-}
-
-func (x *WifiClient_RxStats) GetBytes() uint64 {
-	if x != nil {
-		return x.Bytes
-	}
-	return 0
-}
-
-func (x *WifiClient_RxStats) GetCountErrors() uint64 {
-	if x != nil {
-		return x.CountErrors
-	}
-	return 0
+func (x *WifiClient) GetDomain() string {
+	if x != nil {
+		return x.Domain
+	}
+	return ""
+}
+
+func (x *WifiClient) GetMacAddress() string {
+	if x != nil {
+		return x.MacAddress
+	}
+	return ""
+}
+
+func (x *WifiClient) GetIpAddress() string {
+	if x != nil {
+		return x.IpAddress
+	}
+	return ""
+}
+
+func (x *WifiClient) GetSignalStrength() float32 {
+	if x != nil {
+		return x.SignalStrength
+	}
+	return 0
+}
+
+func (x *WifiClient) GetChannelWidth() uint32 {
+	if x != nil {
+		return x.ChannelWidth
+	}
+	return 0
+}
+
+func (x *WifiClient) GetRxStats() *WifiClient_RxStats {
+	if x != nil {
+		return x.RxStats
+	}
+	return nil
+}
+
+func (x *WifiClient) GetTxStats() *WifiClient_TxStats {
+	if x != nil {
+		return x.TxStats
+	}
+	return nil
+}
+
+func (x *WifiClient) GetAssociatedTimeS() uint32 {
+	if x != nil {
+		return x.AssociatedTimeS
+	}
+	return 0
+}
+
+func (x *WifiClient) GetModeStr() string {
+	if x != nil {
+		return x.ModeStr
+	}
+	return ""
+}
+
+func (x *WifiClient) GetIface() WifiClient_Interface {
+	if x != nil {
+		return x.Iface
+	}
+	return WifiClient_UNKNOWN
+}
+
+func (x *WifiClient) GetSnr() float32 {
+	if x != nil {
+		return x.Snr
+	}
+	return 0
+}
+
+func (x *WifiClient) GetPsmode() int32 {
+	if x != nil {
+		return x.Psmode
+	}
+	return 0
+}
+
+func (x *WifiClient) GetUpstreamMacAddress() string {
+	if x != nil {
+		return x.UpstreamMacAddress
+	}
+	return ""
+}
+
+func (x *WifiClient) GetRole() WifiClient_Role {
+	if x != nil {
+		return x.Role
+	}
+	return WifiClient_ROLE_UNKNOWN
+}
+
+func (x *WifiClient) GetDeviceId() string {
+	if x != nil {
+		return x.DeviceId
+	}
+	return ""
+}
+
+func (x *WifiClient) GetSwqChecks() uint32 {
+	if x != nil {
+		return x.SwqChecks
+	}
+	return 0
+}
+
+func (x *WifiClient) GetSwqChecksNonEmpty() uint32 {
+	if x != nil {
+		return x.SwqChecksNonEmpty
+	}
+	return 0
+}
+
+func (x *WifiClient) GetMibSteerState() uint32 {
+	if x != nil {
+		return x.MibSteerState
+	}
+	return 0
+}
+
+func (x *WifiClient) GetMibSteerMethod() uint32 {
+	if x != nil {
+		return x.MibSteerMethod
+	}
+	return 0
+}
+
+func (x *WifiClient) GetBtmRequests() uint32 {
+	if x != nil {
+		return x.BtmRequests
+	}
+	return 0
+}
+
+func (x *WifiClient) GetBtmRequestsSuccess() uint32 {
+	if x != nil {
+		return x.BtmRequestsSuccess
+	}
+	return 0
+}
+
+type WifiSetupRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Skip            bool   `protobuf:"varint,1,opt,name=skip,proto3" json:"skip,omitempty"`
+	NetworkName     string `protobuf:"bytes,2,opt,name=network_name,json=networkName,proto3" json:"network_name,omitempty"`
+	NetworkPassword string `protobuf:"bytes,3,opt,name=network_password,json=networkPassword,proto3" json:"network_password,omitempty"`
+}
+
+func (x *WifiSetupRequest) Reset() {
+	*x = WifiSetupRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiSetupRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiSetupRequest) ProtoMessage() {}
+
+func (x *WifiSetupRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiSetupRequest.ProtoReflect.Descriptor instead.
+func (*WifiSetupRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *WifiSetupRequest) GetSkip() bool {
+	if x != nil {
+		return x.Skip
+	}
+	return false
+}
+
+func (x *WifiSetupRequest) GetNetworkName() string {
+	if x != nil {
+		return x.NetworkName
+	}
+	return ""
+}
+
+func (x *WifiSetupRequest) GetNetworkPassword() string {
+	if x != nil {
+		return x.NetworkPassword
+	}
+	return ""
+}
+
+type WifiSetupResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *WifiSetupResponse) Reset() {
+	*x = WifiSetupResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiSetupResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiSetupResponse) ProtoMessage() {}
+
+func (x *WifiSetupResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiSetupResponse.ProtoReflect.Descriptor instead.
+func (*WifiSetupResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{20}
+}
+
+type WifiBandStatus struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ChanBusyTimeFraction float32 `protobuf:"fixed32,1,opt,name=chan_busy_time_fraction,json=chanBusyTimeFraction,proto3" json:"chan_busy_time_fraction,omitempty"`
+	TxAirTimeFraction    float32 `protobuf:"fixed32,2,opt,name=tx_air_time_fraction,json=txAirTimeFraction,proto3" json:"tx_air_time_fraction,omitempty"`
+	RxAirTimeFraction    float32 `protobuf:"fixed32,3,opt,name=rx_air_time_fraction,json=rxAirTimeFraction,proto3" json:"rx_air_time_fraction,omitempty"`
+	ObssAirTimeFraction  float32 `protobuf:"fixed32,4,opt,name=obss_air_time_fraction,json=obssAirTimeFraction,proto3" json:"obss_air_time_fraction,omitempty"`
+	EdccaAirTimeFraction float32 `protobuf:"fixed32,5,opt,name=edcca_air_time_fraction,json=edccaAirTimeFraction,proto3" json:"edcca_air_time_fraction,omitempty"`
+}
+
+func (x *WifiBandStatus) Reset() {
+	*x = WifiBandStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiBandStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiBandStatus) ProtoMessage() {}
+
+func (x *WifiBandStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiBandStatus.ProtoReflect.Descriptor instead.
+func (*WifiBandStatus) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *WifiBandStatus) GetChanBusyTimeFraction() float32 {
+	if x != nil {
+		return x.ChanBusyTimeFraction
+	}
+	return 0
+}
+
+func (x *WifiBandStatus) GetTxAirTimeFraction() float32 {
+	if x != nil {
+		return x.TxAirTimeFraction
+	}
+	return 0
+}
+
+func (x *WifiBandStatus) GetRxAirTimeFraction() float32 {
+	if x != nil {
+		return x.RxAirTimeFraction
+	}
+	return 0
+}
+
+func (x *WifiBandStatus) GetObssAirTimeFraction() float32 {
+	if x != nil {
+		return x.ObssAirTimeFraction
+	}
+	return 0
+}
+
+func (x *WifiBandStatus) GetEdccaAirTimeFraction() float32 {
+	if x != nil {
+		return x.EdccaAirTimeFraction
+	}
+	return 0
+}
+
+type WifiAlerts struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ThermalThrottle      bool `protobuf:"varint,1,opt,name=thermal_throttle,json=thermalThrottle,proto3" json:"thermal_throttle,omitempty"`
+	InstallPending       bool `protobuf:"varint,2,opt,name=install_pending,json=installPending,proto3" json:"install_pending,omitempty"`
+	FreshlyFused         bool `protobuf:"varint,3,opt,name=freshly_fused,json=freshlyFused,proto3" json:"freshly_fused,omitempty"`
+	LanEthSlowLink_10    bool `protobuf:"varint,4,opt,name=lan_eth_slow_link_10,json=lanEthSlowLink10,proto3" json:"lan_eth_slow_link_10,omitempty"`
+	LanEthSlowLink_100   bool `protobuf:"varint,5,opt,name=lan_eth_slow_link_100,json=lanEthSlowLink100,proto3" json:"lan_eth_slow_link_100,omitempty"`
+	WanEthPoorConnection bool `protobuf:"varint,10,opt,name=wan_eth_poor_connection,json=wanEthPoorConnection,proto3" json:"wan_eth_poor_connection,omitempty"`
+}
+
+func (x *WifiAlerts) Reset() {
+	*x = WifiAlerts{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiAlerts) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiAlerts) ProtoMessage() {}
+
+func (x *WifiAlerts) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiAlerts.ProtoReflect.Descriptor instead.
+func (*WifiAlerts) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *WifiAlerts) GetThermalThrottle() bool {
+	if x != nil {
+		return x.ThermalThrottle
+	}
+	return false
+}
+
+func (x *WifiAlerts) GetInstallPending() bool {
+	if x != nil {
+		return x.InstallPending
+	}
+	return false
+}
+
+func (x *WifiAlerts) GetFreshlyFused() bool {
+	if x != nil {
+		return x.FreshlyFused
+	}
+	return false
+}
+
+func (x *WifiAlerts) GetLanEthSlowLink_10() bool {
+	if x != nil {
+		return x.LanEthSlowLink_10
+	}
+	return false
+}
+
+func (x *WifiAlerts) GetLanEthSlowLink_100() bool {
+	if x != nil {
+		return x.LanEthSlowLink_100
+	}
+	return false
+}
+
+func (x *WifiAlerts) GetWanEthPoorConnection() bool {
+	if x != nil {
+		return x.WanEthPoorConnection
+	}
+	return false
+}
+
+type WifiGetStatusResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DeviceInfo           *DeviceInfo  `protobuf:"bytes,3,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
+	DeviceState          *DeviceState `protobuf:"bytes,4,opt,name=device_state,json=deviceState,proto3" json:"device_state,omitempty"`
+	CaptivePortalEnabled bool         `protobuf:"varint,1,opt,name=captive_portal_enabled,json=captivePortalEnabled,proto3" json:"captive_portal_enabled,omitempty"`
+	Ipv4WanAddress       string       `protobuf:"bytes,1003,opt,name=ipv4_wan_address,json=ipv4WanAddress,proto3" json:"ipv4_wan_address,omitempty"`
+	PingDropRate         float32      `protobuf:"fixed32,1004,opt,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
+	PingLatencyMs        float32      `protobuf:"fixed32,1005,opt,name=ping_latency_ms,json=pingLatencyMs,proto3" json:"ping_latency_ms,omitempty"`
+	DishPingDropRate     float32      `protobuf:"fixed32,1012,opt,name=dish_ping_drop_rate,json=dishPingDropRate,proto3" json:"dish_ping_drop_rate,omitempty"`
+	DishPingLatencyMs    float32      `protobuf:"fixed32,1013,opt,name=dish_ping_latency_ms,json=dishPingLatencyMs,proto3" json:"dish_ping_latency_ms,omitempty"`
+	PopPingDropRate      float32      `protobuf:"fixed32,1014,opt,name=pop_ping_drop_rate,json=popPingDropRate,proto3" json:"pop_ping_drop_rate,omitempty"`
+	PopPingLatencyMs     float32      `protobuf:"fixed32,1015,opt,name=pop_ping_latency_ms,json=popPingLatencyMs,proto3" json:"pop_ping_latency_ms,omitempty"`
+	// Deprecated: Do not use.
+	Rf_2GhzStatus *WifiBandStatus `protobuf:"bytes,1008,opt,name=rf_2ghz_status,json=rf2ghzStatus,proto3" json:"rf_2ghz_status,omitempty"`
+	// Deprecated: Do not use.
+	Rf_5GhzStatus *WifiBandStatus `protobuf:"bytes,1009,opt,name=rf_5ghz_status,json=rf5ghzStatus,proto3" json:"rf_5ghz_status,omitempty"`
+	Alerts        *WifiAlerts     `protobuf:"bytes,1010,opt,name=alerts,proto3" json:"alerts,omitempty"`
+	IsAviation    bool            `protobuf:"varint,1011,opt,name=is_aviation,json=isAviation,proto3" json:"is_aviation,omitempty"`
+}
+
+func (x *WifiGetStatusResponse) Reset() {
+	*x = WifiGetStatusResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetStatusResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetStatusResponse) ProtoMessage() {}
+
+func (x *WifiGetStatusResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetStatusResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetStatusResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *WifiGetStatusResponse) GetDeviceInfo() *DeviceInfo {
+	if x != nil {
+		return x.DeviceInfo
+	}
+	return nil
+}
+
+func (x *WifiGetStatusResponse) GetDeviceState() *DeviceState {
+	if x != nil {
+		return x.DeviceState
+	}
+	return nil
+}
+
+func (x *WifiGetStatusResponse) GetCaptivePortalEnabled() bool {
+	if x != nil {
+		return x.CaptivePortalEnabled
+	}
+	return false
+}
+
+func (x *WifiGetStatusResponse) GetIpv4WanAddress() string {
+	if x != nil {
+		return x.Ipv4WanAddress
+	}
+	return ""
+}
+
+func (x *WifiGetStatusResponse) GetPingDropRate() float32 {
+	if x != nil {
+		return x.PingDropRate
+	}
+	return 0
+}
+
+func (x *WifiGetStatusResponse) GetPingLatencyMs() float32 {
+	if x != nil {
+		return x.PingLatencyMs
+	}
+	return 0
+}
+
+func (x *WifiGetStatusResponse) GetDishPingDropRate() float32 {
+	if x != nil {
+		return x.DishPingDropRate
+	}
+	return 0
+}
+
+func (x *WifiGetStatusResponse) GetDishPingLatencyMs() float32 {
+	if x != nil {
+		return x.DishPingLatencyMs
+	}
+	return 0
+}
+
+func (x *WifiGetStatusResponse) GetPopPingDropRate() float32 {
+	if x != nil {
+		return x.PopPingDropRate
+	}
+	return 0
+}
+
+func (x *WifiGetStatusResponse) GetPopPingLatencyMs() float32 {
+	if x != nil {
+		return x.PopPingLatencyMs
+	}
+	return 0
+}
+
+// Deprecated: Do not use.
+func (x *WifiGetStatusResponse) GetRf_2GhzStatus() *WifiBandStatus {
+	if x != nil {
+		return x.Rf_2GhzStatus
+	}
+	return nil
+}
+
+// Deprecated: Do not use.
+func (x *WifiGetStatusResponse) GetRf_5GhzStatus() *WifiBandStatus {
+	if x != nil {
+		return x.Rf_5GhzStatus
+	}
+	return nil
+}
+
+func (x *WifiGetStatusResponse) GetAlerts() *WifiAlerts {
+	if x != nil {
+		return x.Alerts
+	}
+	return nil
+}
+
+func (x *WifiGetStatusResponse) GetIsAviation() bool {
+	if x != nil {
+		return x.IsAviation
+	}
+	return false
+}
+
+type WifiAuthenticateRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Challenge *SignedData `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"`
+}
+
+func (x *WifiAuthenticateRequest) Reset() {
+	*x = WifiAuthenticateRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiAuthenticateRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiAuthenticateRequest) ProtoMessage() {}
+
+func (x *WifiAuthenticateRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiAuthenticateRequest.ProtoReflect.Descriptor instead.
+func (*WifiAuthenticateRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *WifiAuthenticateRequest) GetChallenge() *SignedData {
+	if x != nil {
+		return x.Challenge
+	}
+	return nil
+}
+
+type WifiAuthenticateResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Wifi *ChallengeResponse `protobuf:"bytes,1,opt,name=wifi,proto3" json:"wifi,omitempty"`
+	Dish *ChallengeResponse `protobuf:"bytes,2,opt,name=dish,proto3" json:"dish,omitempty"`
+}
+
+func (x *WifiAuthenticateResponse) Reset() {
+	*x = WifiAuthenticateResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiAuthenticateResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiAuthenticateResponse) ProtoMessage() {}
+
+func (x *WifiAuthenticateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiAuthenticateResponse.ProtoReflect.Descriptor instead.
+func (*WifiAuthenticateResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *WifiAuthenticateResponse) GetWifi() *ChallengeResponse {
+	if x != nil {
+		return x.Wifi
+	}
+	return nil
+}
+
+func (x *WifiAuthenticateResponse) GetDish() *ChallengeResponse {
+	if x != nil {
+		return x.Dish
+	}
+	return nil
+}
+
+type WifiAccountBondingEvent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DishId string `protobuf:"bytes,1,opt,name=dish_id,json=dishId,proto3" json:"dish_id,omitempty"`
+}
+
+func (x *WifiAccountBondingEvent) Reset() {
+	*x = WifiAccountBondingEvent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiAccountBondingEvent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiAccountBondingEvent) ProtoMessage() {}
+
+func (x *WifiAccountBondingEvent) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiAccountBondingEvent.ProtoReflect.Descriptor instead.
+func (*WifiAccountBondingEvent) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *WifiAccountBondingEvent) GetDishId() string {
+	if x != nil {
+		return x.DishId
+	}
+	return ""
+}
+
+type WifiNewPeerEvent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
+}
+
+func (x *WifiNewPeerEvent) Reset() {
+	*x = WifiNewPeerEvent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNewPeerEvent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNewPeerEvent) ProtoMessage() {}
+
+func (x *WifiNewPeerEvent) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNewPeerEvent.ProtoReflect.Descriptor instead.
+func (*WifiNewPeerEvent) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *WifiNewPeerEvent) GetPeerId() string {
+	if x != nil {
+		return x.PeerId
+	}
+	return ""
+}
+
+type PingMetrics struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	LatencyMeanMs               float32 `protobuf:"fixed32,1,opt,name=latency_mean_ms,json=latencyMeanMs,proto3" json:"latency_mean_ms,omitempty"`
+	LatencyStddevMs             float32 `protobuf:"fixed32,2,opt,name=latency_stddev_ms,json=latencyStddevMs,proto3" json:"latency_stddev_ms,omitempty"`
+	LatencyMeanMs_5M            float32 `protobuf:"fixed32,3,opt,name=latency_mean_ms_5m,json=latencyMeanMs5m,proto3" json:"latency_mean_ms_5m,omitempty"`
+	LatencyMeanMs_1H            float32 `protobuf:"fixed32,4,opt,name=latency_mean_ms_1h,json=latencyMeanMs1h,proto3" json:"latency_mean_ms_1h,omitempty"`
+	LatencyMeanMs_1D            float32 `protobuf:"fixed32,5,opt,name=latency_mean_ms_1d,json=latencyMeanMs1d,proto3" json:"latency_mean_ms_1d,omitempty"`
+	DropRate                    float32 `protobuf:"fixed32,6,opt,name=drop_rate,json=dropRate,proto3" json:"drop_rate,omitempty"`
+	DropRate_5M                 float32 `protobuf:"fixed32,7,opt,name=drop_rate_5m,json=dropRate5m,proto3" json:"drop_rate_5m,omitempty"`
+	DropRate_1H                 float32 `protobuf:"fixed32,8,opt,name=drop_rate_1h,json=dropRate1h,proto3" json:"drop_rate_1h,omitempty"`
+	DropRate_1D                 float32 `protobuf:"fixed32,9,opt,name=drop_rate_1d,json=dropRate1d,proto3" json:"drop_rate_1d,omitempty"`
+	SecondsSinceLastSuccess     float32 `protobuf:"fixed32,10,opt,name=seconds_since_last_success,json=secondsSinceLastSuccess,proto3" json:"seconds_since_last_success,omitempty"`
+	SecondsSinceLast_1SOutage   float32 `protobuf:"fixed32,11,opt,name=seconds_since_last_1s_outage,json=secondsSinceLast1sOutage,proto3" json:"seconds_since_last_1s_outage,omitempty"`
+	SecondsSinceLast_2SOutage   float32 `protobuf:"fixed32,15,opt,name=seconds_since_last_2s_outage,json=secondsSinceLast2sOutage,proto3" json:"seconds_since_last_2s_outage,omitempty"`
+	SecondsSinceLast_5SOutage   float32 `protobuf:"fixed32,12,opt,name=seconds_since_last_5s_outage,json=secondsSinceLast5sOutage,proto3" json:"seconds_since_last_5s_outage,omitempty"`
+	SecondsSinceLast_15SOutage  float32 `protobuf:"fixed32,18,opt,name=seconds_since_last_15s_outage,json=secondsSinceLast15sOutage,proto3" json:"seconds_since_last_15s_outage,omitempty"`
+	SecondsSinceLast_60SOutage  float32 `protobuf:"fixed32,19,opt,name=seconds_since_last_60s_outage,json=secondsSinceLast60sOutage,proto3" json:"seconds_since_last_60s_outage,omitempty"`
+	SecondsSinceLast_300SOutage float32 `protobuf:"fixed32,20,opt,name=seconds_since_last_300s_outage,json=secondsSinceLast300sOutage,proto3" json:"seconds_since_last_300s_outage,omitempty"`
+	HappyHours_1S_1D            float32 `protobuf:"fixed32,13,opt,name=happy_hours_1s_1d,json=happyHours1s1d,proto3" json:"happy_hours_1s_1d,omitempty"`
+	HappyHours_2S_1D            float32 `protobuf:"fixed32,16,opt,name=happy_hours_2s_1d,json=happyHours2s1d,proto3" json:"happy_hours_2s_1d,omitempty"`
+	HappyHours_5S_1D            float32 `protobuf:"fixed32,14,opt,name=happy_hours_5s_1d,json=happyHours5s1d,proto3" json:"happy_hours_5s_1d,omitempty"`
+}
+
+func (x *PingMetrics) Reset() {
+	*x = PingMetrics{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PingMetrics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PingMetrics) ProtoMessage() {}
+
+func (x *PingMetrics) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[28]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PingMetrics.ProtoReflect.Descriptor instead.
+func (*PingMetrics) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *PingMetrics) GetLatencyMeanMs() float32 {
+	if x != nil {
+		return x.LatencyMeanMs
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetLatencyStddevMs() float32 {
+	if x != nil {
+		return x.LatencyStddevMs
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetLatencyMeanMs_5M() float32 {
+	if x != nil {
+		return x.LatencyMeanMs_5M
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetLatencyMeanMs_1H() float32 {
+	if x != nil {
+		return x.LatencyMeanMs_1H
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetLatencyMeanMs_1D() float32 {
+	if x != nil {
+		return x.LatencyMeanMs_1D
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetDropRate() float32 {
+	if x != nil {
+		return x.DropRate
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetDropRate_5M() float32 {
+	if x != nil {
+		return x.DropRate_5M
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetDropRate_1H() float32 {
+	if x != nil {
+		return x.DropRate_1H
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetDropRate_1D() float32 {
+	if x != nil {
+		return x.DropRate_1D
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLastSuccess() float32 {
+	if x != nil {
+		return x.SecondsSinceLastSuccess
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_1SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_1SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_2SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_2SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_5SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_5SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_15SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_15SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_60SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_60SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetSecondsSinceLast_300SOutage() float32 {
+	if x != nil {
+		return x.SecondsSinceLast_300SOutage
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetHappyHours_1S_1D() float32 {
+	if x != nil {
+		return x.HappyHours_1S_1D
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetHappyHours_2S_1D() float32 {
+	if x != nil {
+		return x.HappyHours_2S_1D
+	}
+	return 0
+}
+
+func (x *PingMetrics) GetHappyHours_5S_1D() float32 {
+	if x != nil {
+		return x.HappyHours_5S_1D
+	}
+	return 0
+}
+
+type WifiGetPingMetricsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *WifiGetPingMetricsRequest) Reset() {
+	*x = WifiGetPingMetricsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetPingMetricsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetPingMetricsRequest) ProtoMessage() {}
+
+func (x *WifiGetPingMetricsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetPingMetricsRequest.ProtoReflect.Descriptor instead.
+func (*WifiGetPingMetricsRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{29}
+}
+
+type WifiGetPingMetricsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Internet *PingMetrics `protobuf:"bytes,1,opt,name=internet,proto3" json:"internet,omitempty"`
+}
+
+func (x *WifiGetPingMetricsResponse) Reset() {
+	*x = WifiGetPingMetricsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetPingMetricsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetPingMetricsResponse) ProtoMessage() {}
+
+func (x *WifiGetPingMetricsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[30]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetPingMetricsResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetPingMetricsResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *WifiGetPingMetricsResponse) GetInternet() *PingMetrics {
+	if x != nil {
+		return x.Internet
+	}
+	return nil
+}
+
+type WifiGetDiagnosticsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *WifiGetDiagnosticsRequest) Reset() {
+	*x = WifiGetDiagnosticsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetDiagnosticsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetDiagnosticsRequest) ProtoMessage() {}
+
+func (x *WifiGetDiagnosticsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[31]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetDiagnosticsRequest.ProtoReflect.Descriptor instead.
+func (*WifiGetDiagnosticsRequest) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{31}
+}
+
+type WifiGetDiagnosticsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	NetworkScan  *WifiScanResults `protobuf:"bytes,1,opt,name=network_scan,json=networkScan,proto3" json:"network_scan,omitempty"`
+	WifiNetworks []*WifiNetwork   `protobuf:"bytes,2,rep,name=wifi_networks,json=wifiNetworks,proto3" json:"wifi_networks,omitempty"`
+}
+
+func (x *WifiGetDiagnosticsResponse) Reset() {
+	*x = WifiGetDiagnosticsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetDiagnosticsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetDiagnosticsResponse) ProtoMessage() {}
+
+func (x *WifiGetDiagnosticsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[32]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetDiagnosticsResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetDiagnosticsResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *WifiGetDiagnosticsResponse) GetNetworkScan() *WifiScanResults {
+	if x != nil {
+		return x.NetworkScan
+	}
+	return nil
+}
+
+func (x *WifiGetDiagnosticsResponse) GetWifiNetworks() []*WifiNetwork {
+	if x != nil {
+		return x.WifiNetworks
+	}
+	return nil
+}
+
+type WifiScanResults struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Networks []*WifiScanResults_Network `protobuf:"bytes,1,rep,name=networks,proto3" json:"networks,omitempty"`
+}
+
+func (x *WifiScanResults) Reset() {
+	*x = WifiScanResults{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiScanResults) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiScanResults) ProtoMessage() {}
+
+func (x *WifiScanResults) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[33]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiScanResults.ProtoReflect.Descriptor instead.
+func (*WifiScanResults) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *WifiScanResults) GetNetworks() []*WifiScanResults_Network {
+	if x != nil {
+		return x.Networks
+	}
+	return nil
+}
+
+type WifiNetwork struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Band              WifiNetwork_Band `protobuf:"varint,1,opt,name=band,proto3,enum=SpaceX.API.Device.WifiNetwork_Band" json:"band,omitempty"`
+	Ssid              string           `protobuf:"bytes,2,opt,name=ssid,proto3" json:"ssid,omitempty"`
+	Channel           uint32           `protobuf:"varint,3,opt,name=channel,proto3" json:"channel,omitempty"`
+	EncryptionTypeStr string           `protobuf:"bytes,4,opt,name=encryption_type_str,json=encryptionTypeStr,proto3" json:"encryption_type_str,omitempty"`
+}
+
+func (x *WifiNetwork) Reset() {
+	*x = WifiNetwork{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiNetwork) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiNetwork) ProtoMessage() {}
+
+func (x *WifiNetwork) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[34]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiNetwork.ProtoReflect.Descriptor instead.
+func (*WifiNetwork) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *WifiNetwork) GetBand() WifiNetwork_Band {
+	if x != nil {
+		return x.Band
+	}
+	return WifiNetwork_WIFI_UNKNOWN
+}
+
+func (x *WifiNetwork) GetSsid() string {
+	if x != nil {
+		return x.Ssid
+	}
+	return ""
+}
+
+func (x *WifiNetwork) GetChannel() uint32 {
+	if x != nil {
+		return x.Channel
+	}
+	return 0
+}
+
+func (x *WifiNetwork) GetEncryptionTypeStr() string {
+	if x != nil {
+		return x.EncryptionTypeStr
+	}
+	return ""
+}
+
+type WifiPersistentStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	FactoryResetButton               *WifiPersistentStats_Event `protobuf:"bytes,1,opt,name=factory_reset_button,json=factoryResetButton,proto3" json:"factory_reset_button,omitempty"`
+	FactoryResetPlugUnplug           *WifiPersistentStats_Event `protobuf:"bytes,2,opt,name=factory_reset_plug_unplug,json=factoryResetPlugUnplug,proto3" json:"factory_reset_plug_unplug,omitempty"`
+	FactoryResetCommand              *WifiPersistentStats_Event `protobuf:"bytes,3,opt,name=factory_reset_command,json=factoryResetCommand,proto3" json:"factory_reset_command,omitempty"`
+	FactoryResetFailedLoadWifiConfig *WifiPersistentStats_Event `protobuf:"bytes,4,opt,name=factory_reset_failed_load_wifi_config,json=factoryResetFailedLoadWifiConfig,proto3" json:"factory_reset_failed_load_wifi_config,omitempty"`
+	RebootFromSoftwareUpdate         *WifiPersistentStats_Event `protobuf:"bytes,5,opt,name=reboot_from_software_update,json=rebootFromSoftwareUpdate,proto3" json:"reboot_from_software_update,omitempty"`
+}
+
+func (x *WifiPersistentStats) Reset() {
+	*x = WifiPersistentStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiPersistentStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiPersistentStats) ProtoMessage() {}
+
+func (x *WifiPersistentStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[35]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiPersistentStats.ProtoReflect.Descriptor instead.
+func (*WifiPersistentStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *WifiPersistentStats) GetFactoryResetButton() *WifiPersistentStats_Event {
+	if x != nil {
+		return x.FactoryResetButton
+	}
+	return nil
+}
+
+func (x *WifiPersistentStats) GetFactoryResetPlugUnplug() *WifiPersistentStats_Event {
+	if x != nil {
+		return x.FactoryResetPlugUnplug
+	}
+	return nil
+}
+
+func (x *WifiPersistentStats) GetFactoryResetCommand() *WifiPersistentStats_Event {
+	if x != nil {
+		return x.FactoryResetCommand
+	}
+	return nil
+}
+
+func (x *WifiPersistentStats) GetFactoryResetFailedLoadWifiConfig() *WifiPersistentStats_Event {
+	if x != nil {
+		return x.FactoryResetFailedLoadWifiConfig
+	}
+	return nil
+}
+
+func (x *WifiPersistentStats) GetRebootFromSoftwareUpdate() *WifiPersistentStats_Event {
+	if x != nil {
+		return x.RebootFromSoftwareUpdate
+	}
+	return nil
+}
+
+type WifiGetPersistentStatsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Stats *WifiPersistentStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"`
+}
+
+func (x *WifiGetPersistentStatsResponse) Reset() {
+	*x = WifiGetPersistentStatsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiGetPersistentStatsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiGetPersistentStatsResponse) ProtoMessage() {}
+
+func (x *WifiGetPersistentStatsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[36]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiGetPersistentStatsResponse.ProtoReflect.Descriptor instead.
+func (*WifiGetPersistentStatsResponse) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *WifiGetPersistentStatsResponse) GetStats() *WifiPersistentStats {
+	if x != nil {
+		return x.Stats
+	}
+	return nil
+}
+
+type StarlinkRouterHourlyMetricsV2 struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id                                  *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	TimestampDate                       *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=timestamp_date,json=timestampDate,proto3" json:"timestamp_date,omitempty"`
+	TimestampHour                       *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=timestamp_hour,json=timestampHour,proto3" json:"timestamp_hour,omitempty"`
+	SysHwGen                            *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=sys_hw_gen,json=sysHwGen,proto3" json:"sys_hw_gen,omitempty"`
+	SysSw                               *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=sys_sw,json=sysSw,proto3" json:"sys_sw,omitempty"`
+	SysCountry                          *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=sys_country,json=sysCountry,proto3" json:"sys_country,omitempty"`
+	SysIsDev                            *wrapperspb.BoolValue   `protobuf:"bytes,7,opt,name=sys_is_dev,json=sysIsDev,proto3" json:"sys_is_dev,omitempty"`
+	SysAllocFds                         *wrapperspb.UInt32Value `protobuf:"bytes,8,opt,name=sys_alloc_fds,json=sysAllocFds,proto3" json:"sys_alloc_fds,omitempty"`
+	SysCpuUsage                         *wrapperspb.FloatValue  `protobuf:"bytes,9,opt,name=sys_cpu_usage,json=sysCpuUsage,proto3" json:"sys_cpu_usage,omitempty"`
+	SysMemFreeKb                        *wrapperspb.FloatValue  `protobuf:"bytes,10,opt,name=sys_mem_free_kb,json=sysMemFreeKb,proto3" json:"sys_mem_free_kb,omitempty"`
+	SysBootcount                        *wrapperspb.Int32Value  `protobuf:"bytes,11,opt,name=sys_bootcount,json=sysBootcount,proto3" json:"sys_bootcount,omitempty"`
+	SysPartitionsEqual                  *wrapperspb.BoolValue   `protobuf:"bytes,12,opt,name=sys_partitions_equal,json=sysPartitionsEqual,proto3" json:"sys_partitions_equal,omitempty"`
+	SysUptimeSeconds                    *wrapperspb.UInt32Value `protobuf:"bytes,13,opt,name=sys_uptime_seconds,json=sysUptimeSeconds,proto3" json:"sys_uptime_seconds,omitempty"`
+	SysAntiRollbackVersion              *wrapperspb.Int32Value  `protobuf:"bytes,14,opt,name=sys_anti_rollback_version,json=sysAntiRollbackVersion,proto3" json:"sys_anti_rollback_version,omitempty"`
+	Radios_2GhzChannel                  *wrapperspb.UInt32Value `protobuf:"bytes,100,opt,name=radios_2ghz_channel,json=radios2ghzChannel,proto3" json:"radios_2ghz_channel,omitempty"`
+	Radios_2GhzAntenna1Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,101,opt,name=radios_2ghz_antenna1_rssi,json=radios2ghzAntenna1Rssi,proto3" json:"radios_2ghz_antenna1_rssi,omitempty"`
+	Radios_2GhzAntenna2Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,102,opt,name=radios_2ghz_antenna2_rssi,json=radios2ghzAntenna2Rssi,proto3" json:"radios_2ghz_antenna2_rssi,omitempty"`
+	Radios_2GhzAntenna3Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,103,opt,name=radios_2ghz_antenna3_rssi,json=radios2ghzAntenna3Rssi,proto3" json:"radios_2ghz_antenna3_rssi,omitempty"`
+	Radios_2GhzIfaceCount               *wrapperspb.UInt32Value `protobuf:"bytes,104,opt,name=radios_2ghz_iface_count,json=radios2ghzIfaceCount,proto3" json:"radios_2ghz_iface_count,omitempty"`
+	Radios_2GhzChanBusyFraction         *wrapperspb.FloatValue  `protobuf:"bytes,105,opt,name=radios_2ghz_chan_busy_fraction,json=radios2ghzChanBusyFraction,proto3" json:"radios_2ghz_chan_busy_fraction,omitempty"`
+	Radios_2GhzEdccaFraction            *wrapperspb.FloatValue  `protobuf:"bytes,106,opt,name=radios_2ghz_edcca_fraction,json=radios2ghzEdccaFraction,proto3" json:"radios_2ghz_edcca_fraction,omitempty"`
+	Radios_2GhzOverlappingBssFraction   *wrapperspb.FloatValue  `protobuf:"bytes,107,opt,name=radios_2ghz_overlapping_bss_fraction,json=radios2ghzOverlappingBssFraction,proto3" json:"radios_2ghz_overlapping_bss_fraction,omitempty"`
+	Radios_2GhzRxBytes                  *wrapperspb.UInt32Value `protobuf:"bytes,108,opt,name=radios_2ghz_rx_bytes,json=radios2ghzRxBytes,proto3" json:"radios_2ghz_rx_bytes,omitempty"`
+	Radios_2GhzRxPackets                *wrapperspb.UInt32Value `protobuf:"bytes,109,opt,name=radios_2ghz_rx_packets,json=radios2ghzRxPackets,proto3" json:"radios_2ghz_rx_packets,omitempty"`
+	Radios_2GhzRxErrors                 *wrapperspb.UInt32Value `protobuf:"bytes,110,opt,name=radios_2ghz_rx_errors,json=radios2ghzRxErrors,proto3" json:"radios_2ghz_rx_errors,omitempty"`
+	Radios_2GhzRxFrameErrors            *wrapperspb.UInt32Value `protobuf:"bytes,111,opt,name=radios_2ghz_rx_frame_errors,json=radios2ghzRxFrameErrors,proto3" json:"radios_2ghz_rx_frame_errors,omitempty"`
+	Radios_2GhzRxPacketErrorRate        *wrapperspb.FloatValue  `protobuf:"bytes,112,opt,name=radios_2ghz_rx_packet_error_rate,json=radios2ghzRxPacketErrorRate,proto3" json:"radios_2ghz_rx_packet_error_rate,omitempty"`
+	Radios_2GhzRxAirtimeFraction        *wrapperspb.FloatValue  `protobuf:"bytes,113,opt,name=radios_2ghz_rx_airtime_fraction,json=radios2ghzRxAirtimeFraction,proto3" json:"radios_2ghz_rx_airtime_fraction,omitempty"`
+	Radios_2GhzTxBytes                  *wrapperspb.UInt32Value `protobuf:"bytes,114,opt,name=radios_2ghz_tx_bytes,json=radios2ghzTxBytes,proto3" json:"radios_2ghz_tx_bytes,omitempty"`
+	Radios_2GhzTxPackets                *wrapperspb.UInt32Value `protobuf:"bytes,115,opt,name=radios_2ghz_tx_packets,json=radios2ghzTxPackets,proto3" json:"radios_2ghz_tx_packets,omitempty"`
+	Radios_2GhzTxErrors                 *wrapperspb.UInt32Value `protobuf:"bytes,116,opt,name=radios_2ghz_tx_errors,json=radios2ghzTxErrors,proto3" json:"radios_2ghz_tx_errors,omitempty"`
+	Radios_2GhzTxPacketErrorRate        *wrapperspb.FloatValue  `protobuf:"bytes,117,opt,name=radios_2ghz_tx_packet_error_rate,json=radios2ghzTxPacketErrorRate,proto3" json:"radios_2ghz_tx_packet_error_rate,omitempty"`
+	Radios_2GhzTxAirtimeFraction        *wrapperspb.FloatValue  `protobuf:"bytes,118,opt,name=radios_2ghz_tx_airtime_fraction,json=radios2ghzTxAirtimeFraction,proto3" json:"radios_2ghz_tx_airtime_fraction,omitempty"`
+	Radios_5GhzChannel                  *wrapperspb.UInt32Value `protobuf:"bytes,119,opt,name=radios_5ghz_channel,json=radios5ghzChannel,proto3" json:"radios_5ghz_channel,omitempty"`
+	Radios_5GhzAntenna1Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,120,opt,name=radios_5ghz_antenna1_rssi,json=radios5ghzAntenna1Rssi,proto3" json:"radios_5ghz_antenna1_rssi,omitempty"`
+	Radios_5GhzAntenna2Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,121,opt,name=radios_5ghz_antenna2_rssi,json=radios5ghzAntenna2Rssi,proto3" json:"radios_5ghz_antenna2_rssi,omitempty"`
+	Radios_5GhzAntenna3Rssi             *wrapperspb.FloatValue  `protobuf:"bytes,122,opt,name=radios_5ghz_antenna3_rssi,json=radios5ghzAntenna3Rssi,proto3" json:"radios_5ghz_antenna3_rssi,omitempty"`
+	Radios_5GhzIfaceCount               *wrapperspb.UInt32Value `protobuf:"bytes,123,opt,name=radios_5ghz_iface_count,json=radios5ghzIfaceCount,proto3" json:"radios_5ghz_iface_count,omitempty"`
+	Radios_5GhzChanBusyFraction         *wrapperspb.FloatValue  `protobuf:"bytes,124,opt,name=radios_5ghz_chan_busy_fraction,json=radios5ghzChanBusyFraction,proto3" json:"radios_5ghz_chan_busy_fraction,omitempty"`
+	Radios_5GhzEdccaFraction            *wrapperspb.FloatValue  `protobuf:"bytes,125,opt,name=radios_5ghz_edcca_fraction,json=radios5ghzEdccaFraction,proto3" json:"radios_5ghz_edcca_fraction,omitempty"`
+	Radios_5GhzOverlappingBssFraction   *wrapperspb.FloatValue  `protobuf:"bytes,126,opt,name=radios_5ghz_overlapping_bss_fraction,json=radios5ghzOverlappingBssFraction,proto3" json:"radios_5ghz_overlapping_bss_fraction,omitempty"`
+	Radios_5GhzRxBytes                  *wrapperspb.UInt32Value `protobuf:"bytes,127,opt,name=radios_5ghz_rx_bytes,json=radios5ghzRxBytes,proto3" json:"radios_5ghz_rx_bytes,omitempty"`
+	Radios_5GhzRxPackets                *wrapperspb.UInt32Value `protobuf:"bytes,128,opt,name=radios_5ghz_rx_packets,json=radios5ghzRxPackets,proto3" json:"radios_5ghz_rx_packets,omitempty"`
+	Radios_5GhzRxErrors                 *wrapperspb.UInt32Value `protobuf:"bytes,129,opt,name=radios_5ghz_rx_errors,json=radios5ghzRxErrors,proto3" json:"radios_5ghz_rx_errors,omitempty"`
+	Radios_5GhzRxFrameErrors            *wrapperspb.UInt32Value `protobuf:"bytes,130,opt,name=radios_5ghz_rx_frame_errors,json=radios5ghzRxFrameErrors,proto3" json:"radios_5ghz_rx_frame_errors,omitempty"`
+	Radios_5GhzRxPacketErrorRate        *wrapperspb.FloatValue  `protobuf:"bytes,131,opt,name=radios_5ghz_rx_packet_error_rate,json=radios5ghzRxPacketErrorRate,proto3" json:"radios_5ghz_rx_packet_error_rate,omitempty"`
+	Radios_5GhzRxAirtimeFraction        *wrapperspb.FloatValue  `protobuf:"bytes,132,opt,name=radios_5ghz_rx_airtime_fraction,json=radios5ghzRxAirtimeFraction,proto3" json:"radios_5ghz_rx_airtime_fraction,omitempty"`
+	Radios_5GhzTxBytes                  *wrapperspb.UInt32Value `protobuf:"bytes,133,opt,name=radios_5ghz_tx_bytes,json=radios5ghzTxBytes,proto3" json:"radios_5ghz_tx_bytes,omitempty"`
+	Radios_5GhzTxPackets                *wrapperspb.UInt32Value `protobuf:"bytes,134,opt,name=radios_5ghz_tx_packets,json=radios5ghzTxPackets,proto3" json:"radios_5ghz_tx_packets,omitempty"`
+	Radios_5GhzTxErrors                 *wrapperspb.UInt32Value `protobuf:"bytes,135,opt,name=radios_5ghz_tx_errors,json=radios5ghzTxErrors,proto3" json:"radios_5ghz_tx_errors,omitempty"`
+	Radios_5GhzTxPacketErrorRate        *wrapperspb.FloatValue  `protobuf:"bytes,136,opt,name=radios_5ghz_tx_packet_error_rate,json=radios5ghzTxPacketErrorRate,proto3" json:"radios_5ghz_tx_packet_error_rate,omitempty"`
+	Radios_5GhzTxAirtimeFraction        *wrapperspb.FloatValue  `protobuf:"bytes,137,opt,name=radios_5ghz_tx_airtime_fraction,json=radios5ghzTxAirtimeFraction,proto3" json:"radios_5ghz_tx_airtime_fraction,omitempty"`
+	Radios_2GhzThermalTemp              *wrapperspb.FloatValue  `protobuf:"bytes,200,opt,name=radios_2ghz_thermal_temp,json=radios2ghzThermalTemp,proto3" json:"radios_2ghz_thermal_temp,omitempty"`
+	Radios_5GhzThermalTemp              *wrapperspb.FloatValue  `protobuf:"bytes,201,opt,name=radios_5ghz_thermal_temp,json=radios5ghzThermalTemp,proto3" json:"radios_5ghz_thermal_temp,omitempty"`
+	Radios_2GhzThermalDutyCycle         *wrapperspb.FloatValue  `protobuf:"bytes,202,opt,name=radios_2ghz_thermal_duty_cycle,json=radios2ghzThermalDutyCycle,proto3" json:"radios_2ghz_thermal_duty_cycle,omitempty"`
+	Radios_5GhzThermalDutyCycle         *wrapperspb.FloatValue  `protobuf:"bytes,203,opt,name=radios_5ghz_thermal_duty_cycle,json=radios5ghzThermalDutyCycle,proto3" json:"radios_5ghz_thermal_duty_cycle,omitempty"`
+	Radios_2GhzThermalThrottledSeconds  *wrapperspb.UInt32Value `protobuf:"bytes,204,opt,name=radios_2ghz_thermal_throttled_seconds,json=radios2ghzThermalThrottledSeconds,proto3" json:"radios_2ghz_thermal_throttled_seconds,omitempty"`
+	Radios_5GhzThermalThrottledSeconds  *wrapperspb.UInt32Value `protobuf:"bytes,205,opt,name=radios_5ghz_thermal_throttled_seconds,json=radios5ghzThermalThrottledSeconds,proto3" json:"radios_5ghz_thermal_throttled_seconds,omitempty"`
+	IfacesLanEthRxBytes                 *wrapperspb.UInt32Value `protobuf:"bytes,300,opt,name=ifaces_lan_eth_rx_bytes,json=ifacesLanEthRxBytes,proto3" json:"ifaces_lan_eth_rx_bytes,omitempty"`
+	IfacesLanEthRxPackets               *wrapperspb.UInt32Value `protobuf:"bytes,301,opt,name=ifaces_lan_eth_rx_packets,json=ifacesLanEthRxPackets,proto3" json:"ifaces_lan_eth_rx_packets,omitempty"`
+	IfacesLanEthRxErrors                *wrapperspb.UInt32Value `protobuf:"bytes,302,opt,name=ifaces_lan_eth_rx_errors,json=ifacesLanEthRxErrors,proto3" json:"ifaces_lan_eth_rx_errors,omitempty"`
+	IfacesLanEthRxFrameErrors           *wrapperspb.UInt32Value `protobuf:"bytes,303,opt,name=ifaces_lan_eth_rx_frame_errors,json=ifacesLanEthRxFrameErrors,proto3" json:"ifaces_lan_eth_rx_frame_errors,omitempty"`
+	IfacesLanEthTxBytes                 *wrapperspb.UInt32Value `protobuf:"bytes,304,opt,name=ifaces_lan_eth_tx_bytes,json=ifacesLanEthTxBytes,proto3" json:"ifaces_lan_eth_tx_bytes,omitempty"`
+	IfacesLanEthTxPackets               *wrapperspb.UInt32Value `protobuf:"bytes,305,opt,name=ifaces_lan_eth_tx_packets,json=ifacesLanEthTxPackets,proto3" json:"ifaces_lan_eth_tx_packets,omitempty"`
+	IfacesLanEthTxErrors                *wrapperspb.UInt32Value `protobuf:"bytes,306,opt,name=ifaces_lan_eth_tx_errors,json=ifacesLanEthTxErrors,proto3" json:"ifaces_lan_eth_tx_errors,omitempty"`
+	IfacesWanEthRxBytes                 *wrapperspb.UInt32Value `protobuf:"bytes,307,opt,name=ifaces_wan_eth_rx_bytes,json=ifacesWanEthRxBytes,proto3" json:"ifaces_wan_eth_rx_bytes,omitempty"`
+	IfacesWanEthRxPackets               *wrapperspb.UInt32Value `protobuf:"bytes,308,opt,name=ifaces_wan_eth_rx_packets,json=ifacesWanEthRxPackets,proto3" json:"ifaces_wan_eth_rx_packets,omitempty"`
+	IfacesWanEthRxErrors                *wrapperspb.UInt32Value `protobuf:"bytes,309,opt,name=ifaces_wan_eth_rx_errors,json=ifacesWanEthRxErrors,proto3" json:"ifaces_wan_eth_rx_errors,omitempty"`
+	IfacesWanEthRxFrameErrors           *wrapperspb.UInt32Value `protobuf:"bytes,310,opt,name=ifaces_wan_eth_rx_frame_errors,json=ifacesWanEthRxFrameErrors,proto3" json:"ifaces_wan_eth_rx_frame_errors,omitempty"`
+	IfacesWanEthTxBytes                 *wrapperspb.UInt32Value `protobuf:"bytes,311,opt,name=ifaces_wan_eth_tx_bytes,json=ifacesWanEthTxBytes,proto3" json:"ifaces_wan_eth_tx_bytes,omitempty"`
+	IfacesWanEthTxPackets               *wrapperspb.UInt32Value `protobuf:"bytes,312,opt,name=ifaces_wan_eth_tx_packets,json=ifacesWanEthTxPackets,proto3" json:"ifaces_wan_eth_tx_packets,omitempty"`
+	IfacesWanEthTxErrors                *wrapperspb.UInt32Value `protobuf:"bytes,313,opt,name=ifaces_wan_eth_tx_errors,json=ifacesWanEthTxErrors,proto3" json:"ifaces_wan_eth_tx_errors,omitempty"`
+	Clients                             *wrapperspb.UInt32Value `protobuf:"bytes,400,opt,name=clients,proto3" json:"clients,omitempty"`
+	Clients_2Ghz                        *wrapperspb.UInt32Value `protobuf:"bytes,401,opt,name=clients_2ghz,json=clients2ghz,proto3" json:"clients_2ghz,omitempty"`
+	Clients_5Ghz                        *wrapperspb.UInt32Value `protobuf:"bytes,402,opt,name=clients_5ghz,json=clients5ghz,proto3" json:"clients_5ghz,omitempty"`
+	ClientsEth                          *wrapperspb.UInt32Value `protobuf:"bytes,403,opt,name=clients_eth,json=clientsEth,proto3" json:"clients_eth,omitempty"`
+	ClientsRepeater                     *wrapperspb.UInt32Value `protobuf:"bytes,404,opt,name=clients_repeater,json=clientsRepeater,proto3" json:"clients_repeater,omitempty"`
+	ClientsRepeater_2Ghz                *wrapperspb.UInt32Value `protobuf:"bytes,405,opt,name=clients_repeater_2ghz,json=clientsRepeater2ghz,proto3" json:"clients_repeater_2ghz,omitempty"`
+	ClientsRepeater_5Ghz                *wrapperspb.UInt32Value `protobuf:"bytes,406,opt,name=clients_repeater_5ghz,json=clientsRepeater5ghz,proto3" json:"clients_repeater_5ghz,omitempty"`
+	ClientsRepeaterEth                  *wrapperspb.UInt32Value `protobuf:"bytes,407,opt,name=clients_repeater_eth,json=clientsRepeaterEth,proto3" json:"clients_repeater_eth,omitempty"`
+	MeshHops                            *wrapperspb.UInt32Value `protobuf:"bytes,408,opt,name=mesh_hops,json=meshHops,proto3" json:"mesh_hops,omitempty"`
+	MeshOneHopRssiAvg_2Ghz              *wrapperspb.FloatValue  `protobuf:"bytes,409,opt,name=mesh_one_hop_rssi_avg_2ghz,json=meshOneHopRssiAvg2ghz,proto3" json:"mesh_one_hop_rssi_avg_2ghz,omitempty"`
+	MeshOneHopRssiAvg_5Ghz              *wrapperspb.FloatValue  `protobuf:"bytes,410,opt,name=mesh_one_hop_rssi_avg_5ghz,json=meshOneHopRssiAvg5ghz,proto3" json:"mesh_one_hop_rssi_avg_5ghz,omitempty"`
+	MeshTwoHopRssiAvg_2Ghz              *wrapperspb.FloatValue  `protobuf:"bytes,411,opt,name=mesh_two_hop_rssi_avg_2ghz,json=meshTwoHopRssiAvg2ghz,proto3" json:"mesh_two_hop_rssi_avg_2ghz,omitempty"`
+	MeshTwoHopRssiAvg_5Ghz              *wrapperspb.FloatValue  `protobuf:"bytes,412,opt,name=mesh_two_hop_rssi_avg_5ghz,json=meshTwoHopRssiAvg5ghz,proto3" json:"mesh_two_hop_rssi_avg_5ghz,omitempty"`
+	PingSecondsSinceLast_1SOutage       *wrapperspb.FloatValue  `protobuf:"bytes,600,opt,name=ping_seconds_since_last_1s_outage,json=pingSecondsSinceLast1sOutage,proto3" json:"ping_seconds_since_last_1s_outage,omitempty"`
+	PingSecondsSinceLast_2SOutage       *wrapperspb.FloatValue  `protobuf:"bytes,601,opt,name=ping_seconds_since_last_2s_outage,json=pingSecondsSinceLast2sOutage,proto3" json:"ping_seconds_since_last_2s_outage,omitempty"`
+	PingSecondsSinceLast_5SOutage       *wrapperspb.FloatValue  `protobuf:"bytes,602,opt,name=ping_seconds_since_last_5s_outage,json=pingSecondsSinceLast5sOutage,proto3" json:"ping_seconds_since_last_5s_outage,omitempty"`
+	PingSecondsSinceLast_60SOutage      *wrapperspb.FloatValue  `protobuf:"bytes,603,opt,name=ping_seconds_since_last_60s_outage,json=pingSecondsSinceLast60sOutage,proto3" json:"ping_seconds_since_last_60s_outage,omitempty"`
+	PingSecondsSinceLast_300SOutage     *wrapperspb.FloatValue  `protobuf:"bytes,604,opt,name=ping_seconds_since_last_300s_outage,json=pingSecondsSinceLast300sOutage,proto3" json:"ping_seconds_since_last_300s_outage,omitempty"`
+	PingDropRate                        *wrapperspb.FloatValue  `protobuf:"bytes,605,opt,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
+	PingDropRateLast_1H                 *wrapperspb.FloatValue  `protobuf:"bytes,606,opt,name=ping_drop_rate_last_1h,json=pingDropRateLast1h,proto3" json:"ping_drop_rate_last_1h,omitempty"`
+	PingLatency                         *wrapperspb.FloatValue  `protobuf:"bytes,607,opt,name=ping_latency,json=pingLatency,proto3" json:"ping_latency,omitempty"`
+	PingDishSecondsSinceLast_1SOutage   *wrapperspb.FloatValue  `protobuf:"bytes,610,opt,name=ping_dish_seconds_since_last_1s_outage,json=pingDishSecondsSinceLast1sOutage,proto3" json:"ping_dish_seconds_since_last_1s_outage,omitempty"`
+	PingDishSecondsSinceLast_2SOutage   *wrapperspb.FloatValue  `protobuf:"bytes,611,opt,name=ping_dish_seconds_since_last_2s_outage,json=pingDishSecondsSinceLast2sOutage,proto3" json:"ping_dish_seconds_since_last_2s_outage,omitempty"`
+	PingDishSecondsSinceLast_5SOutage   *wrapperspb.FloatValue  `protobuf:"bytes,612,opt,name=ping_dish_seconds_since_last_5s_outage,json=pingDishSecondsSinceLast5sOutage,proto3" json:"ping_dish_seconds_since_last_5s_outage,omitempty"`
+	PingDishSecondsSinceLast_60SOutage  *wrapperspb.FloatValue  `protobuf:"bytes,613,opt,name=ping_dish_seconds_since_last_60s_outage,json=pingDishSecondsSinceLast60sOutage,proto3" json:"ping_dish_seconds_since_last_60s_outage,omitempty"`
+	PingDishSecondsSinceLast_300SOutage *wrapperspb.FloatValue  `protobuf:"bytes,614,opt,name=ping_dish_seconds_since_last_300s_outage,json=pingDishSecondsSinceLast300sOutage,proto3" json:"ping_dish_seconds_since_last_300s_outage,omitempty"`
+	PingDishDropRate                    *wrapperspb.FloatValue  `protobuf:"bytes,615,opt,name=ping_dish_drop_rate,json=pingDishDropRate,proto3" json:"ping_dish_drop_rate,omitempty"`
+	PingDishDropRateLast_1H             *wrapperspb.FloatValue  `protobuf:"bytes,616,opt,name=ping_dish_drop_rate_last_1h,json=pingDishDropRateLast1h,proto3" json:"ping_dish_drop_rate_last_1h,omitempty"`
+	PingDishLatency                     *wrapperspb.FloatValue  `protobuf:"bytes,617,opt,name=ping_dish_latency,json=pingDishLatency,proto3" json:"ping_dish_latency,omitempty"`
+	ClientSpeedtestRouterDownloadMbps   *wrapperspb.FloatValue  `protobuf:"bytes,700,opt,name=client_speedtest_router_download_mbps,json=clientSpeedtestRouterDownloadMbps,proto3" json:"client_speedtest_router_download_mbps,omitempty"`
+	ClientSpeedtestRouterUploadMbps     *wrapperspb.FloatValue  `protobuf:"bytes,701,opt,name=client_speedtest_router_upload_mbps,json=clientSpeedtestRouterUploadMbps,proto3" json:"client_speedtest_router_upload_mbps,omitempty"`
+	ClientSpeedtestRouterRssi           *wrapperspb.FloatValue  `protobuf:"bytes,702,opt,name=client_speedtest_router_rssi,json=clientSpeedtestRouterRssi,proto3" json:"client_speedtest_router_rssi,omitempty"`
+	ClientSpeedtestWifiDownloadMbps     *wrapperspb.FloatValue  `protobuf:"bytes,703,opt,name=client_speedtest_wifi_download_mbps,json=clientSpeedtestWifiDownloadMbps,proto3" json:"client_speedtest_wifi_download_mbps,omitempty"`
+	ClientSpeedtestWifiUploadMbps       *wrapperspb.FloatValue  `protobuf:"bytes,704,opt,name=client_speedtest_wifi_upload_mbps,json=clientSpeedtestWifiUploadMbps,proto3" json:"client_speedtest_wifi_upload_mbps,omitempty"`
+	ClientSpeedtestClientDownloadMbps   *wrapperspb.FloatValue  `protobuf:"bytes,705,opt,name=client_speedtest_client_download_mbps,json=clientSpeedtestClientDownloadMbps,proto3" json:"client_speedtest_client_download_mbps,omitempty"`
+	ClientSpeedtestClientUploadMbps     *wrapperspb.FloatValue  `protobuf:"bytes,706,opt,name=client_speedtest_client_upload_mbps,json=clientSpeedtestClientUploadMbps,proto3" json:"client_speedtest_client_upload_mbps,omitempty"`
+	ClientSpeedtestClientRssi           *wrapperspb.FloatValue  `protobuf:"bytes,707,opt,name=client_speedtest_client_rssi,json=clientSpeedtestClientRssi,proto3" json:"client_speedtest_client_rssi,omitempty"`
+	ClientSpeedtestClientIface          *wrapperspb.UInt32Value `protobuf:"bytes,708,opt,name=client_speedtest_client_iface,json=clientSpeedtestClientIface,proto3" json:"client_speedtest_client_iface,omitempty"`
+	ClientSpeedtestClientOui            *wrapperspb.StringValue `protobuf:"bytes,709,opt,name=client_speedtest_client_oui,json=clientSpeedtestClientOui,proto3" json:"client_speedtest_client_oui,omitempty"`
+	ClientSpeedtestClientTxRate         *wrapperspb.UInt32Value `protobuf:"bytes,710,opt,name=client_speedtest_client_tx_rate,json=clientSpeedtestClientTxRate,proto3" json:"client_speedtest_client_tx_rate,omitempty"`
+	ClientSpeedtestClientRxRate         *wrapperspb.UInt32Value `protobuf:"bytes,711,opt,name=client_speedtest_client_rx_rate,json=clientSpeedtestClientRxRate,proto3" json:"client_speedtest_client_rx_rate,omitempty"`
+	ClientSpeedtestClientPlatformType   *wrapperspb.UInt32Value `protobuf:"bytes,712,opt,name=client_speedtest_client_platform_type,json=clientSpeedtestClientPlatformType,proto3" json:"client_speedtest_client_platform_type,omitempty"`
+	SpeedtestTcp_8DownloadMbpsAvg       *wrapperspb.FloatValue  `protobuf:"bytes,800,opt,name=speedtest_tcp_8_download_mbps_avg,json=speedtestTcp8DownloadMbpsAvg,proto3" json:"speedtest_tcp_8_download_mbps_avg,omitempty"`
+	SpeedtestTcp_8DownloadMbpsMax       *wrapperspb.FloatValue  `protobuf:"bytes,801,opt,name=speedtest_tcp_8_download_mbps_max,json=speedtestTcp8DownloadMbpsMax,proto3" json:"speedtest_tcp_8_download_mbps_max,omitempty"`
+	SpeedtestTcp_8UploadMbpsAvg         *wrapperspb.FloatValue  `protobuf:"bytes,802,opt,name=speedtest_tcp_8_upload_mbps_avg,json=speedtestTcp8UploadMbpsAvg,proto3" json:"speedtest_tcp_8_upload_mbps_avg,omitempty"`
+	SpeedtestTcp_8UploadMbpsMax         *wrapperspb.FloatValue  `protobuf:"bytes,803,opt,name=speedtest_tcp_8_upload_mbps_max,json=speedtestTcp8UploadMbpsMax,proto3" json:"speedtest_tcp_8_upload_mbps_max,omitempty"`
+	SpeedtestTcp_64DownloadMbpsAvg      *wrapperspb.FloatValue  `protobuf:"bytes,804,opt,name=speedtest_tcp_64_download_mbps_avg,json=speedtestTcp64DownloadMbpsAvg,proto3" json:"speedtest_tcp_64_download_mbps_avg,omitempty"`
+	SpeedtestTcp_64DownloadMbpsMax      *wrapperspb.FloatValue  `protobuf:"bytes,805,opt,name=speedtest_tcp_64_download_mbps_max,json=speedtestTcp64DownloadMbpsMax,proto3" json:"speedtest_tcp_64_download_mbps_max,omitempty"`
+	SpeedtestTcp_64UploadMbpsAvg        *wrapperspb.FloatValue  `protobuf:"bytes,806,opt,name=speedtest_tcp_64_upload_mbps_avg,json=speedtestTcp64UploadMbpsAvg,proto3" json:"speedtest_tcp_64_upload_mbps_avg,omitempty"`
+	SpeedtestTcp_64UploadMbpsMax        *wrapperspb.FloatValue  `protobuf:"bytes,807,opt,name=speedtest_tcp_64_upload_mbps_max,json=speedtestTcp64UploadMbpsMax,proto3" json:"speedtest_tcp_64_upload_mbps_max,omitempty"`
+	DishCellId                          *wrapperspb.UInt32Value `protobuf:"bytes,900,opt,name=dish_cell_id,json=dishCellId,proto3" json:"dish_cell_id,omitempty"`
+	ConfigSetupComplete                 *wrapperspb.BoolValue   `protobuf:"bytes,1000,opt,name=config_setup_complete,json=configSetupComplete,proto3" json:"config_setup_complete,omitempty"`
+	ConfigBandsSplit                    *wrapperspb.BoolValue   `protobuf:"bytes,1001,opt,name=config_bands_split,json=configBandsSplit,proto3" json:"config_bands_split,omitempty"`
+	ConfigIsRepeater                    *wrapperspb.BoolValue   `protobuf:"bytes,1002,opt,name=config_is_repeater,json=configIsRepeater,proto3" json:"config_is_repeater,omitempty"`
+	ConfigOpenNetwork                   *wrapperspb.BoolValue   `protobuf:"bytes,1003,opt,name=config_open_network,json=configOpenNetwork,proto3" json:"config_open_network,omitempty"`
+	ConfigIsAviation                    *wrapperspb.BoolValue   `protobuf:"bytes,1004,opt,name=config_is_aviation,json=configIsAviation,proto3" json:"config_is_aviation,omitempty"`
+	ConfigSecureDns                     *wrapperspb.BoolValue   `protobuf:"bytes,1005,opt,name=config_secure_dns,json=configSecureDns,proto3" json:"config_secure_dns,omitempty"`
+	ConfigLegacy                        *wrapperspb.BoolValue   `protobuf:"bytes,1006,opt,name=config_legacy,json=configLegacy,proto3" json:"config_legacy,omitempty"`
+	ConfigApMode                        *wrapperspb.BoolValue   `protobuf:"bytes,1007,opt,name=config_ap_mode,json=configApMode,proto3" json:"config_ap_mode,omitempty"`
+	ConfigDfsEnabled                    *wrapperspb.BoolValue   `protobuf:"bytes,1008,opt,name=config_dfs_enabled,json=configDfsEnabled,proto3" json:"config_dfs_enabled,omitempty"`
+	ConfigNetworkNameIsDefault          *wrapperspb.BoolValue   `protobuf:"bytes,1009,opt,name=config_network_name_is_default,json=configNetworkNameIsDefault,proto3" json:"config_network_name_is_default,omitempty"`
+	ConfigRemoteSshEnabled              *wrapperspb.BoolValue   `protobuf:"bytes,1010,opt,name=config_remote_ssh_enabled,json=configRemoteSshEnabled,proto3" json:"config_remote_ssh_enabled,omitempty"`
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) Reset() {
+	*x = StarlinkRouterHourlyMetricsV2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StarlinkRouterHourlyMetricsV2) ProtoMessage() {}
+
+func (x *StarlinkRouterHourlyMetricsV2) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[37]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StarlinkRouterHourlyMetricsV2.ProtoReflect.Descriptor instead.
+func (*StarlinkRouterHourlyMetricsV2) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetId() *wrapperspb.StringValue {
+	if x != nil {
+		return x.Id
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetTimestampDate() *wrapperspb.StringValue {
+	if x != nil {
+		return x.TimestampDate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetTimestampHour() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.TimestampHour
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysHwGen() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysHwGen
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysSw() *wrapperspb.StringValue {
+	if x != nil {
+		return x.SysSw
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysCountry() *wrapperspb.StringValue {
+	if x != nil {
+		return x.SysCountry
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysIsDev() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.SysIsDev
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysAllocFds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysAllocFds
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysCpuUsage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SysCpuUsage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysMemFreeKb() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SysMemFreeKb
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysBootcount() *wrapperspb.Int32Value {
+	if x != nil {
+		return x.SysBootcount
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysPartitionsEqual() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.SysPartitionsEqual
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysUptimeSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysUptimeSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSysAntiRollbackVersion() *wrapperspb.Int32Value {
+	if x != nil {
+		return x.SysAntiRollbackVersion
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzChannel() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzChannel
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzAntenna1Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna1Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzAntenna2Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna2Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzAntenna3Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna3Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzIfaceCount() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzIfaceCount
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzChanBusyFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzChanBusyFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzEdccaFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzEdccaFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzOverlappingBssFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzOverlappingBssFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxFrameErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzRxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzRxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzRxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzTxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzTxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzTxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzTxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzTxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzTxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzTxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzChannel() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzChannel
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzAntenna1Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna1Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzAntenna2Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna2Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzAntenna3Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna3Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzIfaceCount() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzIfaceCount
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzChanBusyFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzChanBusyFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzEdccaFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzEdccaFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzOverlappingBssFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzOverlappingBssFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxFrameErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzRxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzRxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzRxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzTxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzTxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzTxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzTxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzTxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzTxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzTxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzThermalTemp() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzThermalTemp
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzThermalTemp() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzThermalTemp
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzThermalDutyCycle() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzThermalDutyCycle
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzThermalDutyCycle() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzThermalDutyCycle
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_2GhzThermalThrottledSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzThermalThrottledSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetRadios_5GhzThermalThrottledSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzThermalThrottledSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthRxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthRxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthRxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthRxFrameErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthTxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthTxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesLanEthTxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesLanEthTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthRxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthRxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthRxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthRxFrameErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthTxBytes() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthTxPackets() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetIfacesWanEthTxErrors() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.IfacesWanEthTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClients() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClients_2Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClients_5Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientsEth() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsEth
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientsRepeater() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientsRepeater_2Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientsRepeater_5Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientsRepeaterEth() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeaterEth
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetMeshHops() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.MeshHops
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetMeshOneHopRssiAvg_2Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshOneHopRssiAvg_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetMeshOneHopRssiAvg_5Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshOneHopRssiAvg_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetMeshTwoHopRssiAvg_2Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshTwoHopRssiAvg_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetMeshTwoHopRssiAvg_5Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshTwoHopRssiAvg_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingSecondsSinceLast_1SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_1SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingSecondsSinceLast_2SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_2SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingSecondsSinceLast_5SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_5SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingSecondsSinceLast_60SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_60SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingSecondsSinceLast_300SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_300SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDropRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDropRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDropRateLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDropRateLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingLatency() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingLatency
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishSecondsSinceLast_1SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_1SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishSecondsSinceLast_2SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_2SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishSecondsSinceLast_5SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_5SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishSecondsSinceLast_60SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_60SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishSecondsSinceLast_300SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_300SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishDropRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishDropRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishDropRateLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishDropRateLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetPingDishLatency() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishLatency
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestRouterDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestRouterUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestRouterRssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterRssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestWifiDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestWifiDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestWifiUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestWifiUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientRssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientRssi
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientIface() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientIface
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientOui() *wrapperspb.StringValue {
+	if x != nil {
+		return x.ClientSpeedtestClientOui
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientTxRate() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientTxRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientRxRate() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientRxRate
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetClientSpeedtestClientPlatformType() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientPlatformType
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_8DownloadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8DownloadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_8DownloadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8DownloadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_8UploadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8UploadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_8UploadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8UploadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_64DownloadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64DownloadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_64DownloadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64DownloadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_64UploadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64UploadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetSpeedtestTcp_64UploadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64UploadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetDishCellId() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.DishCellId
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigSetupComplete() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigSetupComplete
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigBandsSplit() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigBandsSplit
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigIsRepeater() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigIsRepeater
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigOpenNetwork() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigOpenNetwork
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigIsAviation() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigIsAviation
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigSecureDns() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigSecureDns
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigLegacy() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigLegacy
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigApMode() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigApMode
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigDfsEnabled() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigDfsEnabled
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigNetworkNameIsDefault() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigNetworkNameIsDefault
+	}
+	return nil
+}
+
+func (x *StarlinkRouterHourlyMetricsV2) GetConfigRemoteSshEnabled() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigRemoteSshEnabled
+	}
+	return nil
+}
+
+type StarlinkRoutersHourlyMetricsV2 struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id                                  *wrapperspb.StringValue   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	TimestampDate                       *wrapperspb.StringValue   `protobuf:"bytes,2,opt,name=timestamp_date,json=timestampDate,proto3" json:"timestamp_date,omitempty"`
+	TimestampHour                       *wrapperspb.UInt32Value   `protobuf:"bytes,3,opt,name=timestamp_hour,json=timestampHour,proto3" json:"timestamp_hour,omitempty"`
+	Timestamp                           *telemetron.TimestampInfo `protobuf:"bytes,10000,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	SysHwGen                            *wrapperspb.UInt32Value   `protobuf:"bytes,4,opt,name=sys_hw_gen,json=sysHwGen,proto3" json:"sys_hw_gen,omitempty"`
+	SysSw                               *wrapperspb.StringValue   `protobuf:"bytes,5,opt,name=sys_sw,json=sysSw,proto3" json:"sys_sw,omitempty"`
+	SysCountry                          *wrapperspb.StringValue   `protobuf:"bytes,6,opt,name=sys_country,json=sysCountry,proto3" json:"sys_country,omitempty"`
+	SysIsDev                            *wrapperspb.BoolValue     `protobuf:"bytes,7,opt,name=sys_is_dev,json=sysIsDev,proto3" json:"sys_is_dev,omitempty"`
+	SysAllocFds                         *wrapperspb.UInt32Value   `protobuf:"bytes,8,opt,name=sys_alloc_fds,json=sysAllocFds,proto3" json:"sys_alloc_fds,omitempty"`
+	SysCpuUsage                         *wrapperspb.FloatValue    `protobuf:"bytes,9,opt,name=sys_cpu_usage,json=sysCpuUsage,proto3" json:"sys_cpu_usage,omitempty"`
+	SysMemFreeKb                        *wrapperspb.FloatValue    `protobuf:"bytes,10,opt,name=sys_mem_free_kb,json=sysMemFreeKb,proto3" json:"sys_mem_free_kb,omitempty"`
+	SysBootcount                        *wrapperspb.Int32Value    `protobuf:"bytes,11,opt,name=sys_bootcount,json=sysBootcount,proto3" json:"sys_bootcount,omitempty"`
+	SysPartitionsEqual                  *wrapperspb.BoolValue     `protobuf:"bytes,12,opt,name=sys_partitions_equal,json=sysPartitionsEqual,proto3" json:"sys_partitions_equal,omitempty"`
+	SysUptimeSeconds                    *wrapperspb.UInt32Value   `protobuf:"bytes,13,opt,name=sys_uptime_seconds,json=sysUptimeSeconds,proto3" json:"sys_uptime_seconds,omitempty"`
+	SysAntiRollbackVersion              *wrapperspb.Int32Value    `protobuf:"bytes,14,opt,name=sys_anti_rollback_version,json=sysAntiRollbackVersion,proto3" json:"sys_anti_rollback_version,omitempty"`
+	Radios_2GhzChannel                  *wrapperspb.UInt32Value   `protobuf:"bytes,100,opt,name=radios_2ghz_channel,json=radios2ghzChannel,proto3" json:"radios_2ghz_channel,omitempty"`
+	Radios_2GhzAntenna1Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,101,opt,name=radios_2ghz_antenna1_rssi,json=radios2ghzAntenna1Rssi,proto3" json:"radios_2ghz_antenna1_rssi,omitempty"`
+	Radios_2GhzAntenna2Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,102,opt,name=radios_2ghz_antenna2_rssi,json=radios2ghzAntenna2Rssi,proto3" json:"radios_2ghz_antenna2_rssi,omitempty"`
+	Radios_2GhzAntenna3Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,103,opt,name=radios_2ghz_antenna3_rssi,json=radios2ghzAntenna3Rssi,proto3" json:"radios_2ghz_antenna3_rssi,omitempty"`
+	Radios_2GhzIfaceCount               *wrapperspb.UInt32Value   `protobuf:"bytes,104,opt,name=radios_2ghz_iface_count,json=radios2ghzIfaceCount,proto3" json:"radios_2ghz_iface_count,omitempty"`
+	Radios_2GhzChanBusyFraction         *wrapperspb.FloatValue    `protobuf:"bytes,105,opt,name=radios_2ghz_chan_busy_fraction,json=radios2ghzChanBusyFraction,proto3" json:"radios_2ghz_chan_busy_fraction,omitempty"`
+	Radios_2GhzEdccaFraction            *wrapperspb.FloatValue    `protobuf:"bytes,106,opt,name=radios_2ghz_edcca_fraction,json=radios2ghzEdccaFraction,proto3" json:"radios_2ghz_edcca_fraction,omitempty"`
+	Radios_2GhzOverlappingBssFraction   *wrapperspb.FloatValue    `protobuf:"bytes,107,opt,name=radios_2ghz_overlapping_bss_fraction,json=radios2ghzOverlappingBssFraction,proto3" json:"radios_2ghz_overlapping_bss_fraction,omitempty"`
+	Radios_2GhzRxBytes                  *wrapperspb.Int64Value    `protobuf:"bytes,108,opt,name=radios_2ghz_rx_bytes,json=radios2ghzRxBytes,proto3" json:"radios_2ghz_rx_bytes,omitempty"`
+	Radios_2GhzRxPackets                *wrapperspb.Int64Value    `protobuf:"bytes,109,opt,name=radios_2ghz_rx_packets,json=radios2ghzRxPackets,proto3" json:"radios_2ghz_rx_packets,omitempty"`
+	Radios_2GhzRxErrors                 *wrapperspb.Int64Value    `protobuf:"bytes,110,opt,name=radios_2ghz_rx_errors,json=radios2ghzRxErrors,proto3" json:"radios_2ghz_rx_errors,omitempty"`
+	Radios_2GhzRxFrameErrors            *wrapperspb.Int64Value    `protobuf:"bytes,111,opt,name=radios_2ghz_rx_frame_errors,json=radios2ghzRxFrameErrors,proto3" json:"radios_2ghz_rx_frame_errors,omitempty"`
+	Radios_2GhzRxPacketErrorRate        *wrapperspb.FloatValue    `protobuf:"bytes,112,opt,name=radios_2ghz_rx_packet_error_rate,json=radios2ghzRxPacketErrorRate,proto3" json:"radios_2ghz_rx_packet_error_rate,omitempty"`
+	Radios_2GhzRxAirtimeFraction        *wrapperspb.FloatValue    `protobuf:"bytes,113,opt,name=radios_2ghz_rx_airtime_fraction,json=radios2ghzRxAirtimeFraction,proto3" json:"radios_2ghz_rx_airtime_fraction,omitempty"`
+	Radios_2GhzTxBytes                  *wrapperspb.Int64Value    `protobuf:"bytes,114,opt,name=radios_2ghz_tx_bytes,json=radios2ghzTxBytes,proto3" json:"radios_2ghz_tx_bytes,omitempty"`
+	Radios_2GhzTxPackets                *wrapperspb.Int64Value    `protobuf:"bytes,115,opt,name=radios_2ghz_tx_packets,json=radios2ghzTxPackets,proto3" json:"radios_2ghz_tx_packets,omitempty"`
+	Radios_2GhzTxErrors                 *wrapperspb.Int64Value    `protobuf:"bytes,116,opt,name=radios_2ghz_tx_errors,json=radios2ghzTxErrors,proto3" json:"radios_2ghz_tx_errors,omitempty"`
+	Radios_2GhzTxPacketErrorRate        *wrapperspb.FloatValue    `protobuf:"bytes,117,opt,name=radios_2ghz_tx_packet_error_rate,json=radios2ghzTxPacketErrorRate,proto3" json:"radios_2ghz_tx_packet_error_rate,omitempty"`
+	Radios_2GhzTxAirtimeFraction        *wrapperspb.FloatValue    `protobuf:"bytes,118,opt,name=radios_2ghz_tx_airtime_fraction,json=radios2ghzTxAirtimeFraction,proto3" json:"radios_2ghz_tx_airtime_fraction,omitempty"`
+	Radios_5GhzChannel                  *wrapperspb.UInt32Value   `protobuf:"bytes,119,opt,name=radios_5ghz_channel,json=radios5ghzChannel,proto3" json:"radios_5ghz_channel,omitempty"`
+	Radios_5GhzAntenna1Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,120,opt,name=radios_5ghz_antenna1_rssi,json=radios5ghzAntenna1Rssi,proto3" json:"radios_5ghz_antenna1_rssi,omitempty"`
+	Radios_5GhzAntenna2Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,121,opt,name=radios_5ghz_antenna2_rssi,json=radios5ghzAntenna2Rssi,proto3" json:"radios_5ghz_antenna2_rssi,omitempty"`
+	Radios_5GhzAntenna3Rssi             *wrapperspb.FloatValue    `protobuf:"bytes,122,opt,name=radios_5ghz_antenna3_rssi,json=radios5ghzAntenna3Rssi,proto3" json:"radios_5ghz_antenna3_rssi,omitempty"`
+	Radios_5GhzIfaceCount               *wrapperspb.UInt32Value   `protobuf:"bytes,123,opt,name=radios_5ghz_iface_count,json=radios5ghzIfaceCount,proto3" json:"radios_5ghz_iface_count,omitempty"`
+	Radios_5GhzChanBusyFraction         *wrapperspb.FloatValue    `protobuf:"bytes,124,opt,name=radios_5ghz_chan_busy_fraction,json=radios5ghzChanBusyFraction,proto3" json:"radios_5ghz_chan_busy_fraction,omitempty"`
+	Radios_5GhzEdccaFraction            *wrapperspb.FloatValue    `protobuf:"bytes,125,opt,name=radios_5ghz_edcca_fraction,json=radios5ghzEdccaFraction,proto3" json:"radios_5ghz_edcca_fraction,omitempty"`
+	Radios_5GhzOverlappingBssFraction   *wrapperspb.FloatValue    `protobuf:"bytes,126,opt,name=radios_5ghz_overlapping_bss_fraction,json=radios5ghzOverlappingBssFraction,proto3" json:"radios_5ghz_overlapping_bss_fraction,omitempty"`
+	Radios_5GhzRxBytes                  *wrapperspb.Int64Value    `protobuf:"bytes,127,opt,name=radios_5ghz_rx_bytes,json=radios5ghzRxBytes,proto3" json:"radios_5ghz_rx_bytes,omitempty"`
+	Radios_5GhzRxPackets                *wrapperspb.Int64Value    `protobuf:"bytes,128,opt,name=radios_5ghz_rx_packets,json=radios5ghzRxPackets,proto3" json:"radios_5ghz_rx_packets,omitempty"`
+	Radios_5GhzRxErrors                 *wrapperspb.Int64Value    `protobuf:"bytes,129,opt,name=radios_5ghz_rx_errors,json=radios5ghzRxErrors,proto3" json:"radios_5ghz_rx_errors,omitempty"`
+	Radios_5GhzRxFrameErrors            *wrapperspb.Int64Value    `protobuf:"bytes,130,opt,name=radios_5ghz_rx_frame_errors,json=radios5ghzRxFrameErrors,proto3" json:"radios_5ghz_rx_frame_errors,omitempty"`
+	Radios_5GhzRxPacketErrorRate        *wrapperspb.FloatValue    `protobuf:"bytes,131,opt,name=radios_5ghz_rx_packet_error_rate,json=radios5ghzRxPacketErrorRate,proto3" json:"radios_5ghz_rx_packet_error_rate,omitempty"`
+	Radios_5GhzRxAirtimeFraction        *wrapperspb.FloatValue    `protobuf:"bytes,132,opt,name=radios_5ghz_rx_airtime_fraction,json=radios5ghzRxAirtimeFraction,proto3" json:"radios_5ghz_rx_airtime_fraction,omitempty"`
+	Radios_5GhzTxBytes                  *wrapperspb.Int64Value    `protobuf:"bytes,133,opt,name=radios_5ghz_tx_bytes,json=radios5ghzTxBytes,proto3" json:"radios_5ghz_tx_bytes,omitempty"`
+	Radios_5GhzTxPackets                *wrapperspb.Int64Value    `protobuf:"bytes,134,opt,name=radios_5ghz_tx_packets,json=radios5ghzTxPackets,proto3" json:"radios_5ghz_tx_packets,omitempty"`
+	Radios_5GhzTxErrors                 *wrapperspb.Int64Value    `protobuf:"bytes,135,opt,name=radios_5ghz_tx_errors,json=radios5ghzTxErrors,proto3" json:"radios_5ghz_tx_errors,omitempty"`
+	Radios_5GhzTxPacketErrorRate        *wrapperspb.FloatValue    `protobuf:"bytes,136,opt,name=radios_5ghz_tx_packet_error_rate,json=radios5ghzTxPacketErrorRate,proto3" json:"radios_5ghz_tx_packet_error_rate,omitempty"`
+	Radios_5GhzTxAirtimeFraction        *wrapperspb.FloatValue    `protobuf:"bytes,137,opt,name=radios_5ghz_tx_airtime_fraction,json=radios5ghzTxAirtimeFraction,proto3" json:"radios_5ghz_tx_airtime_fraction,omitempty"`
+	Radios_2GhzThermalTemp              *wrapperspb.FloatValue    `protobuf:"bytes,200,opt,name=radios_2ghz_thermal_temp,json=radios2ghzThermalTemp,proto3" json:"radios_2ghz_thermal_temp,omitempty"`
+	Radios_5GhzThermalTemp              *wrapperspb.FloatValue    `protobuf:"bytes,201,opt,name=radios_5ghz_thermal_temp,json=radios5ghzThermalTemp,proto3" json:"radios_5ghz_thermal_temp,omitempty"`
+	Radios_2GhzThermalDutyCycle         *wrapperspb.FloatValue    `protobuf:"bytes,202,opt,name=radios_2ghz_thermal_duty_cycle,json=radios2ghzThermalDutyCycle,proto3" json:"radios_2ghz_thermal_duty_cycle,omitempty"`
+	Radios_5GhzThermalDutyCycle         *wrapperspb.FloatValue    `protobuf:"bytes,203,opt,name=radios_5ghz_thermal_duty_cycle,json=radios5ghzThermalDutyCycle,proto3" json:"radios_5ghz_thermal_duty_cycle,omitempty"`
+	Radios_2GhzThermalThrottledSeconds  *wrapperspb.UInt32Value   `protobuf:"bytes,204,opt,name=radios_2ghz_thermal_throttled_seconds,json=radios2ghzThermalThrottledSeconds,proto3" json:"radios_2ghz_thermal_throttled_seconds,omitempty"`
+	Radios_5GhzThermalThrottledSeconds  *wrapperspb.UInt32Value   `protobuf:"bytes,205,opt,name=radios_5ghz_thermal_throttled_seconds,json=radios5ghzThermalThrottledSeconds,proto3" json:"radios_5ghz_thermal_throttled_seconds,omitempty"`
+	IfacesLanEthRxBytes                 *wrapperspb.Int64Value    `protobuf:"bytes,300,opt,name=ifaces_lan_eth_rx_bytes,json=ifacesLanEthRxBytes,proto3" json:"ifaces_lan_eth_rx_bytes,omitempty"`
+	IfacesLanEthRxPackets               *wrapperspb.Int64Value    `protobuf:"bytes,301,opt,name=ifaces_lan_eth_rx_packets,json=ifacesLanEthRxPackets,proto3" json:"ifaces_lan_eth_rx_packets,omitempty"`
+	IfacesLanEthRxErrors                *wrapperspb.Int64Value    `protobuf:"bytes,302,opt,name=ifaces_lan_eth_rx_errors,json=ifacesLanEthRxErrors,proto3" json:"ifaces_lan_eth_rx_errors,omitempty"`
+	IfacesLanEthRxFrameErrors           *wrapperspb.Int64Value    `protobuf:"bytes,303,opt,name=ifaces_lan_eth_rx_frame_errors,json=ifacesLanEthRxFrameErrors,proto3" json:"ifaces_lan_eth_rx_frame_errors,omitempty"`
+	IfacesLanEthTxBytes                 *wrapperspb.Int64Value    `protobuf:"bytes,304,opt,name=ifaces_lan_eth_tx_bytes,json=ifacesLanEthTxBytes,proto3" json:"ifaces_lan_eth_tx_bytes,omitempty"`
+	IfacesLanEthTxPackets               *wrapperspb.Int64Value    `protobuf:"bytes,305,opt,name=ifaces_lan_eth_tx_packets,json=ifacesLanEthTxPackets,proto3" json:"ifaces_lan_eth_tx_packets,omitempty"`
+	IfacesLanEthTxErrors                *wrapperspb.Int64Value    `protobuf:"bytes,306,opt,name=ifaces_lan_eth_tx_errors,json=ifacesLanEthTxErrors,proto3" json:"ifaces_lan_eth_tx_errors,omitempty"`
+	IfacesWanEthRxBytes                 *wrapperspb.Int64Value    `protobuf:"bytes,307,opt,name=ifaces_wan_eth_rx_bytes,json=ifacesWanEthRxBytes,proto3" json:"ifaces_wan_eth_rx_bytes,omitempty"`
+	IfacesWanEthRxPackets               *wrapperspb.Int64Value    `protobuf:"bytes,308,opt,name=ifaces_wan_eth_rx_packets,json=ifacesWanEthRxPackets,proto3" json:"ifaces_wan_eth_rx_packets,omitempty"`
+	IfacesWanEthRxErrors                *wrapperspb.Int64Value    `protobuf:"bytes,309,opt,name=ifaces_wan_eth_rx_errors,json=ifacesWanEthRxErrors,proto3" json:"ifaces_wan_eth_rx_errors,omitempty"`
+	IfacesWanEthRxFrameErrors           *wrapperspb.Int64Value    `protobuf:"bytes,310,opt,name=ifaces_wan_eth_rx_frame_errors,json=ifacesWanEthRxFrameErrors,proto3" json:"ifaces_wan_eth_rx_frame_errors,omitempty"`
+	IfacesWanEthTxBytes                 *wrapperspb.Int64Value    `protobuf:"bytes,311,opt,name=ifaces_wan_eth_tx_bytes,json=ifacesWanEthTxBytes,proto3" json:"ifaces_wan_eth_tx_bytes,omitempty"`
+	IfacesWanEthTxPackets               *wrapperspb.Int64Value    `protobuf:"bytes,312,opt,name=ifaces_wan_eth_tx_packets,json=ifacesWanEthTxPackets,proto3" json:"ifaces_wan_eth_tx_packets,omitempty"`
+	IfacesWanEthTxErrors                *wrapperspb.Int64Value    `protobuf:"bytes,313,opt,name=ifaces_wan_eth_tx_errors,json=ifacesWanEthTxErrors,proto3" json:"ifaces_wan_eth_tx_errors,omitempty"`
+	Clients                             *wrapperspb.UInt32Value   `protobuf:"bytes,400,opt,name=clients,proto3" json:"clients,omitempty"`
+	Clients_2Ghz                        *wrapperspb.UInt32Value   `protobuf:"bytes,401,opt,name=clients_2ghz,json=clients2ghz,proto3" json:"clients_2ghz,omitempty"`
+	Clients_5Ghz                        *wrapperspb.UInt32Value   `protobuf:"bytes,402,opt,name=clients_5ghz,json=clients5ghz,proto3" json:"clients_5ghz,omitempty"`
+	ClientsEth                          *wrapperspb.UInt32Value   `protobuf:"bytes,403,opt,name=clients_eth,json=clientsEth,proto3" json:"clients_eth,omitempty"`
+	ClientsRepeater                     *wrapperspb.UInt32Value   `protobuf:"bytes,404,opt,name=clients_repeater,json=clientsRepeater,proto3" json:"clients_repeater,omitempty"`
+	ClientsRepeater_2Ghz                *wrapperspb.UInt32Value   `protobuf:"bytes,405,opt,name=clients_repeater_2ghz,json=clientsRepeater2ghz,proto3" json:"clients_repeater_2ghz,omitempty"`
+	ClientsRepeater_5Ghz                *wrapperspb.UInt32Value   `protobuf:"bytes,406,opt,name=clients_repeater_5ghz,json=clientsRepeater5ghz,proto3" json:"clients_repeater_5ghz,omitempty"`
+	ClientsRepeaterEth                  *wrapperspb.UInt32Value   `protobuf:"bytes,407,opt,name=clients_repeater_eth,json=clientsRepeaterEth,proto3" json:"clients_repeater_eth,omitempty"`
+	MeshHops                            *wrapperspb.UInt32Value   `protobuf:"bytes,408,opt,name=mesh_hops,json=meshHops,proto3" json:"mesh_hops,omitempty"`
+	MeshOneHopRssiAvg_2Ghz              *wrapperspb.FloatValue    `protobuf:"bytes,409,opt,name=mesh_one_hop_rssi_avg_2ghz,json=meshOneHopRssiAvg2ghz,proto3" json:"mesh_one_hop_rssi_avg_2ghz,omitempty"`
+	MeshOneHopRssiAvg_5Ghz              *wrapperspb.FloatValue    `protobuf:"bytes,410,opt,name=mesh_one_hop_rssi_avg_5ghz,json=meshOneHopRssiAvg5ghz,proto3" json:"mesh_one_hop_rssi_avg_5ghz,omitempty"`
+	MeshTwoHopRssiAvg_2Ghz              *wrapperspb.FloatValue    `protobuf:"bytes,411,opt,name=mesh_two_hop_rssi_avg_2ghz,json=meshTwoHopRssiAvg2ghz,proto3" json:"mesh_two_hop_rssi_avg_2ghz,omitempty"`
+	MeshTwoHopRssiAvg_5Ghz              *wrapperspb.FloatValue    `protobuf:"bytes,412,opt,name=mesh_two_hop_rssi_avg_5ghz,json=meshTwoHopRssiAvg5ghz,proto3" json:"mesh_two_hop_rssi_avg_5ghz,omitempty"`
+	PingSecondsSinceLast_1SOutage       *wrapperspb.FloatValue    `protobuf:"bytes,600,opt,name=ping_seconds_since_last_1s_outage,json=pingSecondsSinceLast1sOutage,proto3" json:"ping_seconds_since_last_1s_outage,omitempty"`
+	PingSecondsSinceLast_2SOutage       *wrapperspb.FloatValue    `protobuf:"bytes,601,opt,name=ping_seconds_since_last_2s_outage,json=pingSecondsSinceLast2sOutage,proto3" json:"ping_seconds_since_last_2s_outage,omitempty"`
+	PingSecondsSinceLast_5SOutage       *wrapperspb.FloatValue    `protobuf:"bytes,602,opt,name=ping_seconds_since_last_5s_outage,json=pingSecondsSinceLast5sOutage,proto3" json:"ping_seconds_since_last_5s_outage,omitempty"`
+	PingSecondsSinceLast_60SOutage      *wrapperspb.FloatValue    `protobuf:"bytes,603,opt,name=ping_seconds_since_last_60s_outage,json=pingSecondsSinceLast60sOutage,proto3" json:"ping_seconds_since_last_60s_outage,omitempty"`
+	PingSecondsSinceLast_300SOutage     *wrapperspb.FloatValue    `protobuf:"bytes,604,opt,name=ping_seconds_since_last_300s_outage,json=pingSecondsSinceLast300sOutage,proto3" json:"ping_seconds_since_last_300s_outage,omitempty"`
+	PingDropRate                        *wrapperspb.FloatValue    `protobuf:"bytes,605,opt,name=ping_drop_rate,json=pingDropRate,proto3" json:"ping_drop_rate,omitempty"`
+	PingDropRateLast_1H                 *wrapperspb.FloatValue    `protobuf:"bytes,606,opt,name=ping_drop_rate_last_1h,json=pingDropRateLast1h,proto3" json:"ping_drop_rate_last_1h,omitempty"`
+	PingLatency                         *wrapperspb.FloatValue    `protobuf:"bytes,607,opt,name=ping_latency,json=pingLatency,proto3" json:"ping_latency,omitempty"`
+	PingLatencyLast_1H                  *wrapperspb.FloatValue    `protobuf:"bytes,618,opt,name=ping_latency_last_1h,json=pingLatencyLast1h,proto3" json:"ping_latency_last_1h,omitempty"`
+	PingDishSecondsSinceLast_1SOutage   *wrapperspb.FloatValue    `protobuf:"bytes,610,opt,name=ping_dish_seconds_since_last_1s_outage,json=pingDishSecondsSinceLast1sOutage,proto3" json:"ping_dish_seconds_since_last_1s_outage,omitempty"`
+	PingDishSecondsSinceLast_2SOutage   *wrapperspb.FloatValue    `protobuf:"bytes,611,opt,name=ping_dish_seconds_since_last_2s_outage,json=pingDishSecondsSinceLast2sOutage,proto3" json:"ping_dish_seconds_since_last_2s_outage,omitempty"`
+	PingDishSecondsSinceLast_5SOutage   *wrapperspb.FloatValue    `protobuf:"bytes,612,opt,name=ping_dish_seconds_since_last_5s_outage,json=pingDishSecondsSinceLast5sOutage,proto3" json:"ping_dish_seconds_since_last_5s_outage,omitempty"`
+	PingDishSecondsSinceLast_60SOutage  *wrapperspb.FloatValue    `protobuf:"bytes,613,opt,name=ping_dish_seconds_since_last_60s_outage,json=pingDishSecondsSinceLast60sOutage,proto3" json:"ping_dish_seconds_since_last_60s_outage,omitempty"`
+	PingDishSecondsSinceLast_300SOutage *wrapperspb.FloatValue    `protobuf:"bytes,614,opt,name=ping_dish_seconds_since_last_300s_outage,json=pingDishSecondsSinceLast300sOutage,proto3" json:"ping_dish_seconds_since_last_300s_outage,omitempty"`
+	PingDishDropRate                    *wrapperspb.FloatValue    `protobuf:"bytes,615,opt,name=ping_dish_drop_rate,json=pingDishDropRate,proto3" json:"ping_dish_drop_rate,omitempty"`
+	PingDishDropRateLast_1H             *wrapperspb.FloatValue    `protobuf:"bytes,616,opt,name=ping_dish_drop_rate_last_1h,json=pingDishDropRateLast1h,proto3" json:"ping_dish_drop_rate_last_1h,omitempty"`
+	PingDishLatency                     *wrapperspb.FloatValue    `protobuf:"bytes,617,opt,name=ping_dish_latency,json=pingDishLatency,proto3" json:"ping_dish_latency,omitempty"`
+	PingDishLatencyLast_1H              *wrapperspb.FloatValue    `protobuf:"bytes,619,opt,name=ping_dish_latency_last_1h,json=pingDishLatencyLast1h,proto3" json:"ping_dish_latency_last_1h,omitempty"`
+	ClientSpeedtestRouterDownloadMbps   *wrapperspb.FloatValue    `protobuf:"bytes,700,opt,name=client_speedtest_router_download_mbps,json=clientSpeedtestRouterDownloadMbps,proto3" json:"client_speedtest_router_download_mbps,omitempty"`
+	ClientSpeedtestRouterUploadMbps     *wrapperspb.FloatValue    `protobuf:"bytes,701,opt,name=client_speedtest_router_upload_mbps,json=clientSpeedtestRouterUploadMbps,proto3" json:"client_speedtest_router_upload_mbps,omitempty"`
+	ClientSpeedtestRouterRssi           *wrapperspb.FloatValue    `protobuf:"bytes,702,opt,name=client_speedtest_router_rssi,json=clientSpeedtestRouterRssi,proto3" json:"client_speedtest_router_rssi,omitempty"`
+	ClientSpeedtestWifiDownloadMbps     *wrapperspb.FloatValue    `protobuf:"bytes,703,opt,name=client_speedtest_wifi_download_mbps,json=clientSpeedtestWifiDownloadMbps,proto3" json:"client_speedtest_wifi_download_mbps,omitempty"`
+	ClientSpeedtestWifiUploadMbps       *wrapperspb.FloatValue    `protobuf:"bytes,704,opt,name=client_speedtest_wifi_upload_mbps,json=clientSpeedtestWifiUploadMbps,proto3" json:"client_speedtest_wifi_upload_mbps,omitempty"`
+	ClientSpeedtestClientDownloadMbps   *wrapperspb.FloatValue    `protobuf:"bytes,705,opt,name=client_speedtest_client_download_mbps,json=clientSpeedtestClientDownloadMbps,proto3" json:"client_speedtest_client_download_mbps,omitempty"`
+	ClientSpeedtestClientUploadMbps     *wrapperspb.FloatValue    `protobuf:"bytes,706,opt,name=client_speedtest_client_upload_mbps,json=clientSpeedtestClientUploadMbps,proto3" json:"client_speedtest_client_upload_mbps,omitempty"`
+	ClientSpeedtestClientRssi           *wrapperspb.FloatValue    `protobuf:"bytes,707,opt,name=client_speedtest_client_rssi,json=clientSpeedtestClientRssi,proto3" json:"client_speedtest_client_rssi,omitempty"`
+	ClientSpeedtestClientIface          *wrapperspb.UInt32Value   `protobuf:"bytes,708,opt,name=client_speedtest_client_iface,json=clientSpeedtestClientIface,proto3" json:"client_speedtest_client_iface,omitempty"`
+	ClientSpeedtestClientOui            *wrapperspb.StringValue   `protobuf:"bytes,709,opt,name=client_speedtest_client_oui,json=clientSpeedtestClientOui,proto3" json:"client_speedtest_client_oui,omitempty"`
+	ClientSpeedtestClientTxRate         *wrapperspb.UInt32Value   `protobuf:"bytes,710,opt,name=client_speedtest_client_tx_rate,json=clientSpeedtestClientTxRate,proto3" json:"client_speedtest_client_tx_rate,omitempty"`
+	ClientSpeedtestClientRxRate         *wrapperspb.UInt32Value   `protobuf:"bytes,711,opt,name=client_speedtest_client_rx_rate,json=clientSpeedtestClientRxRate,proto3" json:"client_speedtest_client_rx_rate,omitempty"`
+	ClientSpeedtestClientPlatformType   *wrapperspb.UInt32Value   `protobuf:"bytes,712,opt,name=client_speedtest_client_platform_type,json=clientSpeedtestClientPlatformType,proto3" json:"client_speedtest_client_platform_type,omitempty"`
+	SpeedtestTcp_8DownloadMbpsAvg       *wrapperspb.FloatValue    `protobuf:"bytes,800,opt,name=speedtest_tcp_8_download_mbps_avg,json=speedtestTcp8DownloadMbpsAvg,proto3" json:"speedtest_tcp_8_download_mbps_avg,omitempty"`
+	SpeedtestTcp_8DownloadMbpsMax       *wrapperspb.FloatValue    `protobuf:"bytes,801,opt,name=speedtest_tcp_8_download_mbps_max,json=speedtestTcp8DownloadMbpsMax,proto3" json:"speedtest_tcp_8_download_mbps_max,omitempty"`
+	SpeedtestTcp_8UploadMbpsAvg         *wrapperspb.FloatValue    `protobuf:"bytes,802,opt,name=speedtest_tcp_8_upload_mbps_avg,json=speedtestTcp8UploadMbpsAvg,proto3" json:"speedtest_tcp_8_upload_mbps_avg,omitempty"`
+	SpeedtestTcp_8UploadMbpsMax         *wrapperspb.FloatValue    `protobuf:"bytes,803,opt,name=speedtest_tcp_8_upload_mbps_max,json=speedtestTcp8UploadMbpsMax,proto3" json:"speedtest_tcp_8_upload_mbps_max,omitempty"`
+	SpeedtestTcp_64DownloadMbpsAvg      *wrapperspb.FloatValue    `protobuf:"bytes,804,opt,name=speedtest_tcp_64_download_mbps_avg,json=speedtestTcp64DownloadMbpsAvg,proto3" json:"speedtest_tcp_64_download_mbps_avg,omitempty"`
+	SpeedtestTcp_64DownloadMbpsMax      *wrapperspb.FloatValue    `protobuf:"bytes,805,opt,name=speedtest_tcp_64_download_mbps_max,json=speedtestTcp64DownloadMbpsMax,proto3" json:"speedtest_tcp_64_download_mbps_max,omitempty"`
+	SpeedtestTcp_64UploadMbpsAvg        *wrapperspb.FloatValue    `protobuf:"bytes,806,opt,name=speedtest_tcp_64_upload_mbps_avg,json=speedtestTcp64UploadMbpsAvg,proto3" json:"speedtest_tcp_64_upload_mbps_avg,omitempty"`
+	SpeedtestTcp_64UploadMbpsMax        *wrapperspb.FloatValue    `protobuf:"bytes,807,opt,name=speedtest_tcp_64_upload_mbps_max,json=speedtestTcp64UploadMbpsMax,proto3" json:"speedtest_tcp_64_upload_mbps_max,omitempty"`
+	DishCellId                          *wrapperspb.UInt32Value   `protobuf:"bytes,900,opt,name=dish_cell_id,json=dishCellId,proto3" json:"dish_cell_id,omitempty"`
+	ConfigSetupComplete                 *wrapperspb.BoolValue     `protobuf:"bytes,1000,opt,name=config_setup_complete,json=configSetupComplete,proto3" json:"config_setup_complete,omitempty"`
+	ConfigBandsSplit                    *wrapperspb.BoolValue     `protobuf:"bytes,1001,opt,name=config_bands_split,json=configBandsSplit,proto3" json:"config_bands_split,omitempty"`
+	ConfigIsRepeater                    *wrapperspb.BoolValue     `protobuf:"bytes,1002,opt,name=config_is_repeater,json=configIsRepeater,proto3" json:"config_is_repeater,omitempty"`
+	ConfigOpenNetwork                   *wrapperspb.BoolValue     `protobuf:"bytes,1003,opt,name=config_open_network,json=configOpenNetwork,proto3" json:"config_open_network,omitempty"`
+	ConfigIsAviation                    *wrapperspb.BoolValue     `protobuf:"bytes,1004,opt,name=config_is_aviation,json=configIsAviation,proto3" json:"config_is_aviation,omitempty"`
+	ConfigSecureDns                     *wrapperspb.BoolValue     `protobuf:"bytes,1005,opt,name=config_secure_dns,json=configSecureDns,proto3" json:"config_secure_dns,omitempty"`
+	ConfigLegacy                        *wrapperspb.BoolValue     `protobuf:"bytes,1006,opt,name=config_legacy,json=configLegacy,proto3" json:"config_legacy,omitempty"`
+	ConfigApMode                        *wrapperspb.BoolValue     `protobuf:"bytes,1007,opt,name=config_ap_mode,json=configApMode,proto3" json:"config_ap_mode,omitempty"`
+	ConfigDfsEnabled                    *wrapperspb.BoolValue     `protobuf:"bytes,1008,opt,name=config_dfs_enabled,json=configDfsEnabled,proto3" json:"config_dfs_enabled,omitempty"`
+	ConfigNetworkNameIsDefault          *wrapperspb.BoolValue     `protobuf:"bytes,1009,opt,name=config_network_name_is_default,json=configNetworkNameIsDefault,proto3" json:"config_network_name_is_default,omitempty"`
+	ConfigRemoteSshEnabled              *wrapperspb.BoolValue     `protobuf:"bytes,1010,opt,name=config_remote_ssh_enabled,json=configRemoteSshEnabled,proto3" json:"config_remote_ssh_enabled,omitempty"`
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) Reset() {
+	*x = StarlinkRoutersHourlyMetricsV2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StarlinkRoutersHourlyMetricsV2) ProtoMessage() {}
+
+func (x *StarlinkRoutersHourlyMetricsV2) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[38]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StarlinkRoutersHourlyMetricsV2.ProtoReflect.Descriptor instead.
+func (*StarlinkRoutersHourlyMetricsV2) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetId() *wrapperspb.StringValue {
+	if x != nil {
+		return x.Id
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetTimestampDate() *wrapperspb.StringValue {
+	if x != nil {
+		return x.TimestampDate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetTimestampHour() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.TimestampHour
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetTimestamp() *telemetron.TimestampInfo {
+	if x != nil {
+		return x.Timestamp
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysHwGen() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysHwGen
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysSw() *wrapperspb.StringValue {
+	if x != nil {
+		return x.SysSw
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysCountry() *wrapperspb.StringValue {
+	if x != nil {
+		return x.SysCountry
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysIsDev() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.SysIsDev
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysAllocFds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysAllocFds
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysCpuUsage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SysCpuUsage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysMemFreeKb() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SysMemFreeKb
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysBootcount() *wrapperspb.Int32Value {
+	if x != nil {
+		return x.SysBootcount
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysPartitionsEqual() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.SysPartitionsEqual
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysUptimeSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.SysUptimeSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSysAntiRollbackVersion() *wrapperspb.Int32Value {
+	if x != nil {
+		return x.SysAntiRollbackVersion
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzChannel() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzChannel
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzAntenna1Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna1Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzAntenna2Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna2Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzAntenna3Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzAntenna3Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzIfaceCount() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzIfaceCount
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzChanBusyFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzChanBusyFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzEdccaFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzEdccaFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzOverlappingBssFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzOverlappingBssFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxFrameErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzRxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzRxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzRxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzTxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzTxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzTxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_2GhzTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzTxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzTxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzTxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzTxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzChannel() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzChannel
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzAntenna1Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna1Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzAntenna2Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna2Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzAntenna3Rssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzAntenna3Rssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzIfaceCount() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzIfaceCount
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzChanBusyFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzChanBusyFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzEdccaFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzEdccaFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzOverlappingBssFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzOverlappingBssFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxFrameErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzRxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzRxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzRxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzTxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzTxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzTxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.Radios_5GhzTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzTxPacketErrorRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzTxPacketErrorRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzTxAirtimeFraction() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzTxAirtimeFraction
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzThermalTemp() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzThermalTemp
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzThermalTemp() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzThermalTemp
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzThermalDutyCycle() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_2GhzThermalDutyCycle
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzThermalDutyCycle() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.Radios_5GhzThermalDutyCycle
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_2GhzThermalThrottledSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_2GhzThermalThrottledSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetRadios_5GhzThermalThrottledSeconds() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Radios_5GhzThermalThrottledSeconds
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthRxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthRxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthRxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthRxFrameErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthTxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthTxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesLanEthTxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesLanEthTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthRxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthRxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthRxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthRxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthRxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthRxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthRxFrameErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthRxFrameErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthTxBytes() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthTxBytes
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthTxPackets() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthTxPackets
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetIfacesWanEthTxErrors() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.IfacesWanEthTxErrors
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClients() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClients_2Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClients_5Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.Clients_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientsEth() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsEth
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientsRepeater() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientsRepeater_2Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientsRepeater_5Ghz() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeater_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientsRepeaterEth() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientsRepeaterEth
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetMeshHops() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.MeshHops
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetMeshOneHopRssiAvg_2Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshOneHopRssiAvg_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetMeshOneHopRssiAvg_5Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshOneHopRssiAvg_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetMeshTwoHopRssiAvg_2Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshTwoHopRssiAvg_2Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetMeshTwoHopRssiAvg_5Ghz() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.MeshTwoHopRssiAvg_5Ghz
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingSecondsSinceLast_1SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_1SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingSecondsSinceLast_2SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_2SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingSecondsSinceLast_5SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_5SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingSecondsSinceLast_60SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_60SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingSecondsSinceLast_300SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingSecondsSinceLast_300SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDropRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDropRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDropRateLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDropRateLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingLatency() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingLatency
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingLatencyLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingLatencyLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishSecondsSinceLast_1SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_1SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishSecondsSinceLast_2SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_2SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishSecondsSinceLast_5SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_5SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishSecondsSinceLast_60SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_60SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishSecondsSinceLast_300SOutage() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishSecondsSinceLast_300SOutage
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishDropRate() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishDropRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishDropRateLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishDropRateLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishLatency() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishLatency
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetPingDishLatencyLast_1H() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.PingDishLatencyLast_1H
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestRouterDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestRouterUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestRouterRssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestRouterRssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestWifiDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestWifiDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestWifiUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestWifiUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientDownloadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientDownloadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientUploadMbps() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientUploadMbps
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientRssi() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.ClientSpeedtestClientRssi
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientIface() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientIface
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientOui() *wrapperspb.StringValue {
+	if x != nil {
+		return x.ClientSpeedtestClientOui
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientTxRate() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientTxRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientRxRate() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientRxRate
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetClientSpeedtestClientPlatformType() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.ClientSpeedtestClientPlatformType
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_8DownloadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8DownloadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_8DownloadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8DownloadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_8UploadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8UploadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_8UploadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_8UploadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_64DownloadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64DownloadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_64DownloadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64DownloadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_64UploadMbpsAvg() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64UploadMbpsAvg
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetSpeedtestTcp_64UploadMbpsMax() *wrapperspb.FloatValue {
+	if x != nil {
+		return x.SpeedtestTcp_64UploadMbpsMax
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetDishCellId() *wrapperspb.UInt32Value {
+	if x != nil {
+		return x.DishCellId
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigSetupComplete() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigSetupComplete
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigBandsSplit() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigBandsSplit
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigIsRepeater() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigIsRepeater
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigOpenNetwork() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigOpenNetwork
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigIsAviation() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigIsAviation
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigSecureDns() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigSecureDns
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigLegacy() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigLegacy
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigApMode() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigApMode
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigDfsEnabled() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigDfsEnabled
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigNetworkNameIsDefault() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigNetworkNameIsDefault
+	}
+	return nil
+}
+
+func (x *StarlinkRoutersHourlyMetricsV2) GetConfigRemoteSshEnabled() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.ConfigRemoteSshEnabled
+	}
+	return nil
+}
+
+type StarlinkRouterAlerts struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name   string                    `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Source string                    `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`
+	Active bool                      `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
+	Start  *telemetron.TimestampInfo `protobuf:"bytes,4,opt,name=start,proto3" json:"start,omitempty"`
+	End    *telemetron.TimestampInfo `protobuf:"bytes,5,opt,name=end,proto3" json:"end,omitempty"`
+}
+
+func (x *StarlinkRouterAlerts) Reset() {
+	*x = StarlinkRouterAlerts{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StarlinkRouterAlerts) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StarlinkRouterAlerts) ProtoMessage() {}
+
+func (x *StarlinkRouterAlerts) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[39]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StarlinkRouterAlerts.ProtoReflect.Descriptor instead.
+func (*StarlinkRouterAlerts) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *StarlinkRouterAlerts) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *StarlinkRouterAlerts) GetSource() string {
+	if x != nil {
+		return x.Source
+	}
+	return ""
+}
+
+func (x *StarlinkRouterAlerts) GetActive() bool {
+	if x != nil {
+		return x.Active
+	}
+	return false
+}
+
+func (x *StarlinkRouterAlerts) GetStart() *telemetron.TimestampInfo {
+	if x != nil {
+		return x.Start
+	}
+	return nil
+}
+
+func (x *StarlinkRouterAlerts) GetEnd() *telemetron.TimestampInfo {
+	if x != nil {
+		return x.End
+	}
+	return nil
+}
+
+type WifiClient_RxStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Bytes                  uint64  `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
+	CountErrors            uint64  `protobuf:"varint,2,opt,name=count_errors,json=countErrors,proto3" json:"count_errors,omitempty"`
+	Nss                    int32   `protobuf:"varint,3,opt,name=nss,proto3" json:"nss,omitempty"`
+	RateMbps               uint32  `protobuf:"varint,8,opt,name=rate_mbps,json=rateMbps,proto3" json:"rate_mbps,omitempty"`
+	Mcs                    uint32  `protobuf:"varint,5,opt,name=mcs,proto3" json:"mcs,omitempty"`
+	Bandwidth              uint32  `protobuf:"varint,6,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
+	GuardNs                uint32  `protobuf:"varint,7,opt,name=guard_ns,json=guardNs,proto3" json:"guard_ns,omitempty"`
+	AirtimeFractionLast_1S float32 `protobuf:"fixed32,9,opt,name=airtime_fraction_last_1s,json=airtimeFractionLast1s,proto3" json:"airtime_fraction_last_1s,omitempty"`
+	SampledPackets         uint32  `protobuf:"varint,10,opt,name=sampled_packets,json=sampledPackets,proto3" json:"sampled_packets,omitempty"`
+	SampledPacketsRetried  uint32  `protobuf:"varint,11,opt,name=sampled_packets_retried,json=sampledPacketsRetried,proto3" json:"sampled_packets_retried,omitempty"`
+	SampledPacketsDropped  uint32  `protobuf:"varint,12,opt,name=sampled_packets_dropped,json=sampledPacketsDropped,proto3" json:"sampled_packets_dropped,omitempty"`
+}
+
+func (x *WifiClient_RxStats) Reset() {
+	*x = WifiClient_RxStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiClient_RxStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiClient_RxStats) ProtoMessage() {}
+
+func (x *WifiClient_RxStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[40]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiClient_RxStats.ProtoReflect.Descriptor instead.
+func (*WifiClient_RxStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{18, 0}
+}
+
+func (x *WifiClient_RxStats) GetBytes() uint64 {
+	if x != nil {
+		return x.Bytes
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetCountErrors() uint64 {
+	if x != nil {
+		return x.CountErrors
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetNss() int32 {
+	if x != nil {
+		return x.Nss
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetRateMbps() uint32 {
+	if x != nil {
+		return x.RateMbps
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetMcs() uint32 {
+	if x != nil {
+		return x.Mcs
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetBandwidth() uint32 {
+	if x != nil {
+		return x.Bandwidth
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetGuardNs() uint32 {
+	if x != nil {
+		return x.GuardNs
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetAirtimeFractionLast_1S() float32 {
+	if x != nil {
+		return x.AirtimeFractionLast_1S
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetSampledPackets() uint32 {
+	if x != nil {
+		return x.SampledPackets
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetSampledPacketsRetried() uint32 {
+	if x != nil {
+		return x.SampledPacketsRetried
+	}
+	return 0
+}
+
+func (x *WifiClient_RxStats) GetSampledPacketsDropped() uint32 {
+	if x != nil {
+		return x.SampledPacketsDropped
+	}
+	return 0
+}
+
+type WifiClient_TxStats struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Bytes                  uint64  `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
+	SuccessBytes           uint64  `protobuf:"varint,2,opt,name=success_bytes,json=successBytes,proto3" json:"success_bytes,omitempty"`
+	Nss                    int32   `protobuf:"varint,3,opt,name=nss,proto3" json:"nss,omitempty"`
+	RateMbps               uint32  `protobuf:"varint,8,opt,name=rate_mbps,json=rateMbps,proto3" json:"rate_mbps,omitempty"`
+	Mcs                    uint32  `protobuf:"varint,5,opt,name=mcs,proto3" json:"mcs,omitempty"`
+	Bandwidth              uint32  `protobuf:"varint,6,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
+	GuardNs                uint32  `protobuf:"varint,7,opt,name=guard_ns,json=guardNs,proto3" json:"guard_ns,omitempty"`
+	AirtimeFractionLast_1S float32 `protobuf:"fixed32,9,opt,name=airtime_fraction_last_1s,json=airtimeFractionLast1s,proto3" json:"airtime_fraction_last_1s,omitempty"`
+}
+
+func (x *WifiClient_TxStats) Reset() {
+	*x = WifiClient_TxStats{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiClient_TxStats) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiClient_TxStats) ProtoMessage() {}
+
+func (x *WifiClient_TxStats) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[41]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiClient_TxStats.ProtoReflect.Descriptor instead.
+func (*WifiClient_TxStats) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{18, 1}
+}
+
+func (x *WifiClient_TxStats) GetBytes() uint64 {
+	if x != nil {
+		return x.Bytes
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetSuccessBytes() uint64 {
+	if x != nil {
+		return x.SuccessBytes
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetNss() int32 {
+	if x != nil {
+		return x.Nss
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetRateMbps() uint32 {
+	if x != nil {
+		return x.RateMbps
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetMcs() uint32 {
+	if x != nil {
+		return x.Mcs
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetBandwidth() uint32 {
+	if x != nil {
+		return x.Bandwidth
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetGuardNs() uint32 {
+	if x != nil {
+		return x.GuardNs
+	}
+	return 0
+}
+
+func (x *WifiClient_TxStats) GetAirtimeFractionLast_1S() float32 {
+	if x != nil {
+		return x.AirtimeFractionLast_1S
+	}
+	return 0
+}
+
+type WifiScanResults_Network struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Source           WifiScanResults_Network_Source `protobuf:"varint,1,opt,name=source,proto3,enum=SpaceX.API.Device.WifiScanResults_Network_Source" json:"source,omitempty"`
+	Ssid             string                         `protobuf:"bytes,2,opt,name=ssid,proto3" json:"ssid,omitempty"`
+	Bssid            string                         `protobuf:"bytes,3,opt,name=bssid,proto3" json:"bssid,omitempty"`
+	FrequencyGhz     string                         `protobuf:"bytes,4,opt,name=frequency_ghz,json=frequencyGhz,proto3" json:"frequency_ghz,omitempty"`
+	Channel          int32                          `protobuf:"varint,5,opt,name=channel,proto3" json:"channel,omitempty"`
+	SignalLevelDbm   int32                          `protobuf:"varint,6,opt,name=signal_level_dbm,json=signalLevelDbm,proto3" json:"signal_level_dbm,omitempty"`
+	NoiseLevelDbm    int32                          `protobuf:"varint,7,opt,name=noise_level_dbm,json=noiseLevelDbm,proto3" json:"noise_level_dbm,omitempty"`
+	HasEncryptionKey bool                           `protobuf:"varint,8,opt,name=has_encryption_key,json=hasEncryptionKey,proto3" json:"has_encryption_key,omitempty"`
+	PhyModeStr       string                         `protobuf:"bytes,9,opt,name=phy_mode_str,json=phyModeStr,proto3" json:"phy_mode_str,omitempty"`
+}
+
+func (x *WifiScanResults_Network) Reset() {
+	*x = WifiScanResults_Network{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiScanResults_Network) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiScanResults_Network) ProtoMessage() {}
+
+func (x *WifiScanResults_Network) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[42]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiScanResults_Network.ProtoReflect.Descriptor instead.
+func (*WifiScanResults_Network) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{33, 0}
+}
+
+func (x *WifiScanResults_Network) GetSource() WifiScanResults_Network_Source {
+	if x != nil {
+		return x.Source
+	}
+	return WifiScanResults_Network_UNKNOWN
+}
+
+func (x *WifiScanResults_Network) GetSsid() string {
+	if x != nil {
+		return x.Ssid
+	}
+	return ""
+}
+
+func (x *WifiScanResults_Network) GetBssid() string {
+	if x != nil {
+		return x.Bssid
+	}
+	return ""
+}
+
+func (x *WifiScanResults_Network) GetFrequencyGhz() string {
+	if x != nil {
+		return x.FrequencyGhz
+	}
+	return ""
+}
+
+func (x *WifiScanResults_Network) GetChannel() int32 {
+	if x != nil {
+		return x.Channel
+	}
+	return 0
+}
+
+func (x *WifiScanResults_Network) GetSignalLevelDbm() int32 {
+	if x != nil {
+		return x.SignalLevelDbm
+	}
+	return 0
+}
+
+func (x *WifiScanResults_Network) GetNoiseLevelDbm() int32 {
+	if x != nil {
+		return x.NoiseLevelDbm
+	}
+	return 0
+}
+
+func (x *WifiScanResults_Network) GetHasEncryptionKey() bool {
+	if x != nil {
+		return x.HasEncryptionKey
+	}
+	return false
+}
+
+func (x *WifiScanResults_Network) GetPhyModeStr() string {
+	if x != nil {
+		return x.PhyModeStr
+	}
+	return ""
+}
+
+type WifiPersistentStats_Event struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Count                 uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
+	LastOccurredTimestamp int64  `protobuf:"varint,2,opt,name=last_occurred_timestamp,json=lastOccurredTimestamp,proto3" json:"last_occurred_timestamp,omitempty"`
+}
+
+func (x *WifiPersistentStats_Event) Reset() {
+	*x = WifiPersistentStats_Event{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiPersistentStats_Event) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiPersistentStats_Event) ProtoMessage() {}
+
+func (x *WifiPersistentStats_Event) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_proto_msgTypes[43]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiPersistentStats_Event.ProtoReflect.Descriptor instead.
+func (*WifiPersistentStats_Event) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{35, 0}
+}
+
+func (x *WifiPersistentStats_Event) GetCount() uint32 {
+	if x != nil {
+		return x.Count
+	}
+	return 0
+}
+
+func (x *WifiPersistentStats_Event) GetLastOccurredTimestamp() int64 {
+	if x != nil {
+		return x.LastOccurredTimestamp
+	}
+	return 0
+}
+
+var File_spacex_api_device_wifi_proto protoreflect.FileDescriptor
+
+var file_spacex_api_device_wifi_proto_rawDesc = []byte{
+	0x0a, 0x1c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x0b, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x95,
+	0x01, 0x0a, 0x0c, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12,
+	0x3a, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
+	0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x6d,
+	0x65, 0x73, 0x68, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
+	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4d, 0x65, 0x73, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x48,
+	0x00, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x30, 0x0a, 0x0c, 0x57, 0x69, 0x66, 0x69, 0x4d, 0x65,
+	0x73, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x61, 0x72, 0x6e,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, 0x6e, 0x63,
+	0x61, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x0e, 0x46, 0x72, 0x6f, 0x6d,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x0b, 0x77, 0x69,
+	0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00,
+	0x52, 0x0a, 0x77, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x09, 0x0a, 0x07,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x56, 0x0a, 0x14, 0x57, 0x69, 0x66, 0x69, 0x53,
+	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x3e, 0x0a, 0x0b, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x0a, 0x77, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22,
+	0x66, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x57, 0x69, 0x66,
+	0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x16, 0x0a, 0x14, 0x57, 0x69, 0x66, 0x69, 0x47,
+	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+	0x57, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x77, 0x69, 0x66, 0x69,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x77, 0x69,
+	0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6d, 0x0a, 0x1d, 0x57, 0x69, 0x66, 0x69,
+	0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x41, 0x75, 0x74,
+	0x68, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0x20, 0x0a, 0x1e, 0x57, 0x69, 0x66, 0x69, 0x53,
+	0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x75, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x0a, 0x18, 0x57, 0x69, 0x66,
+	0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x63, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d,
+	0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x68, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
+	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73,
+	0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x17, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x66,
+	0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10,
+	0x68, 0x61, 0x73, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x43, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x3e, 0x0a, 0x1b, 0x57, 0x69, 0x66,
+	0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f,
+	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d,
+	0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa7, 0x03, 0x0a, 0x1c, 0x57, 0x69,
+	0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f,
+	0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75,
+	0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x75, 0x72,
+	0x72, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x78, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75,
+	0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x02,
+	0x52, 0x10, 0x74, 0x78, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4d, 0x62,
+	0x70, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x78, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68,
+	0x70, 0x75, 0x74, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x02, 0x52, 0x10,
+	0x72, 0x78, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4d, 0x62, 0x70, 0x73,
+	0x12, 0x70, 0x0a, 0x12, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x6c,
+	0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69,
+	0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x57, 0x69,
+	0x66, 0x69, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52,
+	0x11, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74,
+	0x65, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0a, 0x72, 0x78, 0x52, 0x61, 0x74, 0x65,
+	0x4d, 0x62, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x22, 0x69, 0x0a, 0x11, 0x57, 0x69, 0x66, 0x69,
+	0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x11, 0x0a,
+	0x0d, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
+	0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01,
+	0x12, 0x16, 0x0a, 0x12, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x43, 0x4c, 0x41, 0x53,
+	0x53, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x4d, 0x49,
+	0x54, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
+	0x53, 0x10, 0x03, 0x22, 0x82, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48,
+	0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
+	0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52,
+	0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28,
+	0x02, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x27, 0x0a, 0x0f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f,
+	0x6d, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x70, 0x69, 0x6e, 0x67, 0x4c,
+	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0x54, 0x0a, 0x1b, 0x57, 0x69, 0x66, 0x69,
+	0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
+	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x90,
+	0x0d, 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x63,
+	0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70,
+	0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x67,
+	0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x65, 0x6e, 0x67,
+	0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x77, 0x69,
+	0x64, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e,
+	0x65, 0x6c, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x40, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x73, 0x74,
+	0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69,
+	0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73,
+	0x52, 0x07, 0x72, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x74, 0x78, 0x5f,
+	0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x78, 0x53, 0x74, 0x61,
+	0x74, 0x73, 0x52, 0x07, 0x74, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61,
+	0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74,
+	0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x65, 0x5f,
+	0x73, 0x74, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x65, 0x53,
+	0x74, 0x72, 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x66, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x05, 0x69, 0x66, 0x61, 0x63,
+	0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03,
+	0x73, 0x6e, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x73, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x73, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x75,
+	0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x75, 0x70, 0x73, 0x74, 0x72,
+	0x65, 0x61, 0x6d, 0x4d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x36, 0x0a,
+	0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52,
+	0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
+	0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x77, 0x71, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73,
+	0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x77, 0x71, 0x43, 0x68, 0x65, 0x63, 0x6b,
+	0x73, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x77, 0x71, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x5f,
+	0x6e, 0x6f, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x11, 0x73, 0x77, 0x71, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70,
+	0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x69, 0x62, 0x5f, 0x73, 0x74, 0x65, 0x65, 0x72, 0x5f,
+	0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x69, 0x62,
+	0x53, 0x74, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x69,
+	0x62, 0x5f, 0x73, 0x74, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x13,
+	0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x69, 0x62, 0x53, 0x74, 0x65, 0x65, 0x72, 0x4d, 0x65,
+	0x74, 0x68, 0x6f, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x74, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x74, 0x6d, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x74, 0x6d, 0x5f, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
+	0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x62, 0x74, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x1a, 0x94, 0x03, 0x0a, 0x07, 0x52, 0x78,
+	0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x04, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x10,
+	0x0a, 0x03, 0x6e, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x73, 0x73,
+	0x12, 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x10, 0x0a,
+	0x03, 0x6d, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x63, 0x73, 0x12,
+	0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x19, 0x0a,
+	0x08, 0x67, 0x75, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x07, 0x67, 0x75, 0x61, 0x72, 0x64, 0x4e, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x69, 0x72, 0x74,
+	0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x73,
+	0x74, 0x5f, 0x31, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x61, 0x69, 0x72, 0x74,
+	0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x73, 0x74, 0x31,
+	0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x61, 0x6d, 0x70,
+	0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x61,
+	0x6d, 0x70, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65,
+	0x74, 0x72, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x73, 0x61, 0x6d,
+	0x70, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69,
+	0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0c, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x15, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x73, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05,
+	0x1a, 0xfd, 0x01, 0x0a, 0x07, 0x54, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05,
+	0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74,
+	0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x79,
+	0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65,
+	0x73, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x73, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x74,
+	0x65, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x61,
+	0x74, 0x65, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x63, 0x73, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x63, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64,
+	0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e,
+	0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x61, 0x72, 0x64, 0x5f,
+	0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x75, 0x61, 0x72, 0x64, 0x4e,
+	0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x73, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x15, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05,
+	0x22, 0x3b, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x0b, 0x0a,
+	0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x54,
+	0x48, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x46, 0x5f, 0x32, 0x47, 0x48, 0x5a, 0x10, 0x02,
+	0x12, 0x0b, 0x0a, 0x07, 0x52, 0x46, 0x5f, 0x35, 0x47, 0x48, 0x5a, 0x10, 0x03, 0x22, 0x42, 0x0a,
+	0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x55, 0x4e,
+	0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4c, 0x49, 0x45, 0x4e,
+	0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, 0x52, 0x10,
+	0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10,
+	0x03, 0x22, 0x74, 0x0a, 0x10, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x57, 0x69, 0x66, 0x69, 0x53,
+	0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x95, 0x02, 0x0a,
+	0x0e, 0x57, 0x69, 0x66, 0x69, 0x42, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+	0x35, 0x0a, 0x17, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x62, 0x75, 0x73, 0x79, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x72,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x74, 0x78, 0x5f, 0x61, 0x69, 0x72,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x74, 0x78, 0x41, 0x69, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x46,
+	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x78, 0x5f, 0x61, 0x69,
+	0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x72, 0x78, 0x41, 0x69, 0x72, 0x54, 0x69, 0x6d, 0x65,
+	0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x16, 0x6f, 0x62, 0x73, 0x73,
+	0x5f, 0x61, 0x69, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6f, 0x62, 0x73, 0x73, 0x41, 0x69,
+	0x72, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a,
+	0x17, 0x65, 0x64, 0x63, 0x63, 0x61, 0x5f, 0x61, 0x69, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f,
+	0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14,
+	0x65, 0x64, 0x63, 0x63, 0x61, 0x41, 0x69, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x03, 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x41, 0x6c, 0x65,
+	0x72, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74,
+	0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74,
+	0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x27,
+	0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+	0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x73, 0x68,
+	0x6c, 0x79, 0x5f, 0x66, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
+	0x66, 0x72, 0x65, 0x73, 0x68, 0x6c, 0x79, 0x46, 0x75, 0x73, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x14,
+	0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x5f, 0x6c, 0x69, 0x6e,
+	0x6b, 0x5f, 0x31, 0x30, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x61, 0x6e, 0x45,
+	0x74, 0x68, 0x53, 0x6c, 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x31, 0x30, 0x12, 0x30, 0x0a, 0x15,
+	0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x5f, 0x6c, 0x69, 0x6e,
+	0x6b, 0x5f, 0x31, 0x30, 0x30, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6c, 0x61, 0x6e,
+	0x45, 0x74, 0x68, 0x53, 0x6c, 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x31, 0x30, 0x30, 0x12, 0x35,
+	0x0a, 0x17, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x6f, 0x6f, 0x72, 0x5f, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x14, 0x77, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x50, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10,
+	0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x52, 0x2b, 0x69,
+	0x6e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x32, 0x67, 0x68, 0x7a,
+	0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72,
+	0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x31, 0x35, 0x64, 0x62, 0x52, 0x2b, 0x69, 0x6e, 0x63, 0x6f,
+	0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e,
+	0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e,
+	0x63, 0x65, 0x5f, 0x31, 0x35, 0x64, 0x62, 0x52, 0x23, 0x70, 0x6f, 0x6f, 0x72, 0x5f, 0x32, 0x67,
+	0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x66,
+	0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x38, 0x30, 0x64, 0x62, 0x52, 0x23, 0x70, 0x6f,
+	0x6f, 0x72, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x65,
+	0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x38, 0x30, 0x64,
+	0x62, 0x22, 0xb9, 0x06, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0c, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34,
+	0x0a, 0x16, 0x63, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c,
+	0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14,
+	0x63, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x45, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x61, 0x6e,
+	0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0e, 0x69, 0x70, 0x76, 0x34, 0x57, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12,
+	0x25, 0x0a, 0x0e, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74,
+	0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72,
+	0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c,
+	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x0d, 0x70, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x12,
+	0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f,
+	0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x64,
+	0x69, 0x73, 0x68, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x30, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74,
+	0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11,
+	0x64, 0x69, 0x73, 0x68, 0x50, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d,
+	0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72,
+	0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f,
+	0x70, 0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x2e, 0x0a, 0x13, 0x70, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x70,
+	0x6f, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x12,
+	0x4c, 0x0a, 0x0e, 0x72, 0x66, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x42, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52,
+	0x0c, 0x72, 0x66, 0x32, 0x67, 0x68, 0x7a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a,
+	0x0e, 0x72, 0x66, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x42,
+	0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x72,
+	0x66, 0x35, 0x67, 0x68, 0x7a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x61,
+	0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x57, 0x69, 0x66, 0x69, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x06, 0x61, 0x6c, 0x65,
+	0x72, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x61, 0x76, 0x69, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x76, 0x69,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x05, 0x10,
+	0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x06, 0x08,
+	0xe9, 0x07, 0x10, 0xea, 0x07, 0x4a, 0x06, 0x08, 0xea, 0x07, 0x10, 0xeb, 0x07, 0x4a, 0x06, 0x08,
+	0xee, 0x07, 0x10, 0xef, 0x07, 0x4a, 0x06, 0x08, 0xef, 0x07, 0x10, 0xf0, 0x07, 0x22, 0x56, 0x0a,
+	0x17, 0x57, 0x69, 0x66, 0x69, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c,
+	0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c,
+	0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x57, 0x69, 0x66, 0x69, 0x41, 0x75,
+	0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x77, 0x69, 0x66, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x77, 0x69, 0x66, 0x69, 0x12, 0x38, 0x0a, 0x04,
+	0x64, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43,
+	0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x52, 0x04, 0x64, 0x69, 0x73, 0x68, 0x22, 0x32, 0x0a, 0x17, 0x57, 0x69, 0x66, 0x69, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65, 0x6e,
+	0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x73, 0x68, 0x49, 0x64, 0x22, 0x2b, 0x0a, 0x10, 0x57, 0x69,
+	0x66, 0x69, 0x4e, 0x65, 0x77, 0x50, 0x65, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17,
+	0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0xb1, 0x07, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67,
+	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e,
+	0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73, 0x12,
+	0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x74, 0x64, 0x64, 0x65,
+	0x76, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x53, 0x74, 0x64, 0x64, 0x65, 0x76, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6c,
+	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x35,
+	0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
+	0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73, 0x35, 0x6d, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x31, 0x68, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61,
+	0x6e, 0x4d, 0x73, 0x31, 0x68, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
+	0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73,
+	0x31, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x35, 0x6d, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x35,
+	0x6d, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31,
+	0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74,
+	0x65, 0x31, 0x68, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65,
+	0x5f, 0x31, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52,
+	0x61, 0x74, 0x65, 0x31, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
+	0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63,
+	0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x73, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65,
+	0x73, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
+	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
+	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x32, 0x73, 0x4f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
+	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x35, 0x73, 0x4f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
+	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74,
+	0x61, 0x67, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x19, 0x73, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x35, 0x73, 0x4f, 0x75,
+	0x74, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f,
+	0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f,
+	0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x19, 0x73, 0x65, 0x63,
+	0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36, 0x30, 0x73,
+	0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x1e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x30, 0x30,
+	0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1a,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74,
+	0x33, 0x30, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x68, 0x61,
+	0x70, 0x70, 0x79, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x5f, 0x31, 0x73, 0x5f, 0x31, 0x64, 0x18,
+	0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x48, 0x6f, 0x75, 0x72,
+	0x73, 0x31, 0x73, 0x31, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x68, 0x61, 0x70, 0x70, 0x79, 0x5f, 0x68,
+	0x6f, 0x75, 0x72, 0x73, 0x5f, 0x32, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x0e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x32, 0x73, 0x31, 0x64,
+	0x12, 0x29, 0x0a, 0x11, 0x68, 0x61, 0x70, 0x70, 0x79, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x5f,
+	0x35, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x68, 0x61, 0x70,
+	0x70, 0x79, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x35, 0x73, 0x31, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x57,
+	0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x1a, 0x57, 0x69, 0x66, 0x69,
+	0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+	0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e,
+	0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+	0x65, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61,
+	0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+	0xa8, 0x01, 0x0a, 0x1a, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6e,
+	0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45,
+	0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x63, 0x61,
+	0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x43, 0x0a, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x0c, 0x77, 0x69,
+	0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x0f, 0x57,
+	0x69, 0x66, 0x69, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x46,
+	0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x73,
+	0x75, 0x6c, 0x74, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x1a, 0x96, 0x03, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x53, 0x63, 0x61, 0x6e, 0x52,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a,
+	0x04, 0x73, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x73, 0x69,
+	0x64, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x73, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x62, 0x73, 0x73, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x6e, 0x63, 0x79, 0x5f, 0x67, 0x68, 0x7a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+	0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x47, 0x68, 0x7a, 0x12, 0x18, 0x0a, 0x07,
+	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63,
+	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
+	0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x62, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x62, 0x6d,
+	0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f,
+	0x64, 0x62, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x6f, 0x69, 0x73, 0x65,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x62, 0x6d, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x61, 0x73, 0x5f,
+	0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x68, 0x61, 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x68, 0x79, 0x5f, 0x6d, 0x6f,
+	0x64, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x68,
+	0x79, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x22, 0x35, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x0f, 0x0a, 0x0b, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x32, 0x5f, 0x34, 0x47, 0x48, 0x5a, 0x10, 0x01,
+	0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x35, 0x47, 0x48, 0x5a, 0x10, 0x02, 0x22,
+	0xde, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12,
+	0x37, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x42, 0x61,
+	0x6e, 0x64, 0x52, 0x04, 0x62, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x73, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x73, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07,
+	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63,
+	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54,
+	0x79, 0x70, 0x65, 0x53, 0x74, 0x72, 0x22, 0x38, 0x0a, 0x04, 0x42, 0x61, 0x6e, 0x64, 0x12, 0x10,
+	0x0a, 0x0c, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
+	0x12, 0x0f, 0x0a, 0x0b, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x32, 0x5f, 0x34, 0x47, 0x48, 0x5a, 0x10,
+	0x01, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x35, 0x47, 0x48, 0x5a, 0x10, 0x02,
+	0x22, 0x83, 0x05, 0x0a, 0x13, 0x57, 0x69, 0x66, 0x69, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+	0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x14, 0x66, 0x61, 0x63, 0x74,
+	0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
+	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x50,
+	0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x45,
+	0x76, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73,
+	0x65, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x67, 0x0a, 0x19, 0x66, 0x61, 0x63, 0x74,
+	0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x5f, 0x75,
+	0x6e, 0x70, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x57, 0x69, 0x66, 0x69, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74,
+	0x61, 0x74, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x16, 0x66, 0x61, 0x63, 0x74, 0x6f,
+	0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x55, 0x6e, 0x70, 0x6c, 0x75,
+	0x67, 0x12, 0x60, 0x0a, 0x15, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73,
+	0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+	0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x13,
+	0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x12, 0x7d, 0x0a, 0x25, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72,
+	0x65, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64,
+	0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x50, 0x65, 0x72, 0x73, 0x69,
+	0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x52, 0x20, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x61,
+	0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x12, 0x6b, 0x0a, 0x1b, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x6f,
+	0x6d, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
+	0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x18, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x46, 0x72, 0x6f,
+	0x6d, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a,
+	0x55, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36,
+	0x0a, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x15, 0x6c, 0x61, 0x73, 0x74, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x5e, 0x0a, 0x1e, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65,
+	0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74,
+	0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
+	0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
+	0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0xa9, 0x5c, 0x0a, 0x21, 0x73, 0x74, 0x61, 0x72, 0x6c,
+	0x69, 0x6e, 0x6b, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x6c,
+	0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x32, 0x12, 0x2c, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0e, 0x74, 0x69,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x44, 0x61, 0x74, 0x65, 0x12,
+	0x43, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x68, 0x6f, 0x75,
+	0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+	0x48, 0x6f, 0x75, 0x72, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x79, 0x73, 0x5f, 0x68, 0x77, 0x5f, 0x67,
+	0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x73, 0x79, 0x73, 0x48, 0x77, 0x47, 0x65, 0x6e,
+	0x12, 0x33, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x5f, 0x73, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
+	0x73, 0x79, 0x73, 0x53, 0x77, 0x12, 0x3d, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x5f, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x79, 0x73, 0x5f, 0x69, 0x73, 0x5f, 0x64,
+	0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x73, 0x79, 0x73, 0x49, 0x73, 0x44, 0x65, 0x76, 0x12, 0x40,
+	0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x66, 0x64, 0x73, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x46, 0x64, 0x73,
+	0x12, 0x3f, 0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x79, 0x73, 0x5f, 0x6d, 0x65, 0x6d, 0x5f, 0x66, 0x72, 0x65,
+	0x65, 0x5f, 0x6b, 0x62, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x79, 0x73, 0x4d, 0x65, 0x6d, 0x46,
+	0x72, 0x65, 0x65, 0x4b, 0x62, 0x12, 0x40, 0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x62, 0x6f, 0x6f,
+	0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x79, 0x73, 0x42, 0x6f,
+	0x6f, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x79, 0x73, 0x5f, 0x70,
+	0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x12, 0x73, 0x79, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x12, 0x73, 0x79, 0x73, 0x5f, 0x75, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x10, 0x73, 0x79, 0x73, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x12, 0x56, 0x0a, 0x19, 0x73, 0x79, 0x73, 0x5f, 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x72, 0x6f,
+	0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x16, 0x73, 0x79, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61,
+	0x63, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
+	0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x5f,
+	0x72, 0x73, 0x73, 0x69, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x52, 0x73, 0x73, 0x69, 0x12,
+	0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61,
+	0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x32, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x66, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e,
+	0x6e, 0x61, 0x32, 0x52, 0x73, 0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x5f,
+	0x72, 0x73, 0x73, 0x69, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x52, 0x73, 0x73, 0x69, 0x12,
+	0x53, 0x0a, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x49, 0x66, 0x61, 0x63, 0x65, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x1e, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32,
+	0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x62, 0x75, 0x73, 0x79, 0x5f, 0x66, 0x72,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x43, 0x68, 0x61, 0x6e, 0x42, 0x75, 0x73, 0x79, 0x46, 0x72, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f,
+	0x32, 0x67, 0x68, 0x7a, 0x5f, 0x65, 0x64, 0x63, 0x63, 0x61, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67,
+	0x68, 0x7a, 0x45, 0x64, 0x63, 0x63, 0x61, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x6b, 0x0a, 0x24, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x6f,
+	0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x73, 0x73, 0x5f, 0x66,
+	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e,
+	0x67, 0x42, 0x73, 0x73, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x14,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x62,
+	0x79, 0x74, 0x65, 0x73, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x16, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x4f,
+	0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12,
+	0x5a, 0x0a, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72,
+	0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x6f,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78,
+	0x46, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x62, 0x0a, 0x20, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18,
+	0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78,
+	0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x61, 0x0a, 0x1f, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72,
+	0x78, 0x5f, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68,
+	0x7a, 0x52, 0x78, 0x41, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x14, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68,
+	0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a,
+	0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x73, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x13, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32,
+	0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x74, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x12, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x45,
+	0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x62, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f,
+	0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
+	0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x61, 0x0a, 0x1f, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x61, 0x69, 0x72, 0x74,
+	0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x76, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x41, 0x69, 0x72,
+	0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e,
+	0x6e, 0x65, 0x6c, 0x18, 0x77, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35,
+	0x67, 0x68, 0x7a, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e,
+	0x61, 0x31, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x52, 0x73,
+	0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x32, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18,
+	0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41, 0x6e,
+	0x74, 0x65, 0x6e, 0x6e, 0x61, 0x32, 0x52, 0x73, 0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e,
+	0x61, 0x33, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x7a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x52, 0x73,
+	0x73, 0x69, 0x12, 0x53, 0x0a, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x69, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x7b, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x14, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x49, 0x66, 0x61,
+	0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x1e, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x62, 0x75, 0x73, 0x79,
+	0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x43, 0x68, 0x61, 0x6e, 0x42, 0x75, 0x73, 0x79,
+	0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x1a, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x65, 0x64, 0x63, 0x63, 0x61, 0x5f, 0x66, 0x72,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x7d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x35, 0x67, 0x68, 0x7a, 0x45, 0x64, 0x63, 0x63, 0x61, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x6b, 0x0a, 0x24, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x73,
+	0x73, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x7e, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70,
+	0x70, 0x69, 0x6e, 0x67, 0x42, 0x73, 0x73, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x4d, 0x0a, 0x14, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72,
+	0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x7f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x52,
+	0x0a, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78,
+	0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65,
+	0x74, 0x73, 0x12, 0x50, 0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x81, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x12, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x45, 0x72,
+	0x72, 0x6f, 0x72, 0x73, 0x12, 0x5b, 0x0a, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35,
+	0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x73, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72,
+	0x73, 0x12, 0x63, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a,
+	0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72,
+	0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x72, 0x72,
+	0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x1f, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65,
+	0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x84, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x41, 0x69, 0x72, 0x74, 0x69,
+	0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x14, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74,
+	0x65, 0x73, 0x18, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35,
+	0x67, 0x68, 0x7a, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x16, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x18, 0x86, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x50,
+	0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x87, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73,
+	0x12, 0x63, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f,
+	0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f,
+	0x72, 0x61, 0x74, 0x65, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x1f, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f,
+	0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f,
+	0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x41, 0x69, 0x72, 0x74, 0x69, 0x6d,
+	0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x18, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c,
+	0x5f, 0x74, 0x65, 0x6d, 0x70, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x65, 0x6d, 0x70,
+	0x12, 0x55, 0x0a, 0x18, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f,
+	0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x18, 0xc9, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72,
+	0x6d, 0x61, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x12, 0x60, 0x0a, 0x1e, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x64,
+	0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c,
+	0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x60, 0x0a, 0x1e, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c,
+	0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0xcb, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x6f, 0x0a, 0x25, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x63,
+	0x6f, 0x6e, 0x64, 0x73, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68, 0x72, 0x6f,
+	0x74, 0x74, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x6f, 0x0a, 0x25,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72,
+	0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68, 0x72,
+	0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x53, 0x0a,
+	0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f,
+	0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x42, 0x79, 0x74,
+	0x65, 0x73, 0x12, 0x57, 0x0a, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e,
+	0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18,
+	0xad, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45,
+	0x74, 0x68, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x55, 0x0a, 0x18, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xae, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x66,
+	0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x73, 0x12, 0x60, 0x0a, 0x1e, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e,
+	0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72,
+	0x72, 0x6f, 0x72, 0x73, 0x18, 0xaf, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72,
+	0x72, 0x6f, 0x72, 0x73, 0x12, 0x53, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c,
+	0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
+	0xb0, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45,
+	0x74, 0x68, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x19, 0x69, 0x66, 0x61,
+	0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61,
+	0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65,
+	0x74, 0x73, 0x12, 0x55, 0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e,
+	0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xb2,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74,
+	0x68, 0x54, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x53, 0x0a, 0x17, 0x69, 0x66, 0x61,
+	0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x62,
+	0x79, 0x74, 0x65, 0x73, 0x18, 0xb3, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57,
+	0x0a, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68,
+	0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0xb4, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78,
+	0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x55, 0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x73, 0x18, 0xb5, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73,
+	0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x60,
+	0x0a, 0x1e, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68,
+	0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73,
+	0x18, 0xb6, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e,
+	0x45, 0x74, 0x68, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73,
+	0x12, 0x53, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65,
+	0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xb7, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78,
+	0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f,
+	0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65,
+	0x74, 0x73, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57,
+	0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x55,
+	0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68,
+	0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xb9, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x14, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x45,
+	0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
+	0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x40,
+	0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x91,
+	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x32, 0x67, 0x68, 0x7a,
+	0x12, 0x40, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a,
+	0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x35, 0x67,
+	0x68, 0x7a, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x65, 0x74,
+	0x68, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x45,
+	0x74, 0x68, 0x12, 0x48, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x18, 0x94, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x15,
+	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72,
+	0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x95, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x32, 0x67, 0x68, 0x7a, 0x12,
+	0x51, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x72, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x96, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x35, 0x67,
+	0x68, 0x7a, 0x12, 0x4f, 0x0a, 0x14, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x74, 0x68, 0x18, 0x97, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72,
+	0x45, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x68, 0x6f, 0x70, 0x73,
+	0x18, 0x98, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x68, 0x48, 0x6f, 0x70, 0x73, 0x12,
+	0x57, 0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x68, 0x6f, 0x70, 0x5f,
+	0x72, 0x73, 0x73, 0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x99, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x48, 0x6f, 0x70, 0x52, 0x73, 0x73,
+	0x69, 0x41, 0x76, 0x67, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x57, 0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68,
+	0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f, 0x61, 0x76,
+	0x67, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x9a, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x68,
+	0x4f, 0x6e, 0x65, 0x48, 0x6f, 0x70, 0x52, 0x73, 0x73, 0x69, 0x41, 0x76, 0x67, 0x35, 0x67, 0x68,
+	0x7a, 0x12, 0x57, 0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x68, 0x6f,
+	0x70, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18,
+	0x9b, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x77, 0x6f, 0x48, 0x6f, 0x70, 0x52,
+	0x73, 0x73, 0x69, 0x41, 0x76, 0x67, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x57, 0x0a, 0x1a, 0x6d, 0x65,
+	0x73, 0x68, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f,
+	0x61, 0x76, 0x67, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x9c, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x65,
+	0x73, 0x68, 0x54, 0x77, 0x6f, 0x48, 0x6f, 0x70, 0x52, 0x73, 0x73, 0x69, 0x41, 0x76, 0x67, 0x35,
+	0x67, 0x68, 0x7a, 0x12, 0x65, 0x0a, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f,
+	0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31,
+	0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xd8, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x70, 0x69,
+	0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61,
+	0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x21, 0x70, 0x69,
+	0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65,
+	0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18,
+	0xd9, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x1c, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
+	0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x32, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67,
+	0x65, 0x12, 0x65, 0x0a, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f,
+	0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xda, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x70, 0x69, 0x6e, 0x67,
+	0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74,
+	0x35, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x67, 0x0a, 0x22, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c,
+	0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xdb,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x1d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53,
+	0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67,
+	0x65, 0x12, 0x69, 0x0a, 0x23, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x30, 0x30,
+	0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xdc, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1e, 0x70, 0x69,
+	0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61,
+	0x73, 0x74, 0x33, 0x30, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x0e,
+	0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xdd,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65,
+	0x12, 0x50, 0x0a, 0x16, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61,
+	0x74, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x68, 0x18, 0xde, 0x04, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12,
+	0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74,
+	0x31, 0x68, 0x12, 0x3f, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e,
+	0x63, 0x79, 0x18, 0xdf, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68,
+	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c,
+	0x61, 0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xe2, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74,
+	0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68,
+	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c,
+	0x61, 0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xe3, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x32, 0x73, 0x4f, 0x75, 0x74,
+	0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68,
+	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c,
+	0x61, 0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xe4, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x35, 0x73, 0x4f, 0x75, 0x74,
+	0x61, 0x67, 0x65, 0x12, 0x70, 0x0a, 0x27, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68,
+	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c,
+	0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xe5,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65, 0x63, 0x6f,
+	0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36, 0x30, 0x73, 0x4f,
+	0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x72, 0x0a, 0x28, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69,
+	0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65,
+	0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x30, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67,
+	0x65, 0x18, 0xe6, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x22, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53,
+	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x33,
+	0x30, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x70, 0x69, 0x6e,
+	0x67, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65,
+	0x18, 0xe7, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x44, 0x72,
+	0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, 0x1b, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x31, 0x68, 0x18, 0xe8, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x70, 0x69, 0x6e, 0x67, 0x44,
+	0x69, 0x73, 0x68, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31,
+	0x68, 0x12, 0x48, 0x0a, 0x11, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x6c,
+	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0xe9, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x70, 0x69, 0x6e, 0x67,
+	0x44, 0x69, 0x73, 0x68, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x6e, 0x0a, 0x25, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f,
+	0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
+	0x6d, 0x62, 0x70, 0x73, 0x18, 0xbc, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44,
+	0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6a, 0x0a, 0x23, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f,
+	0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x18, 0xbd, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x55, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x5d, 0x0a, 0x1c, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74,
+	0x65, 0x72, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0xbe, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74,
+	0x65, 0x72, 0x52, 0x73, 0x73, 0x69, 0x12, 0x6a, 0x0a, 0x23, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f,
+	0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xbf, 0x05,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x57, 0x69, 0x66, 0x69, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62,
+	0x70, 0x73, 0x12, 0x66, 0x0a, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
+	0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xc0, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x57, 0x69, 0x66, 0x69,
+	0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6e, 0x0a, 0x25, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d,
+	0x62, 0x70, 0x73, 0x18, 0xc1, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53,
+	0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x6f,
+	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6a, 0x0a, 0x23, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70,
+	0x73, 0x18, 0xc2, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f,
+	0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x5d, 0x0a, 0x1c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0xc3, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x52, 0x73, 0x73, 0x69, 0x12, 0x60, 0x0a, 0x1d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x69, 0x66, 0x61, 0x63, 0x65, 0x18, 0xc4, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x49, 0x66, 0x61, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x5f, 0x6f, 0x75, 0x69, 0x18, 0xc5, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x4f, 0x75, 0x69, 0x12, 0x63, 0x0a, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x74, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xc6, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x54, 0x78, 0x52, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x1f, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xc7, 0x05,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x78, 0x52, 0x61, 0x74, 0x65, 0x12,
+	0x6f, 0x0a, 0x25, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
+	0x6f, 0x72, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0xc8, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x65, 0x0a, 0x21, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63,
+	0x70, 0x5f, 0x38, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70,
+	0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa0, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x38, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64,
+	0x4d, 0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x65, 0x0a, 0x21, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x38, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
+	0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xa1, 0x06, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x1c, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x38, 0x44,
+	0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x61,
+	0x0a, 0x1f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f,
+	0x38, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x61, 0x76,
+	0x67, 0x18, 0xa2, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74,
+	0x54, 0x63, 0x70, 0x38, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x41, 0x76,
+	0x67, 0x12, 0x61, 0x0a, 0x1f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74,
+	0x63, 0x70, 0x5f, 0x38, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73,
+	0x5f, 0x6d, 0x61, 0x78, 0x18, 0xa3, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x38, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70,
+	0x73, 0x4d, 0x61, 0x78, 0x12, 0x67, 0x0a, 0x22, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
+	0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa4, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x44, 0x6f,
+	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x67, 0x0a,
+	0x22, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36,
+	0x34, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f,
+	0x6d, 0x61, 0x78, 0x18, 0xa5, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d,
+	0x62, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x63, 0x0a, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61,
+	0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa6, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x55, 0x70,
+	0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x63, 0x0a, 0x20, 0x73,
+	0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f,
+	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18,
+	0xa7, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x1b, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63,
+	0x70, 0x36, 0x34, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61, 0x78,
+	0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64,
+	0x18, 0x84, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x68, 0x43, 0x65, 0x6c, 0x6c, 0x49,
+	0x64, 0x12, 0x4f, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x74, 0x75,
+	0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x12, 0x49, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x61, 0x6e,
+	0x64, 0x73, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x64, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, 0x49, 0x0a,
+	0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x72, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f,
+	0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x73,
+	0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18,
+	0xeb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x49, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
+	0x69, 0x73, 0x5f, 0x61, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xec, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x73, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x47, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72,
+	0x65, 0x5f, 0x64, 0x6e, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
+	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x61, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xef, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x49,
+	0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x66, 0x73, 0x5f, 0x65, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x64, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f,
+	0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44,
+	0x66, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x1e, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0xf1, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d,
+	0x65, 0x49, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x19, 0x63, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x73, 0x68, 0x5f,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x22, 0x88, 0x5e, 0x0a, 0x22, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x69, 0x6e, 0x6b, 0x5f,
+	0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x6c, 0x79, 0x5f, 0x6d,
+	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x32, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x74,
+	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0e,
+	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x6f, 0x75,
+	0x72, 0x12, 0x51, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x90,
+	0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2e, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x79, 0x73, 0x5f, 0x68, 0x77, 0x5f, 0x67,
+	0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x73, 0x79, 0x73, 0x48, 0x77, 0x47, 0x65, 0x6e,
+	0x12, 0x33, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x5f, 0x73, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
+	0x73, 0x79, 0x73, 0x53, 0x77, 0x12, 0x3d, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x5f, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x79, 0x73, 0x5f, 0x69, 0x73, 0x5f, 0x64,
+	0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x73, 0x79, 0x73, 0x49, 0x73, 0x44, 0x65, 0x76, 0x12, 0x40,
+	0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x66, 0x64, 0x73, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x46, 0x64, 0x73,
+	0x12, 0x3f, 0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x79, 0x73, 0x5f, 0x6d, 0x65, 0x6d, 0x5f, 0x66, 0x72, 0x65,
+	0x65, 0x5f, 0x6b, 0x62, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x79, 0x73, 0x4d, 0x65, 0x6d, 0x46,
+	0x72, 0x65, 0x65, 0x4b, 0x62, 0x12, 0x40, 0x0a, 0x0d, 0x73, 0x79, 0x73, 0x5f, 0x62, 0x6f, 0x6f,
+	0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x79, 0x73, 0x42, 0x6f,
+	0x6f, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x79, 0x73, 0x5f, 0x70,
+	0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x12, 0x73, 0x79, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x12, 0x73, 0x79, 0x73, 0x5f, 0x75, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x10, 0x73, 0x79, 0x73, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x12, 0x56, 0x0a, 0x19, 0x73, 0x79, 0x73, 0x5f, 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x72, 0x6f,
+	0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x16, 0x73, 0x79, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61,
+	0x63, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
+	0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x5f,
+	0x72, 0x73, 0x73, 0x69, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x52, 0x73, 0x73, 0x69, 0x12,
+	0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61,
+	0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x32, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x66, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e,
+	0x6e, 0x61, 0x32, 0x52, 0x73, 0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x5f,
+	0x72, 0x73, 0x73, 0x69, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x52, 0x73, 0x73, 0x69, 0x12,
+	0x53, 0x0a, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x49, 0x66, 0x61, 0x63, 0x65, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x1e, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32,
+	0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x62, 0x75, 0x73, 0x79, 0x5f, 0x66, 0x72,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x43, 0x68, 0x61, 0x6e, 0x42, 0x75, 0x73, 0x79, 0x46, 0x72, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f,
+	0x32, 0x67, 0x68, 0x7a, 0x5f, 0x65, 0x64, 0x63, 0x63, 0x61, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67,
+	0x68, 0x7a, 0x45, 0x64, 0x63, 0x63, 0x61, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x6b, 0x0a, 0x24, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x6f,
+	0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x73, 0x73, 0x5f, 0x66,
+	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e,
+	0x67, 0x42, 0x73, 0x73, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x14,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x62,
+	0x79, 0x74, 0x65, 0x73, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
+	0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x52, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x16, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
+	0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32,
+	0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x15,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e,
+	0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x59, 0x0a, 0x1b,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x66,
+	0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x6f, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d,
+	0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x62, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x70, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x61, 0x0a, 0x1f, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x61, 0x69,
+	0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x71,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x41,
+	0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c,
+	0x0a, 0x14, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78,
+	0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
+	0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x16,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x70,
+	0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
+	0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x4e,
+	0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x74, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x62,
+	0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78,
+	0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x61,
+	0x74, 0x65, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68,
+	0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x61,
+	0x74, 0x65, 0x12, 0x61, 0x0a, 0x1f, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68,
+	0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x76, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x32, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x41, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f,
+	0x35, 0x67, 0x68, 0x7a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x77, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x43, 0x68, 0x61, 0x6e,
+	0x6e, 0x65, 0x6c, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67,
+	0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x5f, 0x72, 0x73, 0x73, 0x69,
+	0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41,
+	0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x31, 0x52, 0x73, 0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e,
+	0x6e, 0x61, 0x32, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x32, 0x52,
+	0x73, 0x73, 0x69, 0x12, 0x56, 0x0a, 0x19, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67,
+	0x68, 0x7a, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x5f, 0x72, 0x73, 0x73, 0x69,
+	0x18, 0x7a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x41,
+	0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x33, 0x52, 0x73, 0x73, 0x69, 0x12, 0x53, 0x0a, 0x17, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x49, 0x66, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x12, 0x5f, 0x0a, 0x1e, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f,
+	0x63, 0x68, 0x61, 0x6e, 0x5f, 0x62, 0x75, 0x73, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68,
+	0x7a, 0x43, 0x68, 0x61, 0x6e, 0x42, 0x75, 0x73, 0x79, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x58, 0x0a, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a,
+	0x5f, 0x65, 0x64, 0x63, 0x63, 0x61, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x7d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x17, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x45, 0x64,
+	0x63, 0x63, 0x61, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6b, 0x0a, 0x24, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c,
+	0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x73, 0x73, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x7e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67,
+	0x68, 0x7a, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x73, 0x73,
+	0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x14, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73,
+	0x18, 0x7f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52,
+	0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
+	0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a,
+	0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x15, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x73, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36,
+	0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67,
+	0x68, 0x7a, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x1b, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61,
+	0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65,
+	0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73,
+	0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x1f, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x72, 0x78, 0x5f, 0x61, 0x69,
+	0x72, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x84,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x52, 0x78,
+	0x41, 0x69, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x4d, 0x0a, 0x14, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74,
+	0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x51,
+	0x0a, 0x16, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78,
+	0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x86, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x12, 0x4f, 0x0a, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a,
+	0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x87, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x73, 0x12, 0x63, 0x0a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x72, 0x61, 0x64, 0x69,
+	0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x72,
+	0x72, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x1f, 0x72, 0x61, 0x64, 0x69, 0x6f,
+	0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x78, 0x5f, 0x61, 0x69, 0x72, 0x74, 0x69, 0x6d,
+	0x65, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b,
+	0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x78, 0x41, 0x69, 0x72, 0x74,
+	0x69, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x18, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x65,
+	0x6d, 0x70, 0x12, 0x55, 0x0a, 0x18, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x18, 0xc9,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x15, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68,
+	0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x12, 0x60, 0x0a, 0x1e, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c,
+	0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0xca, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x60, 0x0a, 0x1e, 0x72,
+	0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65, 0x72, 0x6d,
+	0x61, 0x6c, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0xcb, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65,
+	0x72, 0x6d, 0x61, 0x6c, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x6f, 0x0a,
+	0x25, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68, 0x65,
+	0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x73,
+	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x72, 0x61, 0x64,
+	0x69, 0x6f, 0x73, 0x32, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x68,
+	0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x6f,
+	0x0a, 0x25, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x5f, 0x74, 0x68,
+	0x65, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x54,
+	0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12,
+	0x52, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74,
+	0x68, 0x5f, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13,
+	0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x42, 0x79,
+	0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61,
+	0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
+	0x18, 0xad, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45,
+	0x74, 0x68, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x18, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78,
+	0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xae, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x66, 0x61,
+	0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72,
+	0x73, 0x12, 0x5f, 0x0a, 0x1e, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f,
+	0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x73, 0x18, 0xaf, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
+	0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c,
+	0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x73, 0x12, 0x52, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e,
+	0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xb0, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54,
+	0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x19, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73,
+	0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
+	0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c,
+	0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x54,
+	0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68,
+	0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xb2, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14,
+	0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x4c, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x45, 0x72,
+	0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77,
+	0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
+	0xb3, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74,
+	0x68, 0x52, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x19, 0x69, 0x66, 0x61, 0x63,
+	0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x70, 0x61,
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0xb4, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49,
+	0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
+	0x12, 0x54, 0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65,
+	0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xb5, 0x02, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x14, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78,
+	0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x5f, 0x0a, 0x1e, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73,
+	0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d,
+	0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xb6, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x69, 0x66,
+	0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x52, 0x78, 0x46, 0x72, 0x61, 0x6d,
+	0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x17, 0x69, 0x66, 0x61, 0x63, 0x65,
+	0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74,
+	0x65, 0x73, 0x18, 0xb7, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36,
+	0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61,
+	0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x19, 0x69,
+	0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78,
+	0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x66,
+	0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74, 0x68, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x18, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5f, 0x77, 0x61,
+	0x6e, 0x5f, 0x65, 0x74, 0x68, 0x5f, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18,
+	0xb9, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x66, 0x61, 0x63, 0x65, 0x73, 0x57, 0x61, 0x6e, 0x45, 0x74,
+	0x68, 0x54, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x73, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x32, 0x67,
+	0x68, 0x7a, 0x18, 0x91, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
+	0x32, 0x67, 0x68, 0x7a, 0x12, 0x40, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f,
+	0x35, 0x67, 0x68, 0x7a, 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x73, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x73, 0x5f, 0x65, 0x74, 0x68, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x73, 0x45, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x18, 0x94, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72,
+	0x12, 0x51, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x72, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x95, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13,
+	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x32,
+	0x67, 0x68, 0x7a, 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x96, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x72, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x4f, 0x0a, 0x14, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x74, 0x68, 0x18, 0x97,
+	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x72, 0x45, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x68, 0x5f,
+	0x68, 0x6f, 0x70, 0x73, 0x18, 0x98, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x68, 0x48,
+	0x6f, 0x70, 0x73, 0x12, 0x57, 0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x65, 0x5f,
+	0x68, 0x6f, 0x70, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x32, 0x67, 0x68,
+	0x7a, 0x18, 0x99, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x48, 0x6f,
+	0x70, 0x52, 0x73, 0x73, 0x69, 0x41, 0x76, 0x67, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x57, 0x0a, 0x1a,
+	0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x72, 0x73, 0x73,
+	0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x9a, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15,
+	0x6d, 0x65, 0x73, 0x68, 0x4f, 0x6e, 0x65, 0x48, 0x6f, 0x70, 0x52, 0x73, 0x73, 0x69, 0x41, 0x76,
+	0x67, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x57, 0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x77,
+	0x6f, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x32,
+	0x67, 0x68, 0x7a, 0x18, 0x9b, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x77, 0x6f,
+	0x48, 0x6f, 0x70, 0x52, 0x73, 0x73, 0x69, 0x41, 0x76, 0x67, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x57,
+	0x0a, 0x1a, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x72,
+	0x73, 0x73, 0x69, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x9c, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x15, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x77, 0x6f, 0x48, 0x6f, 0x70, 0x52, 0x73, 0x73, 0x69,
+	0x41, 0x76, 0x67, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x65, 0x0a, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x5f,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61,
+	0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xd8, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x1c, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e,
+	0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x65,
+	0x0a, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73,
+	0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74,
+	0x61, 0x67, 0x65, 0x18, 0xd9, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63,
+	0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x32, 0x73, 0x4f,
+	0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74,
+	0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xda, 0x04, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c,
+	0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65,
+	0x4c, 0x61, 0x73, 0x74, 0x35, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x67, 0x0a, 0x22,
+	0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e,
+	0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
+	0x67, 0x65, 0x18, 0xdb, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f,
+	0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36, 0x30, 0x73, 0x4f,
+	0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x69, 0x0a, 0x23, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74,
+	0x5f, 0x33, 0x30, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x18, 0xdc, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x1e, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e,
+	0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x33, 0x30, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65,
+	0x12, 0x42, 0x0a, 0x0e, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61,
+	0x74, 0x65, 0x18, 0xdd, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70,
+	0x52, 0x61, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x16, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f,
+	0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x68, 0x18, 0xde,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x12, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65,
+	0x4c, 0x61, 0x73, 0x74, 0x31, 0x68, 0x12, 0x3f, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c,
+	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0xdf, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67,
+	0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4d, 0x0a, 0x14, 0x70, 0x69, 0x6e, 0x67, 0x5f,
+	0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x68, 0x18,
+	0xea, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
+	0x4c, 0x61, 0x73, 0x74, 0x31, 0x68, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63,
+	0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65,
+	0x18, 0xe2, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73,
+	0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63,
+	0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65,
+	0x18, 0xe3, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x32, 0x73,
+	0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x26, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63,
+	0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67, 0x65,
+	0x18, 0xe4, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x20, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x35, 0x73,
+	0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x70, 0x0a, 0x27, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63,
+	0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x36, 0x30, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61, 0x67,
+	0x65, 0x18, 0xe5, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x53,
+	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x36,
+	0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x72, 0x0a, 0x28, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
+	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x30, 0x30, 0x73, 0x5f, 0x6f, 0x75,
+	0x74, 0x61, 0x67, 0x65, 0x18, 0xe6, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x22, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69,
+	0x73, 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61,
+	0x73, 0x74, 0x33, 0x30, 0x30, 0x73, 0x4f, 0x75, 0x74, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x13,
+	0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72,
+	0x61, 0x74, 0x65, 0x18, 0xe7, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73,
+	0x68, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, 0x1b, 0x70, 0x69, 0x6e,
+	0x67, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65,
+	0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x68, 0x18, 0xe8, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x70, 0x69,
+	0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x61,
+	0x73, 0x74, 0x31, 0x68, 0x12, 0x48, 0x0a, 0x11, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73,
+	0x68, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0xe9, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x70,
+	0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x56,
+	0x0a, 0x19, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x6c, 0x61, 0x74, 0x65,
+	0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x68, 0x18, 0xeb, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x15, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x68, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
+	0x4c, 0x61, 0x73, 0x74, 0x31, 0x68, 0x12, 0x6e, 0x0a, 0x25, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65,
+	0x72, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18,
+	0xbc, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
+	0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6a, 0x0a, 0x23, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65,
+	0x72, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xbd, 0x05,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65,
+	0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62,
+	0x70, 0x73, 0x12, 0x5d, 0x0a, 0x1c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x73,
+	0x73, 0x69, 0x18, 0xbe, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x73, 0x73,
+	0x69, 0x12, 0x6a, 0x0a, 0x23, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65,
+	0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
+	0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xbf, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x57, 0x69, 0x66,
+	0x69, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x66, 0x0a,
+	0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62,
+	0x70, 0x73, 0x18, 0xc0, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x57, 0x69, 0x66, 0x69, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+	0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6e, 0x0a, 0x25, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xc1,
+	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
+	0x64, 0x4d, 0x62, 0x70, 0x73, 0x12, 0x6a, 0x0a, 0x23, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x18, 0xc2, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73,
+	0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70,
+	0x73, 0x12, 0x5d, 0x0a, 0x1c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65,
+	0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x73, 0x73,
+	0x69, 0x18, 0xc3, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x73, 0x73, 0x69,
+	0x12, 0x60, 0x0a, 0x1d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x66, 0x61, 0x63,
+	0x65, 0x18, 0xc4, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x66, 0x61,
+	0x63, 0x65, 0x12, 0x5c, 0x0a, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x75,
+	0x69, 0x18, 0xc5, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70,
+	0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x69,
+	0x12, 0x63, 0x0a, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x5f, 0x72,
+	0x61, 0x74, 0x65, 0x18, 0xc6, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54,
+	0x78, 0x52, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x1f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x5f, 0x72, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xc7, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x52, 0x78, 0x52, 0x61, 0x74, 0x65, 0x12, 0x6f, 0x0a, 0x25, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0xc8, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
+	0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50,
+	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x21, 0x73,
+	0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x38, 0x5f, 0x64,
+	0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x61, 0x76, 0x67,
+	0x18, 0xa0, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54,
+	0x63, 0x70, 0x38, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x41,
+	0x76, 0x67, 0x12, 0x65, 0x0a, 0x21, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f,
+	0x74, 0x63, 0x70, 0x5f, 0x38, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d,
+	0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xa1, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x73, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x38, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
+	0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x61, 0x0a, 0x1f, 0x73, 0x70, 0x65,
+	0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x38, 0x5f, 0x75, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa2, 0x06, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x1a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x38, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x61, 0x0a, 0x1f,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x38, 0x5f,
+	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18,
+	0xa3, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x1a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63,
+	0x70, 0x38, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12,
+	0x67, 0x0a, 0x22, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70,
+	0x5f, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70,
+	0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa4, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
+	0x64, 0x4d, 0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x67, 0x0a, 0x22, 0x73, 0x70, 0x65, 0x65,
+	0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x77,
+	0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xa5,
+	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x1d, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70,
+	0x36, 0x34, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61,
+	0x78, 0x12, 0x63, 0x0a, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74,
+	0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x62, 0x70,
+	0x73, 0x5f, 0x61, 0x76, 0x67, 0x18, 0xa6, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x73, 0x70, 0x65, 0x65, 0x64,
+	0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d,
+	0x62, 0x70, 0x73, 0x41, 0x76, 0x67, 0x12, 0x63, 0x0a, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x36, 0x34, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61,
+	0x64, 0x5f, 0x6d, 0x62, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xa7, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1b,
+	0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x54, 0x63, 0x70, 0x36, 0x34, 0x55, 0x70,
+	0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x62, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x3f, 0x0a, 0x0c, 0x64,
+	0x69, 0x73, 0x68, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x84, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x0a, 0x64, 0x69, 0x73, 0x68, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x15,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6d,
+	0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
+	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x53, 0x65, 0x74, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x49, 0x0a,
+	0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x70,
+	0x6c, 0x69, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f,
+	0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x61,
+	0x6e, 0x64, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, 0x49, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x5f, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x18, 0xea,
+	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x70,
+	0x65, 0x6e, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x12, 0x49, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x73, 0x5f, 0x61, 0x76,
+	0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x49, 0x73, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x11, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x6e, 0x73,
+	0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x63, 0x75, 0x72,
+	0x65, 0x44, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c,
+	0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
+	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x5f, 0x61, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x41, 0x70, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x49, 0x0a, 0x12, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x5f, 0x64, 0x66, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
+	0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x66, 0x73, 0x45, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x1e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x73, 0x5f, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x73, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
+	0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x6d,
+	0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xec, 0x01,
+	0x0a, 0x16, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65,
+	0x72, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x48, 0x0a, 0x05,
+	0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74,
+	0x72, 0x6f, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x44, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c,
+	0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x32, 0x5c, 0x0a, 0x04,
+	0x4d, 0x65, 0x73, 0x68, 0x12, 0x54, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65,
+	0x61, 0x6d, 0x12, 0x1f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x6c, 0x65, 0x72, 0x1a, 0x21, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
+	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x28, 0x01, 0x30, 0x01, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-type WifiClient_TxStats struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Bytes        uint64 `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
-	SuccessBytes uint64 `protobuf:"varint,2,opt,name=success_bytes,json=successBytes,proto3" json:"success_bytes,omitempty"`
-}
-
-func (x *WifiClient_TxStats) Reset() {
-	*x = WifiClient_TxStats{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_proto_msgTypes[17]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *WifiClient_TxStats) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*WifiClient_TxStats) ProtoMessage() {}
-
-func (x *WifiClient_TxStats) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_proto_msgTypes[17]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use WifiClient_TxStats.ProtoReflect.Descriptor instead.
-func (*WifiClient_TxStats) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_proto_rawDescGZIP(), []int{6, 1}
-}
-
-func (x *WifiClient_TxStats) GetBytes() uint64 {
-	if x != nil {
-		return x.Bytes
-	}
-	return 0
-}
-
-func (x *WifiClient_TxStats) GetSuccessBytes() uint64 {
-	if x != nil {
-		return x.SuccessBytes
-	}
-	return 0
-}
-
-var File_spacex_api_device_wifi_proto protoreflect.FileDescriptor
-
-var file_spacex_api_device_wifi_proto_rawDesc = []byte{
-	0x0a, 0x1c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x1a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x1a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, 0x0a, 0x14, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65,
-	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e,
-	0x0a, 0x0b, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66,
-	0x69, 0x67, 0x52, 0x0a, 0x77, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x17,
-	0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x47,
-	0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x22, 0x51, 0x0a, 0x16, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e,
-	0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c,
-	0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70,
-	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
-	0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65,
-	0x6e, 0x74, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74, 0x48,
-	0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
-	0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52,
-	0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x69, 0x6e, 0x67,
-	0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28,
-	0x02, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
-	0x27, 0x0a, 0x0f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f,
-	0x6d, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x70, 0x69, 0x6e, 0x67, 0x4c,
-	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0x54, 0x0a, 0x1b, 0x57, 0x69, 0x66, 0x69,
-	0x4e, 0x65, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
-	0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e,
-	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69,
-	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xda,
-	0x04, 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a,
-	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65,
-	0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
-	0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x65,
-	0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e,
-	0x61, 0x6c, 0x53, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x40, 0x0a, 0x08, 0x72, 0x78,
-	0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53,
-	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x78, 0x53, 0x74,
-	0x61, 0x74, 0x73, 0x52, 0x07, 0x72, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x08,
-	0x74, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
-	0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x78,
-	0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07, 0x74, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a,
-	0x0a, 0x11, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d,
-	0x65, 0x5f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x6f, 0x63,
-	0x69, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6f,
-	0x64, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f,
-	0x64, 0x65, 0x53, 0x74, 0x72, 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x66, 0x61, 0x63, 0x65, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6c, 0x69,
-	0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x05, 0x69,
-	0x66, 0x61, 0x63, 0x65, 0x1a, 0x42, 0x0a, 0x07, 0x52, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12,
-	0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05,
-	0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65,
-	0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0x44, 0x0a, 0x07, 0x54, 0x78, 0x53, 0x74,
-	0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63,
-	0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
-	0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x3b,
-	0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
-	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x54, 0x48, 0x10,
-	0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x46, 0x5f, 0x32, 0x47, 0x48, 0x5a, 0x10, 0x02, 0x12, 0x0b,
-	0x0a, 0x07, 0x52, 0x46, 0x5f, 0x35, 0x47, 0x48, 0x5a, 0x10, 0x03, 0x22, 0x74, 0x0a, 0x10, 0x57,
-	0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73,
-	0x6b, 0x69, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x22, 0x13, 0x0a, 0x11, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc1, 0x03, 0x0a, 0x15, 0x57, 0x69, 0x66, 0x69, 0x47,
-	0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x41, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e,
-	0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70,
-	0x6f, 0x72, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x14, 0x63, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74,
-	0x61, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x6c, 0x69,
-	0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61,
-	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57,
-	0x69, 0x66, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x63,
-	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c,
-	0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
-	0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x03,
-	0x73, 0x6b, 0x75, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12,
-	0x29, 0x0a, 0x10, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x61, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x70, 0x76, 0x34,
-	0x57, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x69,
-	0x6e, 0x67, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0xec, 0x07, 0x20,
-	0x01, 0x28, 0x02, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74,
-	0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63,
-	0x79, 0x5f, 0x6d, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x70, 0x69, 0x6e,
-	0x67, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0x56, 0x0a, 0x17, 0x57, 0x69,
-	0x66, 0x69, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
-	0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
-	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x69, 0x67,
-	0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
-	0x67, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x57, 0x69, 0x66, 0x69, 0x41, 0x75, 0x74, 0x68, 0x65,
-	0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x38, 0x0a, 0x04, 0x77, 0x69, 0x66, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
-	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x52, 0x04, 0x77, 0x69, 0x66, 0x69, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73,
-	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
-	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6c,
-	0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x64,
-	0x69, 0x73, 0x68, 0x22, 0x32, 0x0a, 0x17, 0x57, 0x69, 0x66, 0x69, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17,
-	0x0a, 0x07, 0x64, 0x69, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x06, 0x64, 0x69, 0x73, 0x68, 0x49, 0x64, 0x22, 0xfe, 0x04, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67,
-	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e,
-	0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02,
-	0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73, 0x12,
-	0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x74, 0x64, 0x64, 0x65,
-	0x76, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65,
-	0x6e, 0x63, 0x79, 0x53, 0x74, 0x64, 0x64, 0x65, 0x76, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6c,
-	0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x35,
-	0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
-	0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73, 0x35, 0x6d, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x74, 0x65,
-	0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x31, 0x68, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61,
-	0x6e, 0x4d, 0x73, 0x31, 0x68, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
-	0x5f, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x6d, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x61, 0x6e, 0x4d, 0x73,
-	0x31, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x12,
-	0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x35, 0x6d, 0x18,
-	0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74, 0x65, 0x35,
-	0x6d, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31,
-	0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x61, 0x74,
-	0x65, 0x31, 0x68, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65,
-	0x5f, 0x31, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x52,
-	0x61, 0x74, 0x65, 0x31, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
-	0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63,
-	0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x73, 0x65, 0x63, 0x6f, 0x6e,
-	0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65,
-	0x73, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
-	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
-	0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
-	0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x73, 0x4f, 0x75, 0x74, 0x61,
-	0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69,
-	0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x61,
-	0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
-	0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x35, 0x73, 0x4f, 0x75, 0x74, 0x61,
-	0x67, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x68, 0x61, 0x70, 0x70, 0x79, 0x5f, 0x68, 0x6f, 0x75, 0x72,
-	0x73, 0x5f, 0x31, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x68,
-	0x61, 0x70, 0x70, 0x79, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x31, 0x73, 0x31, 0x64, 0x12, 0x29, 0x0a,
-	0x11, 0x68, 0x61, 0x70, 0x70, 0x79, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x5f, 0x35, 0x73, 0x5f,
-	0x31, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x48,
-	0x6f, 0x75, 0x72, 0x73, 0x35, 0x73, 0x31, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x57, 0x69, 0x66, 0x69,
-	0x47, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x1a, 0x57, 0x69, 0x66, 0x69, 0x47, 0x65, 0x74,
-	0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
-	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65,
-	0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x42,
-	0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70,
-	0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
 var (
 	file_spacex_api_device_wifi_proto_rawDescOnce sync.Once
 	file_spacex_api_device_wifi_proto_rawDescData = file_spacex_api_device_wifi_proto_rawDesc
@@ -1366,53 +7460,390 @@ func file_spacex_api_device_wifi_proto_rawDescGZIP() [
 	return file_spacex_api_device_wifi_proto_rawDescData
 }
 
-var file_spacex_api_device_wifi_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_spacex_api_device_wifi_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_spacex_api_device_wifi_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
+var file_spacex_api_device_wifi_proto_msgTypes = make([]protoimpl.MessageInfo, 44)
 var file_spacex_api_device_wifi_proto_goTypes = []interface{}{
-	(WifiClient_Interface)(0),           // 0: SpaceX.API.Device.WifiClient.Interface
-	(*WifiSetConfigRequest)(nil),        // 1: SpaceX.API.Device.WifiSetConfigRequest
-	(*WifiSetConfigResponse)(nil),       // 2: SpaceX.API.Device.WifiSetConfigResponse
-	(*WifiGetClientsRequest)(nil),       // 3: SpaceX.API.Device.WifiGetClientsRequest
-	(*WifiGetClientsResponse)(nil),      // 4: SpaceX.API.Device.WifiGetClientsResponse
-	(*WifiGetHistoryResponse)(nil),      // 5: SpaceX.API.Device.WifiGetHistoryResponse
-	(*WifiNewClientConnectedEvent)(nil), // 6: SpaceX.API.Device.WifiNewClientConnectedEvent
-	(*WifiClient)(nil),                  // 7: SpaceX.API.Device.WifiClient
-	(*WifiSetupRequest)(nil),            // 8: SpaceX.API.Device.WifiSetupRequest
-	(*WifiSetupResponse)(nil),           // 9: SpaceX.API.Device.WifiSetupResponse
-	(*WifiGetStatusResponse)(nil),       // 10: SpaceX.API.Device.WifiGetStatusResponse
-	(*WifiAuthenticateRequest)(nil),     // 11: SpaceX.API.Device.WifiAuthenticateRequest
-	(*WifiAuthenticateResponse)(nil),    // 12: SpaceX.API.Device.WifiAuthenticateResponse
-	(*WifiAccountBondingEvent)(nil),     // 13: SpaceX.API.Device.WifiAccountBondingEvent
-	(*PingMetrics)(nil),                 // 14: SpaceX.API.Device.PingMetrics
-	(*WifiGetPingMetricsRequest)(nil),   // 15: SpaceX.API.Device.WifiGetPingMetricsRequest
-	(*WifiGetPingMetricsResponse)(nil),  // 16: SpaceX.API.Device.WifiGetPingMetricsResponse
-	(*WifiClient_RxStats)(nil),          // 17: SpaceX.API.Device.WifiClient.RxStats
-	(*WifiClient_TxStats)(nil),          // 18: SpaceX.API.Device.WifiClient.TxStats
-	(*WifiConfig)(nil),                  // 19: SpaceX.API.Device.WifiConfig
-	(*DeviceInfo)(nil),                  // 20: SpaceX.API.Device.DeviceInfo
-	(*DeviceState)(nil),                 // 21: SpaceX.API.Device.DeviceState
-	(*SignedData)(nil),                  // 22: SpaceX.API.Device.SignedData
-	(*ChallengeResponse)(nil),           // 23: SpaceX.API.Device.ChallengeResponse
+	(WifiGetClientHistoryResponse_WifiLimitedReason)(0), // 0: SpaceX.API.Device.WifiGetClientHistoryResponse.WifiLimitedReason
+	(WifiClient_Interface)(0),                           // 1: SpaceX.API.Device.WifiClient.Interface
+	(WifiClient_Role)(0),                                // 2: SpaceX.API.Device.WifiClient.Role
+	(WifiScanResults_Network_Source)(0),                 // 3: SpaceX.API.Device.WifiScanResults.Network.Source
+	(WifiNetwork_Band)(0),                               // 4: SpaceX.API.Device.WifiNetwork.Band
+	(*WifiClients)(nil),                                 // 5: SpaceX.API.Device.WifiClients
+	(*ToController)(nil),                                // 6: SpaceX.API.Device.ToController
+	(*WifiMeshJoin)(nil),                                // 7: SpaceX.API.Device.WifiMeshJoin
+	(*FromController)(nil),                              // 8: SpaceX.API.Device.FromController
+	(*WifiSetConfigRequest)(nil),                        // 9: SpaceX.API.Device.WifiSetConfigRequest
+	(*WifiSetConfigResponse)(nil),                       // 10: SpaceX.API.Device.WifiSetConfigResponse
+	(*WifiGetConfigRequest)(nil),                        // 11: SpaceX.API.Device.WifiGetConfigRequest
+	(*WifiGetConfigResponse)(nil),                       // 12: SpaceX.API.Device.WifiGetConfigResponse
+	(*WifiSetMeshDeviceTrustRequest)(nil),               // 13: SpaceX.API.Device.WifiSetMeshDeviceTrustRequest
+	(*WifiSetMeshDeviceTrustResponse)(nil),              // 14: SpaceX.API.Device.WifiSetMeshDeviceTrustResponse
+	(*WifiSetMeshConfigRequest)(nil),                    // 15: SpaceX.API.Device.WifiSetMeshConfigRequest
+	(*WifiSetMeshConfigResponse)(nil),                   // 16: SpaceX.API.Device.WifiSetMeshConfigResponse
+	(*WifiGetClientsRequest)(nil),                       // 17: SpaceX.API.Device.WifiGetClientsRequest
+	(*WifiGetClientsResponse)(nil),                      // 18: SpaceX.API.Device.WifiGetClientsResponse
+	(*WifiGetClientHistoryRequest)(nil),                 // 19: SpaceX.API.Device.WifiGetClientHistoryRequest
+	(*WifiGetClientHistoryResponse)(nil),                // 20: SpaceX.API.Device.WifiGetClientHistoryResponse
+	(*WifiGetHistoryResponse)(nil),                      // 21: SpaceX.API.Device.WifiGetHistoryResponse
+	(*WifiNewClientConnectedEvent)(nil),                 // 22: SpaceX.API.Device.WifiNewClientConnectedEvent
+	(*WifiClient)(nil),                                  // 23: SpaceX.API.Device.WifiClient
+	(*WifiSetupRequest)(nil),                            // 24: SpaceX.API.Device.WifiSetupRequest
+	(*WifiSetupResponse)(nil),                           // 25: SpaceX.API.Device.WifiSetupResponse
+	(*WifiBandStatus)(nil),                              // 26: SpaceX.API.Device.WifiBandStatus
+	(*WifiAlerts)(nil),                                  // 27: SpaceX.API.Device.WifiAlerts
+	(*WifiGetStatusResponse)(nil),                       // 28: SpaceX.API.Device.WifiGetStatusResponse
+	(*WifiAuthenticateRequest)(nil),                     // 29: SpaceX.API.Device.WifiAuthenticateRequest
+	(*WifiAuthenticateResponse)(nil),                    // 30: SpaceX.API.Device.WifiAuthenticateResponse
+	(*WifiAccountBondingEvent)(nil),                     // 31: SpaceX.API.Device.WifiAccountBondingEvent
+	(*WifiNewPeerEvent)(nil),                            // 32: SpaceX.API.Device.WifiNewPeerEvent
+	(*PingMetrics)(nil),                                 // 33: SpaceX.API.Device.PingMetrics
+	(*WifiGetPingMetricsRequest)(nil),                   // 34: SpaceX.API.Device.WifiGetPingMetricsRequest
+	(*WifiGetPingMetricsResponse)(nil),                  // 35: SpaceX.API.Device.WifiGetPingMetricsResponse
+	(*WifiGetDiagnosticsRequest)(nil),                   // 36: SpaceX.API.Device.WifiGetDiagnosticsRequest
+	(*WifiGetDiagnosticsResponse)(nil),                  // 37: SpaceX.API.Device.WifiGetDiagnosticsResponse
+	(*WifiScanResults)(nil),                             // 38: SpaceX.API.Device.WifiScanResults
+	(*WifiNetwork)(nil),                                 // 39: SpaceX.API.Device.WifiNetwork
+	(*WifiPersistentStats)(nil),                         // 40: SpaceX.API.Device.WifiPersistentStats
+	(*WifiGetPersistentStatsResponse)(nil),              // 41: SpaceX.API.Device.WifiGetPersistentStatsResponse
+	(*StarlinkRouterHourlyMetricsV2)(nil),               // 42: SpaceX.API.Device.starlink_router_hourly_metrics_v2
+	(*StarlinkRoutersHourlyMetricsV2)(nil),              // 43: SpaceX.API.Device.starlink_routers_hourly_metrics_v2
+	(*StarlinkRouterAlerts)(nil),                        // 44: SpaceX.API.Device.starlink_router_alerts
+	(*WifiClient_RxStats)(nil),                          // 45: SpaceX.API.Device.WifiClient.RxStats
+	(*WifiClient_TxStats)(nil),                          // 46: SpaceX.API.Device.WifiClient.TxStats
+	(*WifiScanResults_Network)(nil),                     // 47: SpaceX.API.Device.WifiScanResults.Network
+	(*WifiPersistentStats_Event)(nil),                   // 48: SpaceX.API.Device.WifiPersistentStats.Event
+	(*WifiConfig)(nil),                                  // 49: SpaceX.API.Device.WifiConfig
+	(MeshAuth)(0),                                       // 50: SpaceX.API.Device.MeshAuth
+	(*MeshConfig)(nil),                                  // 51: SpaceX.API.Device.MeshConfig
+	(*DeviceInfo)(nil),                                  // 52: SpaceX.API.Device.DeviceInfo
+	(*DeviceState)(nil),                                 // 53: SpaceX.API.Device.DeviceState
+	(*SignedData)(nil),                                  // 54: SpaceX.API.Device.SignedData
+	(*ChallengeResponse)(nil),                           // 55: SpaceX.API.Device.ChallengeResponse
+	(*wrapperspb.StringValue)(nil),                      // 56: google.protobuf.StringValue
+	(*wrapperspb.UInt32Value)(nil),                      // 57: google.protobuf.UInt32Value
+	(*wrapperspb.BoolValue)(nil),                        // 58: google.protobuf.BoolValue
+	(*wrapperspb.FloatValue)(nil),                       // 59: google.protobuf.FloatValue
+	(*wrapperspb.Int32Value)(nil),                       // 60: google.protobuf.Int32Value
+	(*telemetron.TimestampInfo)(nil),                    // 61: SpaceX.API.Telemetron.Public.Common.TimestampInfo
+	(*wrapperspb.Int64Value)(nil),                       // 62: google.protobuf.Int64Value
 }
 var file_spacex_api_device_wifi_proto_depIdxs = []int32{
-	19, // 0: SpaceX.API.Device.WifiSetConfigRequest.wifi_config:type_name -> SpaceX.API.Device.WifiConfig
-	7,  // 1: SpaceX.API.Device.WifiGetClientsResponse.clients:type_name -> SpaceX.API.Device.WifiClient
-	7,  // 2: SpaceX.API.Device.WifiNewClientConnectedEvent.client:type_name -> SpaceX.API.Device.WifiClient
-	17, // 3: SpaceX.API.Device.WifiClient.rx_stats:type_name -> SpaceX.API.Device.WifiClient.RxStats
-	18, // 4: SpaceX.API.Device.WifiClient.tx_stats:type_name -> SpaceX.API.Device.WifiClient.TxStats
-	0,  // 5: SpaceX.API.Device.WifiClient.iface:type_name -> SpaceX.API.Device.WifiClient.Interface
-	20, // 6: SpaceX.API.Device.WifiGetStatusResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
-	21, // 7: SpaceX.API.Device.WifiGetStatusResponse.device_state:type_name -> SpaceX.API.Device.DeviceState
-	7,  // 8: SpaceX.API.Device.WifiGetStatusResponse.clients:type_name -> SpaceX.API.Device.WifiClient
-	22, // 9: SpaceX.API.Device.WifiAuthenticateRequest.challenge:type_name -> SpaceX.API.Device.SignedData
-	23, // 10: SpaceX.API.Device.WifiAuthenticateResponse.wifi:type_name -> SpaceX.API.Device.ChallengeResponse
-	23, // 11: SpaceX.API.Device.WifiAuthenticateResponse.dish:type_name -> SpaceX.API.Device.ChallengeResponse
-	14, // 12: SpaceX.API.Device.WifiGetPingMetricsResponse.internet:type_name -> SpaceX.API.Device.PingMetrics
-	13, // [13:13] is the sub-list for method output_type
-	13, // [13:13] is the sub-list for method input_type
-	13, // [13:13] is the sub-list for extension type_name
-	13, // [13:13] is the sub-list for extension extendee
-	0,  // [0:13] is the sub-list for field type_name
+	23,  // 0: SpaceX.API.Device.WifiClients.clients:type_name -> SpaceX.API.Device.WifiClient
+	5,   // 1: SpaceX.API.Device.ToController.clients:type_name -> SpaceX.API.Device.WifiClients
+	7,   // 2: SpaceX.API.Device.ToController.mesh_join:type_name -> SpaceX.API.Device.WifiMeshJoin
+	49,  // 3: SpaceX.API.Device.FromController.wifi_config:type_name -> SpaceX.API.Device.WifiConfig
+	49,  // 4: SpaceX.API.Device.WifiSetConfigRequest.wifi_config:type_name -> SpaceX.API.Device.WifiConfig
+	49,  // 5: SpaceX.API.Device.WifiSetConfigResponse.updated_wifi_config:type_name -> SpaceX.API.Device.WifiConfig
+	49,  // 6: SpaceX.API.Device.WifiGetConfigResponse.wifi_config:type_name -> SpaceX.API.Device.WifiConfig
+	50,  // 7: SpaceX.API.Device.WifiSetMeshDeviceTrustRequest.auth:type_name -> SpaceX.API.Device.MeshAuth
+	51,  // 8: SpaceX.API.Device.WifiSetMeshConfigRequest.mesh_config:type_name -> SpaceX.API.Device.MeshConfig
+	23,  // 9: SpaceX.API.Device.WifiGetClientsResponse.clients:type_name -> SpaceX.API.Device.WifiClient
+	0,   // 10: SpaceX.API.Device.WifiGetClientHistoryResponse.throughput_limited:type_name -> SpaceX.API.Device.WifiGetClientHistoryResponse.WifiLimitedReason
+	23,  // 11: SpaceX.API.Device.WifiNewClientConnectedEvent.client:type_name -> SpaceX.API.Device.WifiClient
+	45,  // 12: SpaceX.API.Device.WifiClient.rx_stats:type_name -> SpaceX.API.Device.WifiClient.RxStats
+	46,  // 13: SpaceX.API.Device.WifiClient.tx_stats:type_name -> SpaceX.API.Device.WifiClient.TxStats
+	1,   // 14: SpaceX.API.Device.WifiClient.iface:type_name -> SpaceX.API.Device.WifiClient.Interface
+	2,   // 15: SpaceX.API.Device.WifiClient.role:type_name -> SpaceX.API.Device.WifiClient.Role
+	52,  // 16: SpaceX.API.Device.WifiGetStatusResponse.device_info:type_name -> SpaceX.API.Device.DeviceInfo
+	53,  // 17: SpaceX.API.Device.WifiGetStatusResponse.device_state:type_name -> SpaceX.API.Device.DeviceState
+	26,  // 18: SpaceX.API.Device.WifiGetStatusResponse.rf_2ghz_status:type_name -> SpaceX.API.Device.WifiBandStatus
+	26,  // 19: SpaceX.API.Device.WifiGetStatusResponse.rf_5ghz_status:type_name -> SpaceX.API.Device.WifiBandStatus
+	27,  // 20: SpaceX.API.Device.WifiGetStatusResponse.alerts:type_name -> SpaceX.API.Device.WifiAlerts
+	54,  // 21: SpaceX.API.Device.WifiAuthenticateRequest.challenge:type_name -> SpaceX.API.Device.SignedData
+	55,  // 22: SpaceX.API.Device.WifiAuthenticateResponse.wifi:type_name -> SpaceX.API.Device.ChallengeResponse
+	55,  // 23: SpaceX.API.Device.WifiAuthenticateResponse.dish:type_name -> SpaceX.API.Device.ChallengeResponse
+	33,  // 24: SpaceX.API.Device.WifiGetPingMetricsResponse.internet:type_name -> SpaceX.API.Device.PingMetrics
+	38,  // 25: SpaceX.API.Device.WifiGetDiagnosticsResponse.network_scan:type_name -> SpaceX.API.Device.WifiScanResults
+	39,  // 26: SpaceX.API.Device.WifiGetDiagnosticsResponse.wifi_networks:type_name -> SpaceX.API.Device.WifiNetwork
+	47,  // 27: SpaceX.API.Device.WifiScanResults.networks:type_name -> SpaceX.API.Device.WifiScanResults.Network
+	4,   // 28: SpaceX.API.Device.WifiNetwork.band:type_name -> SpaceX.API.Device.WifiNetwork.Band
+	48,  // 29: SpaceX.API.Device.WifiPersistentStats.factory_reset_button:type_name -> SpaceX.API.Device.WifiPersistentStats.Event
+	48,  // 30: SpaceX.API.Device.WifiPersistentStats.factory_reset_plug_unplug:type_name -> SpaceX.API.Device.WifiPersistentStats.Event
+	48,  // 31: SpaceX.API.Device.WifiPersistentStats.factory_reset_command:type_name -> SpaceX.API.Device.WifiPersistentStats.Event
+	48,  // 32: SpaceX.API.Device.WifiPersistentStats.factory_reset_failed_load_wifi_config:type_name -> SpaceX.API.Device.WifiPersistentStats.Event
+	48,  // 33: SpaceX.API.Device.WifiPersistentStats.reboot_from_software_update:type_name -> SpaceX.API.Device.WifiPersistentStats.Event
+	40,  // 34: SpaceX.API.Device.WifiGetPersistentStatsResponse.stats:type_name -> SpaceX.API.Device.WifiPersistentStats
+	56,  // 35: SpaceX.API.Device.starlink_router_hourly_metrics_v2.id:type_name -> google.protobuf.StringValue
+	56,  // 36: SpaceX.API.Device.starlink_router_hourly_metrics_v2.timestamp_date:type_name -> google.protobuf.StringValue
+	57,  // 37: SpaceX.API.Device.starlink_router_hourly_metrics_v2.timestamp_hour:type_name -> google.protobuf.UInt32Value
+	57,  // 38: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_hw_gen:type_name -> google.protobuf.UInt32Value
+	56,  // 39: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_sw:type_name -> google.protobuf.StringValue
+	56,  // 40: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_country:type_name -> google.protobuf.StringValue
+	58,  // 41: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_is_dev:type_name -> google.protobuf.BoolValue
+	57,  // 42: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_alloc_fds:type_name -> google.protobuf.UInt32Value
+	59,  // 43: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_cpu_usage:type_name -> google.protobuf.FloatValue
+	59,  // 44: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_mem_free_kb:type_name -> google.protobuf.FloatValue
+	60,  // 45: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_bootcount:type_name -> google.protobuf.Int32Value
+	58,  // 46: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_partitions_equal:type_name -> google.protobuf.BoolValue
+	57,  // 47: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_uptime_seconds:type_name -> google.protobuf.UInt32Value
+	60,  // 48: SpaceX.API.Device.starlink_router_hourly_metrics_v2.sys_anti_rollback_version:type_name -> google.protobuf.Int32Value
+	57,  // 49: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_channel:type_name -> google.protobuf.UInt32Value
+	59,  // 50: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_antenna1_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 51: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_antenna2_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 52: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_antenna3_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 53: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_iface_count:type_name -> google.protobuf.UInt32Value
+	59,  // 54: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_chan_busy_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 55: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_edcca_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 56: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_overlapping_bss_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 57: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 58: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 59: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 60: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_frame_errors:type_name -> google.protobuf.UInt32Value
+	59,  // 61: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 62: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_rx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 63: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_tx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 64: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_tx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 65: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_tx_errors:type_name -> google.protobuf.UInt32Value
+	59,  // 66: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_tx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 67: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_tx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 68: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_channel:type_name -> google.protobuf.UInt32Value
+	59,  // 69: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_antenna1_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 70: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_antenna2_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 71: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_antenna3_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 72: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_iface_count:type_name -> google.protobuf.UInt32Value
+	59,  // 73: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_chan_busy_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 74: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_edcca_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 75: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_overlapping_bss_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 76: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 77: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 78: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 79: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_frame_errors:type_name -> google.protobuf.UInt32Value
+	59,  // 80: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 81: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_rx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 82: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_tx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 83: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_tx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 84: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_tx_errors:type_name -> google.protobuf.UInt32Value
+	59,  // 85: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_tx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 86: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_tx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 87: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_thermal_temp:type_name -> google.protobuf.FloatValue
+	59,  // 88: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_thermal_temp:type_name -> google.protobuf.FloatValue
+	59,  // 89: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_thermal_duty_cycle:type_name -> google.protobuf.FloatValue
+	59,  // 90: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_thermal_duty_cycle:type_name -> google.protobuf.FloatValue
+	57,  // 91: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_2ghz_thermal_throttled_seconds:type_name -> google.protobuf.UInt32Value
+	57,  // 92: SpaceX.API.Device.starlink_router_hourly_metrics_v2.radios_5ghz_thermal_throttled_seconds:type_name -> google.protobuf.UInt32Value
+	57,  // 93: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_rx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 94: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_rx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 95: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_rx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 96: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_rx_frame_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 97: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_tx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 98: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_tx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 99: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_lan_eth_tx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 100: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_rx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 101: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_rx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 102: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_rx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 103: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_rx_frame_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 104: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_tx_bytes:type_name -> google.protobuf.UInt32Value
+	57,  // 105: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_tx_packets:type_name -> google.protobuf.UInt32Value
+	57,  // 106: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ifaces_wan_eth_tx_errors:type_name -> google.protobuf.UInt32Value
+	57,  // 107: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients:type_name -> google.protobuf.UInt32Value
+	57,  // 108: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_2ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 109: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_5ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 110: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_eth:type_name -> google.protobuf.UInt32Value
+	57,  // 111: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_repeater:type_name -> google.protobuf.UInt32Value
+	57,  // 112: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_repeater_2ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 113: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_repeater_5ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 114: SpaceX.API.Device.starlink_router_hourly_metrics_v2.clients_repeater_eth:type_name -> google.protobuf.UInt32Value
+	57,  // 115: SpaceX.API.Device.starlink_router_hourly_metrics_v2.mesh_hops:type_name -> google.protobuf.UInt32Value
+	59,  // 116: SpaceX.API.Device.starlink_router_hourly_metrics_v2.mesh_one_hop_rssi_avg_2ghz:type_name -> google.protobuf.FloatValue
+	59,  // 117: SpaceX.API.Device.starlink_router_hourly_metrics_v2.mesh_one_hop_rssi_avg_5ghz:type_name -> google.protobuf.FloatValue
+	59,  // 118: SpaceX.API.Device.starlink_router_hourly_metrics_v2.mesh_two_hop_rssi_avg_2ghz:type_name -> google.protobuf.FloatValue
+	59,  // 119: SpaceX.API.Device.starlink_router_hourly_metrics_v2.mesh_two_hop_rssi_avg_5ghz:type_name -> google.protobuf.FloatValue
+	59,  // 120: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_seconds_since_last_1s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 121: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_seconds_since_last_2s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 122: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_seconds_since_last_5s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 123: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_seconds_since_last_60s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 124: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_seconds_since_last_300s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 125: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_drop_rate:type_name -> google.protobuf.FloatValue
+	59,  // 126: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_drop_rate_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 127: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_latency:type_name -> google.protobuf.FloatValue
+	59,  // 128: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_seconds_since_last_1s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 129: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_seconds_since_last_2s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 130: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_seconds_since_last_5s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 131: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_seconds_since_last_60s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 132: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_seconds_since_last_300s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 133: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_drop_rate:type_name -> google.protobuf.FloatValue
+	59,  // 134: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_drop_rate_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 135: SpaceX.API.Device.starlink_router_hourly_metrics_v2.ping_dish_latency:type_name -> google.protobuf.FloatValue
+	59,  // 136: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_router_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 137: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_router_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 138: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_router_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 139: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_wifi_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 140: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_wifi_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 141: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 142: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 143: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 144: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_iface:type_name -> google.protobuf.UInt32Value
+	56,  // 145: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_oui:type_name -> google.protobuf.StringValue
+	57,  // 146: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_tx_rate:type_name -> google.protobuf.UInt32Value
+	57,  // 147: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_rx_rate:type_name -> google.protobuf.UInt32Value
+	57,  // 148: SpaceX.API.Device.starlink_router_hourly_metrics_v2.client_speedtest_client_platform_type:type_name -> google.protobuf.UInt32Value
+	59,  // 149: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_8_download_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 150: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_8_download_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 151: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_8_upload_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 152: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_8_upload_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 153: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_64_download_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 154: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_64_download_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 155: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_64_upload_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 156: SpaceX.API.Device.starlink_router_hourly_metrics_v2.speedtest_tcp_64_upload_mbps_max:type_name -> google.protobuf.FloatValue
+	57,  // 157: SpaceX.API.Device.starlink_router_hourly_metrics_v2.dish_cell_id:type_name -> google.protobuf.UInt32Value
+	58,  // 158: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_setup_complete:type_name -> google.protobuf.BoolValue
+	58,  // 159: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_bands_split:type_name -> google.protobuf.BoolValue
+	58,  // 160: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_is_repeater:type_name -> google.protobuf.BoolValue
+	58,  // 161: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_open_network:type_name -> google.protobuf.BoolValue
+	58,  // 162: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_is_aviation:type_name -> google.protobuf.BoolValue
+	58,  // 163: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_secure_dns:type_name -> google.protobuf.BoolValue
+	58,  // 164: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_legacy:type_name -> google.protobuf.BoolValue
+	58,  // 165: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_ap_mode:type_name -> google.protobuf.BoolValue
+	58,  // 166: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_dfs_enabled:type_name -> google.protobuf.BoolValue
+	58,  // 167: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_network_name_is_default:type_name -> google.protobuf.BoolValue
+	58,  // 168: SpaceX.API.Device.starlink_router_hourly_metrics_v2.config_remote_ssh_enabled:type_name -> google.protobuf.BoolValue
+	56,  // 169: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.id:type_name -> google.protobuf.StringValue
+	56,  // 170: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.timestamp_date:type_name -> google.protobuf.StringValue
+	57,  // 171: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.timestamp_hour:type_name -> google.protobuf.UInt32Value
+	61,  // 172: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.timestamp:type_name -> SpaceX.API.Telemetron.Public.Common.TimestampInfo
+	57,  // 173: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_hw_gen:type_name -> google.protobuf.UInt32Value
+	56,  // 174: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_sw:type_name -> google.protobuf.StringValue
+	56,  // 175: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_country:type_name -> google.protobuf.StringValue
+	58,  // 176: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_is_dev:type_name -> google.protobuf.BoolValue
+	57,  // 177: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_alloc_fds:type_name -> google.protobuf.UInt32Value
+	59,  // 178: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_cpu_usage:type_name -> google.protobuf.FloatValue
+	59,  // 179: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_mem_free_kb:type_name -> google.protobuf.FloatValue
+	60,  // 180: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_bootcount:type_name -> google.protobuf.Int32Value
+	58,  // 181: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_partitions_equal:type_name -> google.protobuf.BoolValue
+	57,  // 182: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_uptime_seconds:type_name -> google.protobuf.UInt32Value
+	60,  // 183: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.sys_anti_rollback_version:type_name -> google.protobuf.Int32Value
+	57,  // 184: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_channel:type_name -> google.protobuf.UInt32Value
+	59,  // 185: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_antenna1_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 186: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_antenna2_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 187: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_antenna3_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 188: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_iface_count:type_name -> google.protobuf.UInt32Value
+	59,  // 189: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_chan_busy_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 190: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_edcca_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 191: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_overlapping_bss_fraction:type_name -> google.protobuf.FloatValue
+	62,  // 192: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 193: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 194: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_errors:type_name -> google.protobuf.Int64Value
+	62,  // 195: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_frame_errors:type_name -> google.protobuf.Int64Value
+	59,  // 196: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 197: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_rx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	62,  // 198: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_tx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 199: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_tx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 200: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_tx_errors:type_name -> google.protobuf.Int64Value
+	59,  // 201: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_tx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 202: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_tx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	57,  // 203: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_channel:type_name -> google.protobuf.UInt32Value
+	59,  // 204: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_antenna1_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 205: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_antenna2_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 206: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_antenna3_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 207: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_iface_count:type_name -> google.protobuf.UInt32Value
+	59,  // 208: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_chan_busy_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 209: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_edcca_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 210: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_overlapping_bss_fraction:type_name -> google.protobuf.FloatValue
+	62,  // 211: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 212: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 213: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_errors:type_name -> google.protobuf.Int64Value
+	62,  // 214: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_frame_errors:type_name -> google.protobuf.Int64Value
+	59,  // 215: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 216: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_rx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	62,  // 217: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_tx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 218: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_tx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 219: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_tx_errors:type_name -> google.protobuf.Int64Value
+	59,  // 220: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_tx_packet_error_rate:type_name -> google.protobuf.FloatValue
+	59,  // 221: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_tx_airtime_fraction:type_name -> google.protobuf.FloatValue
+	59,  // 222: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_thermal_temp:type_name -> google.protobuf.FloatValue
+	59,  // 223: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_thermal_temp:type_name -> google.protobuf.FloatValue
+	59,  // 224: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_thermal_duty_cycle:type_name -> google.protobuf.FloatValue
+	59,  // 225: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_thermal_duty_cycle:type_name -> google.protobuf.FloatValue
+	57,  // 226: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_2ghz_thermal_throttled_seconds:type_name -> google.protobuf.UInt32Value
+	57,  // 227: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.radios_5ghz_thermal_throttled_seconds:type_name -> google.protobuf.UInt32Value
+	62,  // 228: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_rx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 229: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_rx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 230: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_rx_errors:type_name -> google.protobuf.Int64Value
+	62,  // 231: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_rx_frame_errors:type_name -> google.protobuf.Int64Value
+	62,  // 232: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_tx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 233: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_tx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 234: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_lan_eth_tx_errors:type_name -> google.protobuf.Int64Value
+	62,  // 235: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_rx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 236: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_rx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 237: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_rx_errors:type_name -> google.protobuf.Int64Value
+	62,  // 238: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_rx_frame_errors:type_name -> google.protobuf.Int64Value
+	62,  // 239: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_tx_bytes:type_name -> google.protobuf.Int64Value
+	62,  // 240: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_tx_packets:type_name -> google.protobuf.Int64Value
+	62,  // 241: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ifaces_wan_eth_tx_errors:type_name -> google.protobuf.Int64Value
+	57,  // 242: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients:type_name -> google.protobuf.UInt32Value
+	57,  // 243: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_2ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 244: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_5ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 245: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_eth:type_name -> google.protobuf.UInt32Value
+	57,  // 246: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_repeater:type_name -> google.protobuf.UInt32Value
+	57,  // 247: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_repeater_2ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 248: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_repeater_5ghz:type_name -> google.protobuf.UInt32Value
+	57,  // 249: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.clients_repeater_eth:type_name -> google.protobuf.UInt32Value
+	57,  // 250: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.mesh_hops:type_name -> google.protobuf.UInt32Value
+	59,  // 251: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.mesh_one_hop_rssi_avg_2ghz:type_name -> google.protobuf.FloatValue
+	59,  // 252: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.mesh_one_hop_rssi_avg_5ghz:type_name -> google.protobuf.FloatValue
+	59,  // 253: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.mesh_two_hop_rssi_avg_2ghz:type_name -> google.protobuf.FloatValue
+	59,  // 254: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.mesh_two_hop_rssi_avg_5ghz:type_name -> google.protobuf.FloatValue
+	59,  // 255: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_seconds_since_last_1s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 256: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_seconds_since_last_2s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 257: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_seconds_since_last_5s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 258: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_seconds_since_last_60s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 259: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_seconds_since_last_300s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 260: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_drop_rate:type_name -> google.protobuf.FloatValue
+	59,  // 261: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_drop_rate_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 262: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_latency:type_name -> google.protobuf.FloatValue
+	59,  // 263: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_latency_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 264: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_seconds_since_last_1s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 265: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_seconds_since_last_2s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 266: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_seconds_since_last_5s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 267: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_seconds_since_last_60s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 268: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_seconds_since_last_300s_outage:type_name -> google.protobuf.FloatValue
+	59,  // 269: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_drop_rate:type_name -> google.protobuf.FloatValue
+	59,  // 270: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_drop_rate_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 271: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_latency:type_name -> google.protobuf.FloatValue
+	59,  // 272: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.ping_dish_latency_last_1h:type_name -> google.protobuf.FloatValue
+	59,  // 273: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_router_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 274: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_router_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 275: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_router_rssi:type_name -> google.protobuf.FloatValue
+	59,  // 276: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_wifi_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 277: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_wifi_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 278: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_download_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 279: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_upload_mbps:type_name -> google.protobuf.FloatValue
+	59,  // 280: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_rssi:type_name -> google.protobuf.FloatValue
+	57,  // 281: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_iface:type_name -> google.protobuf.UInt32Value
+	56,  // 282: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_oui:type_name -> google.protobuf.StringValue
+	57,  // 283: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_tx_rate:type_name -> google.protobuf.UInt32Value
+	57,  // 284: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_rx_rate:type_name -> google.protobuf.UInt32Value
+	57,  // 285: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.client_speedtest_client_platform_type:type_name -> google.protobuf.UInt32Value
+	59,  // 286: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_8_download_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 287: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_8_download_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 288: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_8_upload_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 289: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_8_upload_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 290: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_64_download_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 291: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_64_download_mbps_max:type_name -> google.protobuf.FloatValue
+	59,  // 292: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_64_upload_mbps_avg:type_name -> google.protobuf.FloatValue
+	59,  // 293: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.speedtest_tcp_64_upload_mbps_max:type_name -> google.protobuf.FloatValue
+	57,  // 294: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.dish_cell_id:type_name -> google.protobuf.UInt32Value
+	58,  // 295: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_setup_complete:type_name -> google.protobuf.BoolValue
+	58,  // 296: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_bands_split:type_name -> google.protobuf.BoolValue
+	58,  // 297: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_is_repeater:type_name -> google.protobuf.BoolValue
+	58,  // 298: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_open_network:type_name -> google.protobuf.BoolValue
+	58,  // 299: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_is_aviation:type_name -> google.protobuf.BoolValue
+	58,  // 300: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_secure_dns:type_name -> google.protobuf.BoolValue
+	58,  // 301: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_legacy:type_name -> google.protobuf.BoolValue
+	58,  // 302: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_ap_mode:type_name -> google.protobuf.BoolValue
+	58,  // 303: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_dfs_enabled:type_name -> google.protobuf.BoolValue
+	58,  // 304: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_network_name_is_default:type_name -> google.protobuf.BoolValue
+	58,  // 305: SpaceX.API.Device.starlink_routers_hourly_metrics_v2.config_remote_ssh_enabled:type_name -> google.protobuf.BoolValue
+	61,  // 306: SpaceX.API.Device.starlink_router_alerts.start:type_name -> SpaceX.API.Telemetron.Public.Common.TimestampInfo
+	61,  // 307: SpaceX.API.Device.starlink_router_alerts.end:type_name -> SpaceX.API.Telemetron.Public.Common.TimestampInfo
+	3,   // 308: SpaceX.API.Device.WifiScanResults.Network.source:type_name -> SpaceX.API.Device.WifiScanResults.Network.Source
+	6,   // 309: SpaceX.API.Device.Mesh.MeshStream:input_type -> SpaceX.API.Device.ToController
+	8,   // 310: SpaceX.API.Device.Mesh.MeshStream:output_type -> SpaceX.API.Device.FromController
+	310, // [310:311] is the sub-list for method output_type
+	309, // [309:310] is the sub-list for method input_type
+	309, // [309:309] is the sub-list for extension type_name
+	309, // [309:309] is the sub-list for extension extendee
+	0,   // [0:309] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_wifi_proto_init() }
@@ -1424,7 +7855,7 @@ func file_spacex_api_device_wifi_proto_init() {
 	file_spacex_api_device_wifi_config_proto_init()
 	if !protoimpl.UnsafeEnabled {
 		file_spacex_api_device_wifi_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiSetConfigRequest); i {
+			switch v := v.(*WifiClients); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1436,7 +7867,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiSetConfigResponse); i {
+			switch v := v.(*ToController); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1448,7 +7879,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetClientsRequest); i {
+			switch v := v.(*WifiMeshJoin); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1460,7 +7891,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetClientsResponse); i {
+			switch v := v.(*FromController); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1472,7 +7903,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetHistoryResponse); i {
+			switch v := v.(*WifiSetConfigRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1484,7 +7915,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiNewClientConnectedEvent); i {
+			switch v := v.(*WifiSetConfigResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1496,7 +7927,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiClient); i {
+			switch v := v.(*WifiGetConfigRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1508,7 +7939,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiSetupRequest); i {
+			switch v := v.(*WifiGetConfigResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1520,7 +7951,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiSetupResponse); i {
+			switch v := v.(*WifiSetMeshDeviceTrustRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1532,7 +7963,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetStatusResponse); i {
+			switch v := v.(*WifiSetMeshDeviceTrustResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1544,7 +7975,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiAuthenticateRequest); i {
+			switch v := v.(*WifiSetMeshConfigRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1556,7 +7987,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiAuthenticateResponse); i {
+			switch v := v.(*WifiSetMeshConfigResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1568,7 +7999,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiAccountBondingEvent); i {
+			switch v := v.(*WifiGetClientsRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1580,7 +8011,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PingMetrics); i {
+			switch v := v.(*WifiGetClientsResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1592,7 +8023,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetPingMetricsRequest); i {
+			switch v := v.(*WifiGetClientHistoryRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1604,7 +8035,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiGetPingMetricsResponse); i {
+			switch v := v.(*WifiGetClientHistoryResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1616,7 +8047,7 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WifiClient_RxStats); i {
+			switch v := v.(*WifiGetHistoryResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1628,6 +8059,294 @@ func file_spacex_api_device_wifi_proto_init() {
 			}
 		}
 		file_spacex_api_device_wifi_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNewClientConnectedEvent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiClient); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiSetupRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiSetupResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiBandStatus); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiAlerts); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetStatusResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiAuthenticateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiAuthenticateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiAccountBondingEvent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNewPeerEvent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PingMetrics); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetPingMetricsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetPingMetricsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetDiagnosticsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetDiagnosticsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiScanResults); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiNetwork); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiPersistentStats); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiGetPersistentStatsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StarlinkRouterHourlyMetricsV2); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StarlinkRoutersHourlyMetricsV2); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StarlinkRouterAlerts); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiClient_RxStats); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*WifiClient_TxStats); i {
 			case 0:
 				return &v.state
@@ -1639,16 +8358,47 @@ func file_spacex_api_device_wifi_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_wifi_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiScanResults_Network); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiPersistentStats_Event); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
+	file_spacex_api_device_wifi_proto_msgTypes[1].OneofWrappers = []interface{}{
+		(*ToController_Clients)(nil),
+		(*ToController_MeshJoin)(nil),
+	}
+	file_spacex_api_device_wifi_proto_msgTypes[3].OneofWrappers = []interface{}{
+		(*FromController_WifiConfig)(nil),
+	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_wifi_proto_rawDesc,
-			NumEnums:      1,
-			NumMessages:   18,
+			NumEnums:      5,
+			NumMessages:   44,
 			NumExtensions: 0,
-			NumServices:   0,
+			NumServices:   1,
 		},
 		GoTypes:           file_spacex_api_device_wifi_proto_goTypes,
 		DependencyIndexes: file_spacex_api_device_wifi_proto_depIdxs,
blob - b4060d5473f2b1c106f7da653be4577736a3df10
blob + c3c864f7ba7429c3ebe6f3a3c27ad18be9656eec
--- device/wifi_config.pb.go
+++ device/wifi_config.pb.go
@@ -20,27 +20,517 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+type MeshAuth int32
+
+const (
+	MeshAuth_MESH_AUTH_UNKNOWN   MeshAuth = 0
+	MeshAuth_MESH_AUTH_NEW       MeshAuth = 1
+	MeshAuth_MESH_AUTH_TRUSTED   MeshAuth = 2
+	MeshAuth_MESH_AUTH_UNTRUSTED MeshAuth = 3
+)
+
+// Enum value maps for MeshAuth.
+var (
+	MeshAuth_name = map[int32]string{
+		0: "MESH_AUTH_UNKNOWN",
+		1: "MESH_AUTH_NEW",
+		2: "MESH_AUTH_TRUSTED",
+		3: "MESH_AUTH_UNTRUSTED",
+	}
+	MeshAuth_value = map[string]int32{
+		"MESH_AUTH_UNKNOWN":   0,
+		"MESH_AUTH_NEW":       1,
+		"MESH_AUTH_TRUSTED":   2,
+		"MESH_AUTH_UNTRUSTED": 3,
+	}
+)
+
+func (x MeshAuth) Enum() *MeshAuth {
+	p := new(MeshAuth)
+	*p = x
+	return p
+}
+
+func (x MeshAuth) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MeshAuth) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[0].Descriptor()
+}
+
+func (MeshAuth) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[0]
+}
+
+func (x MeshAuth) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MeshAuth.Descriptor instead.
+func (MeshAuth) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{0}
+}
+
+type WifiConfig_Security int32
+
+const (
+	WifiConfig_UNKNOWN  WifiConfig_Security = 0
+	WifiConfig_WPA2     WifiConfig_Security = 1
+	WifiConfig_WPA3     WifiConfig_Security = 2
+	WifiConfig_WPA2WPA3 WifiConfig_Security = 3
+)
+
+// Enum value maps for WifiConfig_Security.
+var (
+	WifiConfig_Security_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "WPA2",
+		2: "WPA3",
+		3: "WPA2WPA3",
+	}
+	WifiConfig_Security_value = map[string]int32{
+		"UNKNOWN":  0,
+		"WPA2":     1,
+		"WPA3":     2,
+		"WPA2WPA3": 3,
+	}
+)
+
+func (x WifiConfig_Security) Enum() *WifiConfig_Security {
+	p := new(WifiConfig_Security)
+	*p = x
+	return p
+}
+
+func (x WifiConfig_Security) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiConfig_Security) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[1].Descriptor()
+}
+
+func (WifiConfig_Security) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[1]
+}
+
+func (x WifiConfig_Security) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiConfig_Security.Descriptor instead.
+func (WifiConfig_Security) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 0}
+}
+
+type WifiConfig_Band int32
+
+const (
+	WifiConfig_RF_UNKNOWN WifiConfig_Band = 0
+	WifiConfig_RF_2GHZ    WifiConfig_Band = 2
+	WifiConfig_RF_5GHZ    WifiConfig_Band = 5
+)
+
+// Enum value maps for WifiConfig_Band.
+var (
+	WifiConfig_Band_name = map[int32]string{
+		0: "RF_UNKNOWN",
+		2: "RF_2GHZ",
+		5: "RF_5GHZ",
+	}
+	WifiConfig_Band_value = map[string]int32{
+		"RF_UNKNOWN": 0,
+		"RF_2GHZ":    2,
+		"RF_5GHZ":    5,
+	}
+)
+
+func (x WifiConfig_Band) Enum() *WifiConfig_Band {
+	p := new(WifiConfig_Band)
+	*p = x
+	return p
+}
+
+func (x WifiConfig_Band) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiConfig_Band) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[2].Descriptor()
+}
+
+func (WifiConfig_Band) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[2]
+}
+
+func (x WifiConfig_Band) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiConfig_Band.Descriptor instead.
+func (WifiConfig_Band) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 1}
+}
+
+type WifiConfig_WirelessMode int32
+
+const (
+	WifiConfig_WIRELESS_MODE_DEFAULT WifiConfig_WirelessMode = 0
+	WifiConfig_A_ONLY                WifiConfig_WirelessMode = 1
+	WifiConfig_B_ONLY                WifiConfig_WirelessMode = 2
+	WifiConfig_G_ONLY                WifiConfig_WirelessMode = 3
+	WifiConfig_N_ONLY                WifiConfig_WirelessMode = 4
+	WifiConfig_B_G_MIXED             WifiConfig_WirelessMode = 5
+	WifiConfig_A_N_MIXED             WifiConfig_WirelessMode = 6
+	WifiConfig_G_N_MIXED             WifiConfig_WirelessMode = 7
+	WifiConfig_B_G_N_MIXED           WifiConfig_WirelessMode = 8
+	WifiConfig_A_AN_AC_MIXED         WifiConfig_WirelessMode = 9
+	WifiConfig_AN_AC_MIXED           WifiConfig_WirelessMode = 10
+	WifiConfig_B_G_N_AX_MIXED        WifiConfig_WirelessMode = 11
+	WifiConfig_A_AN_AC_AX_MIXED      WifiConfig_WirelessMode = 12
+)
+
+// Enum value maps for WifiConfig_WirelessMode.
+var (
+	WifiConfig_WirelessMode_name = map[int32]string{
+		0:  "WIRELESS_MODE_DEFAULT",
+		1:  "A_ONLY",
+		2:  "B_ONLY",
+		3:  "G_ONLY",
+		4:  "N_ONLY",
+		5:  "B_G_MIXED",
+		6:  "A_N_MIXED",
+		7:  "G_N_MIXED",
+		8:  "B_G_N_MIXED",
+		9:  "A_AN_AC_MIXED",
+		10: "AN_AC_MIXED",
+		11: "B_G_N_AX_MIXED",
+		12: "A_AN_AC_AX_MIXED",
+	}
+	WifiConfig_WirelessMode_value = map[string]int32{
+		"WIRELESS_MODE_DEFAULT": 0,
+		"A_ONLY":                1,
+		"B_ONLY":                2,
+		"G_ONLY":                3,
+		"N_ONLY":                4,
+		"B_G_MIXED":             5,
+		"A_N_MIXED":             6,
+		"G_N_MIXED":             7,
+		"B_G_N_MIXED":           8,
+		"A_AN_AC_MIXED":         9,
+		"AN_AC_MIXED":           10,
+		"B_G_N_AX_MIXED":        11,
+		"A_AN_AC_AX_MIXED":      12,
+	}
+)
+
+func (x WifiConfig_WirelessMode) Enum() *WifiConfig_WirelessMode {
+	p := new(WifiConfig_WirelessMode)
+	*p = x
+	return p
+}
+
+func (x WifiConfig_WirelessMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiConfig_WirelessMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[3].Descriptor()
+}
+
+func (WifiConfig_WirelessMode) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[3]
+}
+
+func (x WifiConfig_WirelessMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiConfig_WirelessMode.Descriptor instead.
+func (WifiConfig_WirelessMode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 2}
+}
+
+type WifiConfig_HTBandwidth int32
+
+const (
+	WifiConfig_HT_BANDWIDTH_DEFAULT      WifiConfig_HTBandwidth = 0
+	WifiConfig_HT_BANDWIDTH_20_MHZ       WifiConfig_HTBandwidth = 1
+	WifiConfig_HT_BANDWIDTH_20_OR_40_MHZ WifiConfig_HTBandwidth = 2
+)
+
+// Enum value maps for WifiConfig_HTBandwidth.
+var (
+	WifiConfig_HTBandwidth_name = map[int32]string{
+		0: "HT_BANDWIDTH_DEFAULT",
+		1: "HT_BANDWIDTH_20_MHZ",
+		2: "HT_BANDWIDTH_20_OR_40_MHZ",
+	}
+	WifiConfig_HTBandwidth_value = map[string]int32{
+		"HT_BANDWIDTH_DEFAULT":      0,
+		"HT_BANDWIDTH_20_MHZ":       1,
+		"HT_BANDWIDTH_20_OR_40_MHZ": 2,
+	}
+)
+
+func (x WifiConfig_HTBandwidth) Enum() *WifiConfig_HTBandwidth {
+	p := new(WifiConfig_HTBandwidth)
+	*p = x
+	return p
+}
+
+func (x WifiConfig_HTBandwidth) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiConfig_HTBandwidth) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[4].Descriptor()
+}
+
+func (WifiConfig_HTBandwidth) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[4]
+}
+
+func (x WifiConfig_HTBandwidth) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiConfig_HTBandwidth.Descriptor instead.
+func (WifiConfig_HTBandwidth) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 3}
+}
+
+type WifiConfig_VHTBandwidth int32
+
+const (
+	WifiConfig_VHT_BANDWIDTH_DEFAULT        WifiConfig_VHTBandwidth = 0
+	WifiConfig_VHT_BANDWIDTH_DISABLED       WifiConfig_VHTBandwidth = 1
+	WifiConfig_VHT_BANDWIDTH_80_MHZ         WifiConfig_VHTBandwidth = 2
+	WifiConfig_VHT_BANDWIDTH_160_MHZ        WifiConfig_VHTBandwidth = 3
+	WifiConfig_VHT_BANDWIDTH_80_PLUS_80_MHZ WifiConfig_VHTBandwidth = 4
+)
+
+// Enum value maps for WifiConfig_VHTBandwidth.
+var (
+	WifiConfig_VHTBandwidth_name = map[int32]string{
+		0: "VHT_BANDWIDTH_DEFAULT",
+		1: "VHT_BANDWIDTH_DISABLED",
+		2: "VHT_BANDWIDTH_80_MHZ",
+		3: "VHT_BANDWIDTH_160_MHZ",
+		4: "VHT_BANDWIDTH_80_PLUS_80_MHZ",
+	}
+	WifiConfig_VHTBandwidth_value = map[string]int32{
+		"VHT_BANDWIDTH_DEFAULT":        0,
+		"VHT_BANDWIDTH_DISABLED":       1,
+		"VHT_BANDWIDTH_80_MHZ":         2,
+		"VHT_BANDWIDTH_160_MHZ":        3,
+		"VHT_BANDWIDTH_80_PLUS_80_MHZ": 4,
+	}
+)
+
+func (x WifiConfig_VHTBandwidth) Enum() *WifiConfig_VHTBandwidth {
+	p := new(WifiConfig_VHTBandwidth)
+	*p = x
+	return p
+}
+
+func (x WifiConfig_VHTBandwidth) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (WifiConfig_VHTBandwidth) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_device_wifi_config_proto_enumTypes[5].Descriptor()
+}
+
+func (WifiConfig_VHTBandwidth) Type() protoreflect.EnumType {
+	return &file_spacex_api_device_wifi_config_proto_enumTypes[5]
+}
+
+func (x WifiConfig_VHTBandwidth) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use WifiConfig_VHTBandwidth.Descriptor instead.
+func (WifiConfig_VHTBandwidth) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 4}
+}
+
+type MeshConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	DisplayName      string   `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	ApplyDisplayName bool     `protobuf:"varint,2,opt,name=apply_display_name,json=applyDisplayName,proto3" json:"apply_display_name,omitempty"`
+	Auth             MeshAuth `protobuf:"varint,3,opt,name=auth,proto3,enum=SpaceX.API.Device.MeshAuth" json:"auth,omitempty"`
+	ApplyAuth        bool     `protobuf:"varint,4,opt,name=apply_auth,json=applyAuth,proto3" json:"apply_auth,omitempty"`
+	LastConnected    int64    `protobuf:"varint,5,opt,name=last_connected,json=lastConnected,proto3" json:"last_connected,omitempty"`
+	Incarnation      uint64   `protobuf:"varint,7,opt,name=incarnation,proto3" json:"incarnation,omitempty"`
+}
+
+func (x *MeshConfig) Reset() {
+	*x = MeshConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MeshConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeshConfig) ProtoMessage() {}
+
+func (x *MeshConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MeshConfig.ProtoReflect.Descriptor instead.
+func (*MeshConfig) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *MeshConfig) GetDisplayName() string {
+	if x != nil {
+		return x.DisplayName
+	}
+	return ""
+}
+
+func (x *MeshConfig) GetApplyDisplayName() bool {
+	if x != nil {
+		return x.ApplyDisplayName
+	}
+	return false
+}
+
+func (x *MeshConfig) GetAuth() MeshAuth {
+	if x != nil {
+		return x.Auth
+	}
+	return MeshAuth_MESH_AUTH_UNKNOWN
+}
+
+func (x *MeshConfig) GetApplyAuth() bool {
+	if x != nil {
+		return x.ApplyAuth
+	}
+	return false
+}
+
+func (x *MeshConfig) GetLastConnected() int64 {
+	if x != nil {
+		return x.LastConnected
+	}
+	return 0
+}
+
+func (x *MeshConfig) GetIncarnation() uint64 {
+	if x != nil {
+		return x.Incarnation
+	}
+	return 0
+}
+
 type WifiConfig struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	NetworkName          string `protobuf:"bytes,1,opt,name=network_name,json=networkName,proto3" json:"network_name,omitempty"`
-	ApplyNetworkName     bool   `protobuf:"varint,1001,opt,name=apply_network_name,json=applyNetworkName,proto3" json:"apply_network_name,omitempty"`
-	NetworkPassword      string `protobuf:"bytes,2,opt,name=network_password,json=networkPassword,proto3" json:"network_password,omitempty"`
-	ApplyNetworkPassword bool   `protobuf:"varint,1002,opt,name=apply_network_password,json=applyNetworkPassword,proto3" json:"apply_network_password,omitempty"`
-	CountryCode          string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
-	WifiDisabled         bool   `protobuf:"varint,4,opt,name=wifi_disabled,json=wifiDisabled,proto3" json:"wifi_disabled,omitempty"`
-	ApplyWifiDisabled    bool   `protobuf:"varint,1003,opt,name=apply_wifi_disabled,json=applyWifiDisabled,proto3" json:"apply_wifi_disabled,omitempty"`
-	LanIpv4              string `protobuf:"bytes,5,opt,name=lan_ipv4,json=lanIpv4,proto3" json:"lan_ipv4,omitempty"`
-	LanIpv4SubnetMask    string `protobuf:"bytes,6,opt,name=lan_ipv4_subnet_mask,json=lanIpv4SubnetMask,proto3" json:"lan_ipv4_subnet_mask,omitempty"`
-	SetupComplete        bool   `protobuf:"varint,7,opt,name=setup_complete,json=setupComplete,proto3" json:"setup_complete,omitempty"`
+	CountryCode        string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	PinCountryCode     bool   `protobuf:"varint,53,opt,name=pin_country_code,json=pinCountryCode,proto3" json:"pin_country_code,omitempty"`
+	CustomPowerTable   bool   `protobuf:"varint,54,opt,name=custom_power_table,json=customPowerTable,proto3" json:"custom_power_table,omitempty"`
+	SetupComplete      bool   `protobuf:"varint,7,opt,name=setup_complete,json=setupComplete,proto3" json:"setup_complete,omitempty"`
+	ApplySetupComplete bool   `protobuf:"varint,1010,opt,name=apply_setup_complete,json=applySetupComplete,proto3" json:"apply_setup_complete,omitempty"`
+	Version            uint32 `protobuf:"varint,9,opt,name=version,proto3" json:"version,omitempty"`
+	// Deprecated: Do not use.
+	MacWan string `protobuf:"bytes,12,opt,name=mac_wan,json=macWan,proto3" json:"mac_wan,omitempty"`
+	// Deprecated: Do not use.
+	MacLan                     string                 `protobuf:"bytes,13,opt,name=mac_lan,json=macLan,proto3" json:"mac_lan,omitempty"`
+	Channel_2Ghz               uint32                 `protobuf:"varint,19,opt,name=channel_2ghz,json=channel2ghz,proto3" json:"channel_2ghz,omitempty"`
+	ApplyChannel_2Ghz          bool                   `protobuf:"varint,1013,opt,name=apply_channel_2ghz,json=applyChannel2ghz,proto3" json:"apply_channel_2ghz,omitempty"`
+	Channel_5Ghz               uint32                 `protobuf:"varint,20,opt,name=channel_5ghz,json=channel5ghz,proto3" json:"channel_5ghz,omitempty"`
+	ApplyChannel_5Ghz          bool                   `protobuf:"varint,1014,opt,name=apply_channel_5ghz,json=applyChannel5ghz,proto3" json:"apply_channel_5ghz,omitempty"`
+	MeshConfigs                map[string]*MeshConfig `protobuf:"bytes,33,rep,name=mesh_configs,json=meshConfigs,proto3" json:"mesh_configs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	MeshConfigsUpdates         map[string]*MeshConfig `protobuf:"bytes,3033,rep,name=mesh_configs_updates,json=meshConfigsUpdates,proto3" json:"mesh_configs_updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	ApplyMeshConfigs           bool                   `protobuf:"varint,1033,opt,name=apply_mesh_configs,json=applyMeshConfigs,proto3" json:"apply_mesh_configs,omitempty"`
+	DynamicKeys                []*PublicKey           `protobuf:"bytes,22,rep,name=dynamic_keys,json=dynamicKeys,proto3" json:"dynamic_keys,omitempty"`
+	ApplyDynamicKeys           bool                   `protobuf:"varint,39,opt,name=apply_dynamic_keys,json=applyDynamicKeys,proto3" json:"apply_dynamic_keys,omitempty"`
+	IsRepeater                 bool                   `protobuf:"varint,23,opt,name=is_repeater,json=isRepeater,proto3" json:"is_repeater,omitempty"`
+	ApplyIsRepeater            bool                   `protobuf:"varint,1031,opt,name=apply_is_repeater,json=applyIsRepeater,proto3" json:"apply_is_repeater,omitempty"`
+	ApMode                     bool                   `protobuf:"varint,51,opt,name=ap_mode,json=apMode,proto3" json:"ap_mode,omitempty"`
+	ApplyApMode                bool                   `protobuf:"varint,1066,opt,name=apply_ap_mode,json=applyApMode,proto3" json:"apply_ap_mode,omitempty"`
+	IsAviation                 bool                   `protobuf:"varint,49,opt,name=is_aviation,json=isAviation,proto3" json:"is_aviation,omitempty"`
+	ApplyIsAviation            bool                   `protobuf:"varint,1064,opt,name=apply_is_aviation,json=applyIsAviation,proto3" json:"apply_is_aviation,omitempty"`
+	BootCount                  int32                  `protobuf:"varint,26,opt,name=boot_count,json=bootCount,proto3" json:"boot_count,omitempty"`
+	Boot                       *BootInfo              `protobuf:"bytes,3001,opt,name=boot,proto3" json:"boot,omitempty"`
+	Nameservers                []string               `protobuf:"bytes,30,rep,name=nameservers,proto3" json:"nameservers,omitempty"`
+	ApplyNameservers           bool                   `protobuf:"varint,1054,opt,name=apply_nameservers,json=applyNameservers,proto3" json:"apply_nameservers,omitempty"`
+	SecureDns                  bool                   `protobuf:"varint,50,opt,name=secure_dns,json=secureDns,proto3" json:"secure_dns,omitempty"`
+	ApplySecureDns             bool                   `protobuf:"varint,1065,opt,name=apply_secure_dns,json=applySecureDns,proto3" json:"apply_secure_dns,omitempty"`
+	BypassMode                 bool                   `protobuf:"varint,31,opt,name=bypass_mode,json=bypassMode,proto3" json:"bypass_mode,omitempty"`
+	ApplyBypassMode            bool                   `protobuf:"varint,1055,opt,name=apply_bypass_mode,json=applyBypassMode,proto3" json:"apply_bypass_mode,omitempty"`
+	DfsEnabled                 bool                   `protobuf:"varint,42,opt,name=dfs_enabled,json=dfsEnabled,proto3" json:"dfs_enabled,omitempty"`
+	ApplyDfsEnabled            bool                   `protobuf:"varint,1058,opt,name=apply_dfs_enabled,json=applyDfsEnabled,proto3" json:"apply_dfs_enabled,omitempty"`
+	DisableMeshOnboarding      bool                   `protobuf:"varint,52,opt,name=disable_mesh_onboarding,json=disableMeshOnboarding,proto3" json:"disable_mesh_onboarding,omitempty"`
+	ApplyDisableMeshOnboarding bool                   `protobuf:"varint,1067,opt,name=apply_disable_mesh_onboarding,json=applyDisableMeshOnboarding,proto3" json:"apply_disable_mesh_onboarding,omitempty"`
+	Networks                   []*WifiConfig_Network  `protobuf:"bytes,1100,rep,name=networks,proto3" json:"networks,omitempty"`
+	ApplyNetworks              bool                   `protobuf:"varint,1101,opt,name=apply_networks,json=applyNetworks,proto3" json:"apply_networks,omitempty"`
+	// Deprecated: Do not use.
+	NetworkName string `protobuf:"bytes,1,opt,name=network_name,json=networkName,proto3" json:"network_name,omitempty"`
+	// Deprecated: Do not use.
+	ApplyNetworkName bool `protobuf:"varint,1001,opt,name=apply_network_name,json=applyNetworkName,proto3" json:"apply_network_name,omitempty"`
+	// Deprecated: Do not use.
+	NetworkPassword string `protobuf:"bytes,2,opt,name=network_password,json=networkPassword,proto3" json:"network_password,omitempty"`
+	// Deprecated: Do not use.
+	ApplyNetworkPassword bool `protobuf:"varint,1002,opt,name=apply_network_password,json=applyNetworkPassword,proto3" json:"apply_network_password,omitempty"`
+	// Deprecated: Do not use.
+	LanIpv4 string `protobuf:"bytes,5,opt,name=lan_ipv4,json=lanIpv4,proto3" json:"lan_ipv4,omitempty"`
+	// Deprecated: Do not use.
+	ApplyLanIpv4 bool `protobuf:"varint,37,opt,name=apply_lan_ipv4,json=applyLanIpv4,proto3" json:"apply_lan_ipv4,omitempty"`
+	// Deprecated: Do not use.
+	WifiSecurity WifiConfig_Security `protobuf:"varint,10,opt,name=wifi_security,json=wifiSecurity,proto3,enum=SpaceX.API.Device.WifiConfig_Security" json:"wifi_security,omitempty"`
+	// Deprecated: Do not use.
+	ApplyWifiSecurity bool `protobuf:"varint,1004,opt,name=apply_wifi_security,json=applyWifiSecurity,proto3" json:"apply_wifi_security,omitempty"`
+	// Deprecated: Do not use.
+	NetworkName_5Ghz string `protobuf:"bytes,11,opt,name=network_name_5ghz,json=networkName5ghz,proto3" json:"network_name_5ghz,omitempty"`
+	// Deprecated: Do not use.
+	ApplyNetworkName_5Ghz           bool                    `protobuf:"varint,1005,opt,name=apply_network_name_5ghz,json=applyNetworkName5ghz,proto3" json:"apply_network_name_5ghz,omitempty"`
+	EnableRemoteSsh                 bool                    `protobuf:"varint,34,opt,name=enable_remote_ssh,json=enableRemoteSsh,proto3" json:"enable_remote_ssh,omitempty"`
+	ApplyEnableRemoteSsh            bool                    `protobuf:"varint,1057,opt,name=apply_enable_remote_ssh,json=applyEnableRemoteSsh,proto3" json:"apply_enable_remote_ssh,omitempty"`
+	LastRemoteSshAccess             int64                   `protobuf:"varint,35,opt,name=last_remote_ssh_access,json=lastRemoteSshAccess,proto3" json:"last_remote_ssh_access,omitempty"`
+	Incarnation                     uint64                  `protobuf:"varint,43,opt,name=incarnation,proto3" json:"incarnation,omitempty"`
+	WirelessMode_2Ghz               WifiConfig_WirelessMode `protobuf:"varint,44,opt,name=wireless_mode_2ghz,json=wirelessMode2ghz,proto3,enum=SpaceX.API.Device.WifiConfig_WirelessMode" json:"wireless_mode_2ghz,omitempty"`
+	ApplyWirelessMode_2Ghz          bool                    `protobuf:"varint,1059,opt,name=apply_wireless_mode_2ghz,json=applyWirelessMode2ghz,proto3" json:"apply_wireless_mode_2ghz,omitempty"`
+	WirelessMode_5Ghz               WifiConfig_WirelessMode `protobuf:"varint,45,opt,name=wireless_mode_5ghz,json=wirelessMode5ghz,proto3,enum=SpaceX.API.Device.WifiConfig_WirelessMode" json:"wireless_mode_5ghz,omitempty"`
+	ApplyWirelessMode_5Ghz          bool                    `protobuf:"varint,1060,opt,name=apply_wireless_mode_5ghz,json=applyWirelessMode5ghz,proto3" json:"apply_wireless_mode_5ghz,omitempty"`
+	HtBandwidth_2Ghz                WifiConfig_HTBandwidth  `protobuf:"varint,46,opt,name=ht_bandwidth_2ghz,json=htBandwidth2ghz,proto3,enum=SpaceX.API.Device.WifiConfig_HTBandwidth" json:"ht_bandwidth_2ghz,omitempty"`
+	ApplyHtBandwidth_2Ghz           bool                    `protobuf:"varint,1061,opt,name=apply_ht_bandwidth_2ghz,json=applyHtBandwidth2ghz,proto3" json:"apply_ht_bandwidth_2ghz,omitempty"`
+	HtBandwidth_5Ghz                WifiConfig_HTBandwidth  `protobuf:"varint,47,opt,name=ht_bandwidth_5ghz,json=htBandwidth5ghz,proto3,enum=SpaceX.API.Device.WifiConfig_HTBandwidth" json:"ht_bandwidth_5ghz,omitempty"`
+	ApplyHtBandwidth_5Ghz           bool                    `protobuf:"varint,1062,opt,name=apply_ht_bandwidth_5ghz,json=applyHtBandwidth5ghz,proto3" json:"apply_ht_bandwidth_5ghz,omitempty"`
+	VhtBandwidth                    WifiConfig_VHTBandwidth `protobuf:"varint,48,opt,name=vht_bandwidth,json=vhtBandwidth,proto3,enum=SpaceX.API.Device.WifiConfig_VHTBandwidth" json:"vht_bandwidth,omitempty"`
+	ApplyVhtBandwidth               bool                    `protobuf:"varint,1063,opt,name=apply_vht_bandwidth,json=applyVhtBandwidth,proto3" json:"apply_vht_bandwidth,omitempty"`
+	UsePublicServices               bool                    `protobuf:"varint,55,opt,name=use_public_services,json=usePublicServices,proto3" json:"use_public_services,omitempty"`
+	ApplyUsePublicServices          bool                    `protobuf:"varint,1068,opt,name=apply_use_public_services,json=applyUsePublicServices,proto3" json:"apply_use_public_services,omitempty"`
+	DisableAutomatedSpeedtests      bool                    `protobuf:"varint,56,opt,name=disable_automated_speedtests,json=disableAutomatedSpeedtests,proto3" json:"disable_automated_speedtests,omitempty"`
+	ApplyDisableAutomatedSpeedtests bool                    `protobuf:"varint,1069,opt,name=apply_disable_automated_speedtests,json=applyDisableAutomatedSpeedtests,proto3" json:"apply_disable_automated_speedtests,omitempty"`
 }
 
 func (x *WifiConfig) Reset() {
 	*x = WifiConfig{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[0]
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -53,7 +543,7 @@ func (x *WifiConfig) String() string {
 func (*WifiConfig) ProtoMessage() {}
 
 func (x *WifiConfig) ProtoReflect() protoreflect.Message {
-	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[0]
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -66,115 +556,1361 @@ func (x *WifiConfig) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use WifiConfig.ProtoReflect.Descriptor instead.
 func (*WifiConfig) Descriptor() ([]byte, []int) {
-	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{0}
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1}
 }
 
-func (x *WifiConfig) GetNetworkName() string {
-	if x != nil {
-		return x.NetworkName
+func (x *WifiConfig) GetCountryCode() string {
+	if x != nil {
+		return x.CountryCode
 	}
 	return ""
 }
 
-func (x *WifiConfig) GetApplyNetworkName() bool {
+func (x *WifiConfig) GetPinCountryCode() bool {
 	if x != nil {
-		return x.ApplyNetworkName
+		return x.PinCountryCode
 	}
 	return false
 }
 
-func (x *WifiConfig) GetNetworkPassword() string {
+func (x *WifiConfig) GetCustomPowerTable() bool {
 	if x != nil {
-		return x.NetworkPassword
+		return x.CustomPowerTable
 	}
-	return ""
+	return false
 }
 
-func (x *WifiConfig) GetApplyNetworkPassword() bool {
+func (x *WifiConfig) GetSetupComplete() bool {
 	if x != nil {
-		return x.ApplyNetworkPassword
+		return x.SetupComplete
 	}
 	return false
 }
 
-func (x *WifiConfig) GetCountryCode() string {
+func (x *WifiConfig) GetApplySetupComplete() bool {
 	if x != nil {
-		return x.CountryCode
+		return x.ApplySetupComplete
 	}
+	return false
+}
+
+func (x *WifiConfig) GetVersion() uint32 {
+	if x != nil {
+		return x.Version
+	}
+	return 0
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetMacWan() string {
+	if x != nil {
+		return x.MacWan
+	}
 	return ""
 }
 
-func (x *WifiConfig) GetWifiDisabled() bool {
+// Deprecated: Do not use.
+func (x *WifiConfig) GetMacLan() string {
 	if x != nil {
-		return x.WifiDisabled
+		return x.MacLan
 	}
+	return ""
+}
+
+func (x *WifiConfig) GetChannel_2Ghz() uint32 {
+	if x != nil {
+		return x.Channel_2Ghz
+	}
+	return 0
+}
+
+func (x *WifiConfig) GetApplyChannel_2Ghz() bool {
+	if x != nil {
+		return x.ApplyChannel_2Ghz
+	}
 	return false
 }
 
-func (x *WifiConfig) GetApplyWifiDisabled() bool {
+func (x *WifiConfig) GetChannel_5Ghz() uint32 {
 	if x != nil {
-		return x.ApplyWifiDisabled
+		return x.Channel_5Ghz
 	}
+	return 0
+}
+
+func (x *WifiConfig) GetApplyChannel_5Ghz() bool {
+	if x != nil {
+		return x.ApplyChannel_5Ghz
+	}
 	return false
 }
 
-func (x *WifiConfig) GetLanIpv4() string {
+func (x *WifiConfig) GetMeshConfigs() map[string]*MeshConfig {
 	if x != nil {
-		return x.LanIpv4
+		return x.MeshConfigs
 	}
-	return ""
+	return nil
 }
 
-func (x *WifiConfig) GetLanIpv4SubnetMask() string {
+func (x *WifiConfig) GetMeshConfigsUpdates() map[string]*MeshConfig {
 	if x != nil {
-		return x.LanIpv4SubnetMask
+		return x.MeshConfigsUpdates
 	}
+	return nil
+}
+
+func (x *WifiConfig) GetApplyMeshConfigs() bool {
+	if x != nil {
+		return x.ApplyMeshConfigs
+	}
+	return false
+}
+
+func (x *WifiConfig) GetDynamicKeys() []*PublicKey {
+	if x != nil {
+		return x.DynamicKeys
+	}
+	return nil
+}
+
+func (x *WifiConfig) GetApplyDynamicKeys() bool {
+	if x != nil {
+		return x.ApplyDynamicKeys
+	}
+	return false
+}
+
+func (x *WifiConfig) GetIsRepeater() bool {
+	if x != nil {
+		return x.IsRepeater
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyIsRepeater() bool {
+	if x != nil {
+		return x.ApplyIsRepeater
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApMode() bool {
+	if x != nil {
+		return x.ApMode
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyApMode() bool {
+	if x != nil {
+		return x.ApplyApMode
+	}
+	return false
+}
+
+func (x *WifiConfig) GetIsAviation() bool {
+	if x != nil {
+		return x.IsAviation
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyIsAviation() bool {
+	if x != nil {
+		return x.ApplyIsAviation
+	}
+	return false
+}
+
+func (x *WifiConfig) GetBootCount() int32 {
+	if x != nil {
+		return x.BootCount
+	}
+	return 0
+}
+
+func (x *WifiConfig) GetBoot() *BootInfo {
+	if x != nil {
+		return x.Boot
+	}
+	return nil
+}
+
+func (x *WifiConfig) GetNameservers() []string {
+	if x != nil {
+		return x.Nameservers
+	}
+	return nil
+}
+
+func (x *WifiConfig) GetApplyNameservers() bool {
+	if x != nil {
+		return x.ApplyNameservers
+	}
+	return false
+}
+
+func (x *WifiConfig) GetSecureDns() bool {
+	if x != nil {
+		return x.SecureDns
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplySecureDns() bool {
+	if x != nil {
+		return x.ApplySecureDns
+	}
+	return false
+}
+
+func (x *WifiConfig) GetBypassMode() bool {
+	if x != nil {
+		return x.BypassMode
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyBypassMode() bool {
+	if x != nil {
+		return x.ApplyBypassMode
+	}
+	return false
+}
+
+func (x *WifiConfig) GetDfsEnabled() bool {
+	if x != nil {
+		return x.DfsEnabled
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyDfsEnabled() bool {
+	if x != nil {
+		return x.ApplyDfsEnabled
+	}
+	return false
+}
+
+func (x *WifiConfig) GetDisableMeshOnboarding() bool {
+	if x != nil {
+		return x.DisableMeshOnboarding
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyDisableMeshOnboarding() bool {
+	if x != nil {
+		return x.ApplyDisableMeshOnboarding
+	}
+	return false
+}
+
+func (x *WifiConfig) GetNetworks() []*WifiConfig_Network {
+	if x != nil {
+		return x.Networks
+	}
+	return nil
+}
+
+func (x *WifiConfig) GetApplyNetworks() bool {
+	if x != nil {
+		return x.ApplyNetworks
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetNetworkName() string {
+	if x != nil {
+		return x.NetworkName
+	}
 	return ""
 }
 
-func (x *WifiConfig) GetSetupComplete() bool {
+// Deprecated: Do not use.
+func (x *WifiConfig) GetApplyNetworkName() bool {
 	if x != nil {
-		return x.SetupComplete
+		return x.ApplyNetworkName
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetNetworkPassword() string {
+	if x != nil {
+		return x.NetworkPassword
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetApplyNetworkPassword() bool {
+	if x != nil {
+		return x.ApplyNetworkPassword
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetLanIpv4() string {
+	if x != nil {
+		return x.LanIpv4
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetApplyLanIpv4() bool {
+	if x != nil {
+		return x.ApplyLanIpv4
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetWifiSecurity() WifiConfig_Security {
+	if x != nil {
+		return x.WifiSecurity
+	}
+	return WifiConfig_UNKNOWN
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetApplyWifiSecurity() bool {
+	if x != nil {
+		return x.ApplyWifiSecurity
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetNetworkName_5Ghz() string {
+	if x != nil {
+		return x.NetworkName_5Ghz
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (x *WifiConfig) GetApplyNetworkName_5Ghz() bool {
+	if x != nil {
+		return x.ApplyNetworkName_5Ghz
+	}
+	return false
+}
+
+func (x *WifiConfig) GetEnableRemoteSsh() bool {
+	if x != nil {
+		return x.EnableRemoteSsh
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyEnableRemoteSsh() bool {
+	if x != nil {
+		return x.ApplyEnableRemoteSsh
+	}
+	return false
+}
+
+func (x *WifiConfig) GetLastRemoteSshAccess() int64 {
+	if x != nil {
+		return x.LastRemoteSshAccess
+	}
+	return 0
+}
+
+func (x *WifiConfig) GetIncarnation() uint64 {
+	if x != nil {
+		return x.Incarnation
+	}
+	return 0
+}
+
+func (x *WifiConfig) GetWirelessMode_2Ghz() WifiConfig_WirelessMode {
+	if x != nil {
+		return x.WirelessMode_2Ghz
+	}
+	return WifiConfig_WIRELESS_MODE_DEFAULT
+}
+
+func (x *WifiConfig) GetApplyWirelessMode_2Ghz() bool {
+	if x != nil {
+		return x.ApplyWirelessMode_2Ghz
+	}
+	return false
+}
+
+func (x *WifiConfig) GetWirelessMode_5Ghz() WifiConfig_WirelessMode {
+	if x != nil {
+		return x.WirelessMode_5Ghz
+	}
+	return WifiConfig_WIRELESS_MODE_DEFAULT
+}
+
+func (x *WifiConfig) GetApplyWirelessMode_5Ghz() bool {
+	if x != nil {
+		return x.ApplyWirelessMode_5Ghz
+	}
+	return false
+}
+
+func (x *WifiConfig) GetHtBandwidth_2Ghz() WifiConfig_HTBandwidth {
+	if x != nil {
+		return x.HtBandwidth_2Ghz
+	}
+	return WifiConfig_HT_BANDWIDTH_DEFAULT
+}
+
+func (x *WifiConfig) GetApplyHtBandwidth_2Ghz() bool {
+	if x != nil {
+		return x.ApplyHtBandwidth_2Ghz
+	}
+	return false
+}
+
+func (x *WifiConfig) GetHtBandwidth_5Ghz() WifiConfig_HTBandwidth {
+	if x != nil {
+		return x.HtBandwidth_5Ghz
+	}
+	return WifiConfig_HT_BANDWIDTH_DEFAULT
+}
+
+func (x *WifiConfig) GetApplyHtBandwidth_5Ghz() bool {
+	if x != nil {
+		return x.ApplyHtBandwidth_5Ghz
+	}
+	return false
+}
+
+func (x *WifiConfig) GetVhtBandwidth() WifiConfig_VHTBandwidth {
+	if x != nil {
+		return x.VhtBandwidth
+	}
+	return WifiConfig_VHT_BANDWIDTH_DEFAULT
+}
+
+func (x *WifiConfig) GetApplyVhtBandwidth() bool {
+	if x != nil {
+		return x.ApplyVhtBandwidth
+	}
+	return false
+}
+
+func (x *WifiConfig) GetUsePublicServices() bool {
+	if x != nil {
+		return x.UsePublicServices
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyUsePublicServices() bool {
+	if x != nil {
+		return x.ApplyUsePublicServices
+	}
+	return false
+}
+
+func (x *WifiConfig) GetDisableAutomatedSpeedtests() bool {
+	if x != nil {
+		return x.DisableAutomatedSpeedtests
+	}
+	return false
+}
+
+func (x *WifiConfig) GetApplyDisableAutomatedSpeedtests() bool {
+	if x != nil {
+		return x.ApplyDisableAutomatedSpeedtests
+	}
+	return false
+}
+
+type AuthOpen struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *AuthOpen) Reset() {
+	*x = AuthOpen{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AuthOpen) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthOpen) ProtoMessage() {}
+
+func (x *AuthOpen) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthOpen.ProtoReflect.Descriptor instead.
+func (*AuthOpen) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{2}
+}
+
+type AuthWpa2 struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"`
+}
+
+func (x *AuthWpa2) Reset() {
+	*x = AuthWpa2{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AuthWpa2) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthWpa2) ProtoMessage() {}
+
+func (x *AuthWpa2) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthWpa2.ProtoReflect.Descriptor instead.
+func (*AuthWpa2) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *AuthWpa2) GetPassword() string {
+	if x != nil {
+		return x.Password
+	}
+	return ""
+}
+
+type AuthWpa3 struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"`
+}
+
+func (x *AuthWpa3) Reset() {
+	*x = AuthWpa3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AuthWpa3) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthWpa3) ProtoMessage() {}
+
+func (x *AuthWpa3) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthWpa3.ProtoReflect.Descriptor instead.
+func (*AuthWpa3) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *AuthWpa3) GetPassword() string {
+	if x != nil {
+		return x.Password
+	}
+	return ""
+}
+
+type AuthWpa2Wpa3 struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"`
+}
+
+func (x *AuthWpa2Wpa3) Reset() {
+	*x = AuthWpa2Wpa3{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AuthWpa2Wpa3) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthWpa2Wpa3) ProtoMessage() {}
+
+func (x *AuthWpa2Wpa3) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthWpa2Wpa3.ProtoReflect.Descriptor instead.
+func (*AuthWpa2Wpa3) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *AuthWpa2Wpa3) GetPassword() string {
+	if x != nil {
+		return x.Password
+	}
+	return ""
+}
+
+type AuthRadius struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
+	// Deprecated: Do not use.
+	ServerCa        string `protobuf:"bytes,3,opt,name=server_ca,json=serverCa,proto3" json:"server_ca,omitempty"`
+	ServerCaBase_64 string `protobuf:"bytes,4,opt,name=server_ca_base_64,json=serverCaBase64,proto3" json:"server_ca_base_64,omitempty"`
+	Password        string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
+}
+
+func (x *AuthRadius) Reset() {
+	*x = AuthRadius{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AuthRadius) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AuthRadius) ProtoMessage() {}
+
+func (x *AuthRadius) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AuthRadius.ProtoReflect.Descriptor instead.
+func (*AuthRadius) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *AuthRadius) GetServer() string {
+	if x != nil {
+		return x.Server
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (x *AuthRadius) GetServerCa() string {
+	if x != nil {
+		return x.ServerCa
+	}
+	return ""
+}
+
+func (x *AuthRadius) GetServerCaBase_64() string {
+	if x != nil {
+		return x.ServerCaBase_64
+	}
+	return ""
+}
+
+func (x *AuthRadius) GetPassword() string {
+	if x != nil {
+		return x.Password
+	}
+	return ""
+}
+
+type WifiConfig_BasicServiceSet struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Bssid string `protobuf:"bytes,1003,opt,name=bssid,proto3" json:"bssid,omitempty"`
+	Ssid  string `protobuf:"bytes,1005,opt,name=ssid,proto3" json:"ssid,omitempty"`
+	// Types that are assignable to Auth:
+	//
+	//	*WifiConfig_BasicServiceSet_AuthOpen
+	//	*WifiConfig_BasicServiceSet_AuthWpa2
+	//	*WifiConfig_BasicServiceSet_AuthWpa3
+	//	*WifiConfig_BasicServiceSet_AuthWpa2Wpa3
+	//	*WifiConfig_BasicServiceSet_AuthRadius
+	Auth    isWifiConfig_BasicServiceSet_Auth `protobuf_oneof:"auth"`
+	Band    WifiConfig_Band                   `protobuf:"varint,1011,opt,name=band,proto3,enum=SpaceX.API.Device.WifiConfig_Band" json:"band,omitempty"`
+	Disable bool                              `protobuf:"varint,1013,opt,name=disable,proto3" json:"disable,omitempty"`
+	Hidden  bool                              `protobuf:"varint,1015,opt,name=hidden,proto3" json:"hidden,omitempty"`
+}
+
+func (x *WifiConfig_BasicServiceSet) Reset() {
+	*x = WifiConfig_BasicServiceSet{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiConfig_BasicServiceSet) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiConfig_BasicServiceSet) ProtoMessage() {}
+
+func (x *WifiConfig_BasicServiceSet) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiConfig_BasicServiceSet.ProtoReflect.Descriptor instead.
+func (*WifiConfig_BasicServiceSet) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 2}
+}
+
+func (x *WifiConfig_BasicServiceSet) GetBssid() string {
+	if x != nil {
+		return x.Bssid
+	}
+	return ""
+}
+
+func (x *WifiConfig_BasicServiceSet) GetSsid() string {
+	if x != nil {
+		return x.Ssid
+	}
+	return ""
+}
+
+func (m *WifiConfig_BasicServiceSet) GetAuth() isWifiConfig_BasicServiceSet_Auth {
+	if m != nil {
+		return m.Auth
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetAuthOpen() *AuthOpen {
+	if x, ok := x.GetAuth().(*WifiConfig_BasicServiceSet_AuthOpen); ok {
+		return x.AuthOpen
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetAuthWpa2() *AuthWpa2 {
+	if x, ok := x.GetAuth().(*WifiConfig_BasicServiceSet_AuthWpa2); ok {
+		return x.AuthWpa2
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetAuthWpa3() *AuthWpa3 {
+	if x, ok := x.GetAuth().(*WifiConfig_BasicServiceSet_AuthWpa3); ok {
+		return x.AuthWpa3
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetAuthWpa2Wpa3() *AuthWpa2Wpa3 {
+	if x, ok := x.GetAuth().(*WifiConfig_BasicServiceSet_AuthWpa2Wpa3); ok {
+		return x.AuthWpa2Wpa3
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetAuthRadius() *AuthRadius {
+	if x, ok := x.GetAuth().(*WifiConfig_BasicServiceSet_AuthRadius); ok {
+		return x.AuthRadius
+	}
+	return nil
+}
+
+func (x *WifiConfig_BasicServiceSet) GetBand() WifiConfig_Band {
+	if x != nil {
+		return x.Band
+	}
+	return WifiConfig_RF_UNKNOWN
+}
+
+func (x *WifiConfig_BasicServiceSet) GetDisable() bool {
+	if x != nil {
+		return x.Disable
+	}
 	return false
 }
 
+func (x *WifiConfig_BasicServiceSet) GetHidden() bool {
+	if x != nil {
+		return x.Hidden
+	}
+	return false
+}
+
+type isWifiConfig_BasicServiceSet_Auth interface {
+	isWifiConfig_BasicServiceSet_Auth()
+}
+
+type WifiConfig_BasicServiceSet_AuthOpen struct {
+	AuthOpen *AuthOpen `protobuf:"bytes,2001,opt,name=auth_open,json=authOpen,proto3,oneof"`
+}
+
+type WifiConfig_BasicServiceSet_AuthWpa2 struct {
+	AuthWpa2 *AuthWpa2 `protobuf:"bytes,2002,opt,name=auth_wpa2,json=authWpa2,proto3,oneof"`
+}
+
+type WifiConfig_BasicServiceSet_AuthWpa3 struct {
+	AuthWpa3 *AuthWpa3 `protobuf:"bytes,2003,opt,name=auth_wpa3,json=authWpa3,proto3,oneof"`
+}
+
+type WifiConfig_BasicServiceSet_AuthWpa2Wpa3 struct {
+	AuthWpa2Wpa3 *AuthWpa2Wpa3 `protobuf:"bytes,2004,opt,name=auth_wpa2_wpa3,json=authWpa2Wpa3,proto3,oneof"`
+}
+
+type WifiConfig_BasicServiceSet_AuthRadius struct {
+	AuthRadius *AuthRadius `protobuf:"bytes,2005,opt,name=auth_radius,json=authRadius,proto3,oneof"`
+}
+
+func (*WifiConfig_BasicServiceSet_AuthOpen) isWifiConfig_BasicServiceSet_Auth() {}
+
+func (*WifiConfig_BasicServiceSet_AuthWpa2) isWifiConfig_BasicServiceSet_Auth() {}
+
+func (*WifiConfig_BasicServiceSet_AuthWpa3) isWifiConfig_BasicServiceSet_Auth() {}
+
+func (*WifiConfig_BasicServiceSet_AuthWpa2Wpa3) isWifiConfig_BasicServiceSet_Auth() {}
+
+func (*WifiConfig_BasicServiceSet_AuthRadius) isWifiConfig_BasicServiceSet_Auth() {}
+
+type WifiConfig_Network struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ipv4             string                        `protobuf:"bytes,1003,opt,name=ipv4,proto3" json:"ipv4,omitempty"`
+	Domain           string                        `protobuf:"bytes,1011,opt,name=domain,proto3" json:"domain,omitempty"`
+	BasicServiceSets []*WifiConfig_BasicServiceSet `protobuf:"bytes,1007,rep,name=basic_service_sets,json=basicServiceSets,proto3" json:"basic_service_sets,omitempty"`
+	ClientIsolation  bool                          `protobuf:"varint,1008,opt,name=client_isolation,json=clientIsolation,proto3" json:"client_isolation,omitempty"`
+	Guest            bool                          `protobuf:"varint,1009,opt,name=guest,proto3" json:"guest,omitempty"`
+	Landing          string                        `protobuf:"bytes,1010,opt,name=landing,proto3" json:"landing,omitempty"`
+}
+
+func (x *WifiConfig_Network) Reset() {
+	*x = WifiConfig_Network{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_device_wifi_config_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WifiConfig_Network) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiConfig_Network) ProtoMessage() {}
+
+func (x *WifiConfig_Network) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_device_wifi_config_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiConfig_Network.ProtoReflect.Descriptor instead.
+func (*WifiConfig_Network) Descriptor() ([]byte, []int) {
+	return file_spacex_api_device_wifi_config_proto_rawDescGZIP(), []int{1, 3}
+}
+
+func (x *WifiConfig_Network) GetIpv4() string {
+	if x != nil {
+		return x.Ipv4
+	}
+	return ""
+}
+
+func (x *WifiConfig_Network) GetDomain() string {
+	if x != nil {
+		return x.Domain
+	}
+	return ""
+}
+
+func (x *WifiConfig_Network) GetBasicServiceSets() []*WifiConfig_BasicServiceSet {
+	if x != nil {
+		return x.BasicServiceSets
+	}
+	return nil
+}
+
+func (x *WifiConfig_Network) GetClientIsolation() bool {
+	if x != nil {
+		return x.ClientIsolation
+	}
+	return false
+}
+
+func (x *WifiConfig_Network) GetGuest() bool {
+	if x != nil {
+		return x.Guest
+	}
+	return false
+}
+
+func (x *WifiConfig_Network) GetLanding() string {
+	if x != nil {
+		return x.Landing
+	}
+	return ""
+}
+
 var File_spacex_api_device_wifi_config_proto protoreflect.FileDescriptor
 
 var file_spacex_api_device_wifi_config_proto_rawDesc = []byte{
 	0x0a, 0x23, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
 	0x69, 0x63, 0x65, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
-	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0xac, 0x03, 0x0a, 0x0a, 0x57, 0x69, 0x66,
-	0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x70,
-	0x70, 0x6c, 0x79, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0xea,
-	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x65, 0x74, 0x77,
-	0x6f, 0x72, 0x6b, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23,
-	0x0a, 0x0d, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x44, 0x69, 0x73, 0x61, 0x62,
-	0x6c, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x77, 0x69, 0x66,
-	0x69, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x57, 0x69, 0x66, 0x69, 0x44, 0x69, 0x73, 0x61,
-	0x62, 0x6c, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x70, 0x76, 0x34,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x49, 0x70, 0x76, 0x34, 0x12,
-	0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x73, 0x75, 0x62, 0x6e,
-	0x65, 0x74, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c,
-	0x61, 0x6e, 0x49, 0x70, 0x76, 0x34, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x4d, 0x61, 0x73, 0x6b,
-	0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
-	0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x65, 0x74, 0x75, 0x70, 0x43,
-	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x73, 0x70, 0x61, 0x63, 0x65,
-	0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78,
+	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65,
+	0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x02, 0x0a, 0x0a, 0x4d, 0x65,
+	0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70,
+	0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+	0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x61,
+	0x70, 0x70, 0x6c, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x69,
+	0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x61, 0x75, 0x74,
+	0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68,
+	0x41, 0x75, 0x74, 0x68, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x70,
+	0x70, 0x6c, 0x79, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x73,
+	0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64,
+	0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x61, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x61, 0x72, 0x6e, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x9e,
+	0x29, 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a,
+	0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x28, 0x0a, 0x10, 0x70, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f,
+	0x63, 0x6f, 0x64, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x69, 0x6e, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75,
+	0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65,
+	0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f,
+	0x77, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x75,
+	0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0d, 0x73, 0x65, 0x74, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12,
+	0x31, 0x0a, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x63,
+	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x65, 0x74, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x07,
+	0x6d, 0x61, 0x63, 0x5f, 0x77, 0x61, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18,
+	0x01, 0x52, 0x06, 0x6d, 0x61, 0x63, 0x57, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x07, 0x6d, 0x61, 0x63,
+	0x5f, 0x6c, 0x61, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06,
+	0x6d, 0x61, 0x63, 0x4c, 0x61, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+	0x6c, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68,
+	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18,
+	0xf5, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x68, 0x61,
+	0x6e, 0x6e, 0x65, 0x6c, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e,
+	0x6e, 0x65, 0x6c, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b,
+	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x2d, 0x0a, 0x12, 0x61,
+	0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x43,
+	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x51, 0x0a, 0x0c, 0x6d, 0x65,
+	0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x2e, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
+	0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x0b, 0x6d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x68, 0x0a,
+	0x14, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x5f, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0xd9, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x73, 0x68,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x89, 0x08,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x68, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69,
+	0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x64, 0x79, 0x6e, 0x61,
+	0x6d, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x27, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69,
+	0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f,
+	0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x72, 0x18, 0x87, 0x08, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x33,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x70, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x61, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xaa, 0x08,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x70, 0x4d, 0x6f, 0x64,
+	0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x61, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x73, 0x5f, 0x61,
+	0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xa8, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x73, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1a, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30,
+	0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0xb9, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x74,
+	0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18,
+	0x1e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x9e, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73,
+	0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x6e, 0x73, 0x18, 0x32,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x6e, 0x73, 0x12,
+	0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f,
+	0x64, 0x6e, 0x73, 0x18, 0xa9, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c,
+	0x79, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79,
+	0x70, 0x61, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0a, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61,
+	0x70, 0x70, 0x6c, 0x79, 0x5f, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
+	0x18, 0x9f, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x42, 0x79,
+	0x70, 0x61, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x66, 0x73, 0x5f,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64,
+	0x66, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x5f, 0x64, 0x66, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0xa2,
+	0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x66, 0x73, 0x45,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+	0x65, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e,
+	0x67, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x4d, 0x65, 0x73, 0x68, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x42,
+	0x0a, 0x1d, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f,
+	0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18,
+	0xab, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x69, 0x73,
+	0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69,
+	0x6e, 0x67, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0xcc,
+	0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0d, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x25,
+	0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01,
+	0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x39, 0x0a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+	0x64, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x61, 0x70,
+	0x70, 0x6c, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f,
+	0x72, 0x64, 0x12, 0x1d, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x49, 0x70, 0x76,
+	0x34, 0x12, 0x28, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6c, 0x61, 0x6e, 0x5f, 0x69,
+	0x70, 0x76, 0x34, 0x18, 0x25, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x61,
+	0x70, 0x70, 0x6c, 0x79, 0x4c, 0x61, 0x6e, 0x49, 0x70, 0x76, 0x34, 0x12, 0x4f, 0x0a, 0x0d, 0x77,
+	0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x26, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c,
+	0x77, 0x69, 0x66, 0x69, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x13,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72,
+	0x69, 0x74, 0x79, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11,
+	0x61, 0x70, 0x70, 0x6c, 0x79, 0x57, 0x69, 0x66, 0x69, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,
+	0x79, 0x12, 0x2e, 0x0a, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d,
+	0x65, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01,
+	0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x35, 0x67, 0x68,
+	0x7a, 0x12, 0x3a, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x35, 0x67, 0x68, 0x7a, 0x18, 0xed, 0x07, 0x20,
+	0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x2a, 0x0a,
+	0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73,
+	0x73, 0x68, 0x18, 0x22, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+	0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+	0x5f, 0x73, 0x73, 0x68, 0x18, 0xa1, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73,
+	0x68, 0x12, 0x33, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+	0x5f, 0x73, 0x73, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x73, 0x68,
+	0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x61, 0x72, 0x6e,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, 0x6e, 0x63,
+	0x61, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x12, 0x77, 0x69, 0x72, 0x65,
+	0x6c, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x2c,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65,
+	0x52, 0x10, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x32, 0x67,
+	0x68, 0x7a, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x77, 0x69, 0x72, 0x65,
+	0x6c, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0xa3,
+	0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x57, 0x69, 0x72, 0x65,
+	0x6c, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x58, 0x0a, 0x12,
+	0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x35, 0x67,
+	0x68, 0x7a, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66,
+	0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73,
+	0x4d, 0x6f, 0x64, 0x65, 0x52, 0x10, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x4d, 0x6f,
+	0x64, 0x65, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f,
+	0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x35, 0x67,
+	0x68, 0x7a, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x35, 0x67, 0x68, 0x7a,
+	0x12, 0x55, 0x0a, 0x11, 0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
+	0x5f, 0x32, 0x67, 0x68, 0x7a, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+	0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x54, 0x42, 0x61, 0x6e,
+	0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x0f, 0x68, 0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69,
+	0x64, 0x74, 0x68, 0x32, 0x67, 0x68, 0x7a, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x5f, 0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x32, 0x67,
+	0x68, 0x7a, 0x18, 0xa5, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x79,
+	0x48, 0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x32, 0x67, 0x68, 0x7a, 0x12,
+	0x55, 0x0a, 0x11, 0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f,
+	0x35, 0x67, 0x68, 0x7a, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57,
+	0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x54, 0x42, 0x61, 0x6e, 0x64,
+	0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x0f, 0x68, 0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64,
+	0x74, 0x68, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f,
+	0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x35, 0x67, 0x68,
+	0x7a, 0x18, 0xa6, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x48,
+	0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x35, 0x67, 0x68, 0x7a, 0x12, 0x4f,
+	0x0a, 0x0d, 0x76, 0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18,
+	0x30, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x48, 0x54, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74,
+	0x68, 0x52, 0x0c, 0x76, 0x68, 0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12,
+	0x2f, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x76, 0x68, 0x74, 0x5f, 0x62, 0x61, 0x6e,
+	0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0xa7, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61,
+	0x70, 0x70, 0x6c, 0x79, 0x56, 0x68, 0x74, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
+	0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x73,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75,
+	0x73, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
+	0x12, 0x3a, 0x0a, 0x19, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0xac, 0x08,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x73, 0x65, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x1c,
+	0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x38, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d,
+	0x61, 0x74, 0x65, 0x64, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x4c,
+	0x0a, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f,
+	0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x74,
+	0x65, 0x73, 0x74, 0x73, 0x18, 0xad, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x61, 0x70, 0x70,
+	0x6c, 0x79, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74,
+	0x65, 0x64, 0x53, 0x70, 0x65, 0x65, 0x64, 0x74, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x5d, 0x0a, 0x10,
+	0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+	0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x17, 0x4d,
+	0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58,
+	0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x1a, 0xbe, 0x04, 0x0a, 0x0f, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x53, 0x65, 0x74, 0x12, 0x15, 0x0a, 0x05, 0x62, 0x73, 0x73, 0x69, 0x64, 0x18, 0xeb,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x73, 0x73, 0x69, 0x64, 0x12, 0x13, 0x0a, 0x04,
+	0x73, 0x73, 0x69, 0x64, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x73, 0x69,
+	0x64, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0xd1,
+	0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4f, 0x70,
+	0x65, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x3b,
+	0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x77, 0x70, 0x61, 0x32, 0x18, 0xd2, 0x0f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x48,
+	0x00, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x12, 0x3b, 0x0a, 0x09, 0x61,
+	0x75, 0x74, 0x68, 0x5f, 0x77, 0x70, 0x61, 0x33, 0x18, 0xd3, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x33, 0x48, 0x00, 0x52, 0x08,
+	0x61, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x33, 0x12, 0x48, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68,
+	0x5f, 0x77, 0x70, 0x61, 0x32, 0x5f, 0x77, 0x70, 0x61, 0x33, 0x18, 0xd4, 0x0f, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1f, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x57, 0x70,
+	0x61, 0x33, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x57, 0x70,
+	0x61, 0x33, 0x12, 0x41, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x72, 0x61, 0x64, 0x69, 0x75,
+	0x73, 0x18, 0xd5, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65,
+	0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x75, 0x74,
+	0x68, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x52,
+	0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x64, 0x18, 0xf3, 0x07,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50,
+	0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x6e, 0x64, 0x52, 0x04, 0x62, 0x61, 0x6e, 0x64, 0x12, 0x19,
+	0x0a, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x68, 0x69, 0x64,
+	0x64, 0x65, 0x6e, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64,
+	0x65, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10,
+	0xe9, 0x07, 0x4a, 0x06, 0x08, 0xe9, 0x07, 0x10, 0xea, 0x07, 0x4a, 0x06, 0x08, 0xea, 0x07, 0x10,
+	0xeb, 0x07, 0x4a, 0x06, 0x08, 0xec, 0x07, 0x10, 0xed, 0x07, 0x4a, 0x06, 0x08, 0xee, 0x07, 0x10,
+	0xef, 0x07, 0x4a, 0x06, 0x08, 0xd0, 0x0f, 0x10, 0xd1, 0x0f, 0x4a, 0x06, 0x08, 0xf4, 0x07, 0x10,
+	0xf5, 0x07, 0x4a, 0x06, 0x08, 0xf6, 0x07, 0x10, 0xf7, 0x07, 0x4a, 0x06, 0x08, 0xf8, 0x07, 0x10,
+	0xf9, 0x07, 0x1a, 0xa3, 0x02, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x13,
+	0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69,
+	0x70, 0x76, 0x34, 0x12, 0x17, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0xf3, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x12,
+	0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x65,
+	0x74, 0x73, 0x18, 0xef, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x69,
+	0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x74, 0x52, 0x10, 0x62, 0x61, 0x73, 0x69, 0x63, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf0,
+	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x73, 0x6f,
+	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x18,
+	0xf1, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a,
+	0x07, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xe9, 0x07,
+	0x4a, 0x06, 0x08, 0xe9, 0x07, 0x10, 0xea, 0x07, 0x4a, 0x06, 0x08, 0xea, 0x07, 0x10, 0xeb, 0x07,
+	0x4a, 0x06, 0x08, 0xec, 0x07, 0x10, 0xed, 0x07, 0x4a, 0x06, 0x08, 0xed, 0x07, 0x10, 0xee, 0x07,
+	0x4a, 0x06, 0x08, 0xee, 0x07, 0x10, 0xef, 0x07, 0x22, 0x39, 0x0a, 0x08, 0x53, 0x65, 0x63, 0x75,
+	0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
+	0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x50, 0x41, 0x32, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57,
+	0x50, 0x41, 0x33, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x50, 0x41, 0x32, 0x57, 0x50, 0x41,
+	0x33, 0x10, 0x03, 0x22, 0x30, 0x0a, 0x04, 0x42, 0x61, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x0a, 0x52,
+	0x46, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52,
+	0x46, 0x5f, 0x32, 0x47, 0x48, 0x5a, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x46, 0x5f, 0x35,
+	0x47, 0x48, 0x5a, 0x10, 0x05, 0x22, 0xe5, 0x01, 0x0a, 0x0c, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65,
+	0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45,
+	0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10,
+	0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0a, 0x0a,
+	0x06, 0x42, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x5f, 0x4f,
+	0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10,
+	0x04, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x5f, 0x47, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x05,
+	0x12, 0x0d, 0x0a, 0x09, 0x41, 0x5f, 0x4e, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x06, 0x12,
+	0x0d, 0x0a, 0x09, 0x47, 0x5f, 0x4e, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x07, 0x12, 0x0f,
+	0x0a, 0x0b, 0x42, 0x5f, 0x47, 0x5f, 0x4e, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x08, 0x12,
+	0x11, 0x0a, 0x0d, 0x41, 0x5f, 0x41, 0x4e, 0x5f, 0x41, 0x43, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44,
+	0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x4e, 0x5f, 0x41, 0x43, 0x5f, 0x4d, 0x49, 0x58, 0x45,
+	0x44, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x5f, 0x47, 0x5f, 0x4e, 0x5f, 0x41, 0x58, 0x5f,
+	0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x5f, 0x41, 0x4e, 0x5f,
+	0x41, 0x43, 0x5f, 0x41, 0x58, 0x5f, 0x4d, 0x49, 0x58, 0x45, 0x44, 0x10, 0x0c, 0x22, 0x5f, 0x0a,
+	0x0b, 0x48, 0x54, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x14,
+	0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x44, 0x45, 0x46,
+	0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e,
+	0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x32, 0x30, 0x5f, 0x4d, 0x48, 0x5a, 0x10, 0x01, 0x12,
+	0x1d, 0x0a, 0x19, 0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f,
+	0x32, 0x30, 0x5f, 0x4f, 0x52, 0x5f, 0x34, 0x30, 0x5f, 0x4d, 0x48, 0x5a, 0x10, 0x02, 0x22, 0x9c,
+	0x01, 0x0a, 0x0c, 0x56, 0x48, 0x54, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12,
+	0x19, 0x0a, 0x15, 0x56, 0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48,
+	0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x48,
+	0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x44, 0x49, 0x53, 0x41,
+	0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x48, 0x54, 0x5f, 0x42, 0x41,
+	0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x38, 0x30, 0x5f, 0x4d, 0x48, 0x5a, 0x10, 0x02,
+	0x12, 0x19, 0x0a, 0x15, 0x56, 0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54,
+	0x48, 0x5f, 0x31, 0x36, 0x30, 0x5f, 0x4d, 0x48, 0x5a, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x56,
+	0x48, 0x54, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x38, 0x30, 0x5f,
+	0x50, 0x4c, 0x55, 0x53, 0x5f, 0x38, 0x30, 0x5f, 0x4d, 0x48, 0x5a, 0x10, 0x04, 0x4a, 0x04, 0x08,
+	0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a,
+	0x04, 0x08, 0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10,
+	0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08,
+	0x15, 0x10, 0x16, 0x4a, 0x04, 0x08, 0x18, 0x10, 0x19, 0x4a, 0x04, 0x08, 0x19, 0x10, 0x1a, 0x4a,
+	0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10,
+	0x1e, 0x4a, 0x04, 0x08, 0x20, 0x10, 0x21, 0x4a, 0x04, 0x08, 0x24, 0x10, 0x25, 0x4a, 0x04, 0x08,
+	0x26, 0x10, 0x27, 0x4a, 0x04, 0x08, 0x28, 0x10, 0x29, 0x4a, 0x04, 0x08, 0x29, 0x10, 0x2a, 0x4a,
+	0x06, 0x08, 0xeb, 0x07, 0x10, 0xec, 0x07, 0x4a, 0x06, 0x08, 0xee, 0x07, 0x10, 0xef, 0x07, 0x4a,
+	0x06, 0x08, 0xef, 0x07, 0x10, 0xf0, 0x07, 0x4a, 0x06, 0x08, 0xf0, 0x07, 0x10, 0xf1, 0x07, 0x4a,
+	0x06, 0x08, 0xf1, 0x07, 0x10, 0xf2, 0x07, 0x4a, 0x06, 0x08, 0xf3, 0x07, 0x10, 0xf4, 0x07, 0x4a,
+	0x06, 0x08, 0xf4, 0x07, 0x10, 0xf5, 0x07, 0x4a, 0x06, 0x08, 0xf7, 0x07, 0x10, 0xf8, 0x07, 0x4a,
+	0x06, 0x08, 0xfd, 0x07, 0x10, 0xfe, 0x07, 0x4a, 0x06, 0x08, 0x91, 0x08, 0x10, 0x92, 0x08, 0x4a,
+	0x06, 0x08, 0x9b, 0x08, 0x10, 0x9c, 0x08, 0x4a, 0x06, 0x08, 0x9c, 0x08, 0x10, 0x9d, 0x08, 0x4a,
+	0x06, 0x08, 0x9d, 0x08, 0x10, 0x9e, 0x08, 0x4a, 0x06, 0x08, 0xa0, 0x08, 0x10, 0xa1, 0x08, 0x4a,
+	0x06, 0x08, 0xd1, 0x0f, 0x10, 0xd2, 0x0f, 0x4a, 0x06, 0x08, 0xd2, 0x0f, 0x10, 0xd3, 0x0f, 0x4a,
+	0x06, 0x08, 0xd3, 0x0f, 0x10, 0xd4, 0x0f, 0x4a, 0x06, 0x08, 0xd4, 0x0f, 0x10, 0xd5, 0x0f, 0x4a,
+	0x06, 0x08, 0xd5, 0x0f, 0x10, 0xd6, 0x0f, 0x4a, 0x06, 0x08, 0xd6, 0x0f, 0x10, 0xd7, 0x0f, 0x4a,
+	0x06, 0x08, 0xd7, 0x0f, 0x10, 0xd8, 0x0f, 0x4a, 0x06, 0x08, 0xd8, 0x0f, 0x10, 0xd9, 0x0f, 0x22,
+	0x0a, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x4f, 0x70, 0x65, 0x6e, 0x22, 0x26, 0x0a, 0x08, 0x41,
+	0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77,
+	0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77,
+	0x6f, 0x72, 0x64, 0x22, 0x26, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x33, 0x12,
+	0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x2a, 0x0a, 0x0c, 0x41,
+	0x75, 0x74, 0x68, 0x57, 0x70, 0x61, 0x32, 0x57, 0x70, 0x61, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x70,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68,
+	0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1f,
+	0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x12,
+	0x29, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x5f, 0x62, 0x61, 0x73,
+	0x65, 0x5f, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76,
+	0x65, 0x72, 0x43, 0x61, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2a, 0x64, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x68, 0x41, 0x75,
+	0x74, 0x68, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f,
+	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x45, 0x53,
+	0x48, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11,
+	0x4d, 0x45, 0x53, 0x48, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45,
+	0x44, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x41, 0x55, 0x54, 0x48,
+	0x5f, 0x55, 0x4e, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x42, 0x17, 0x5a, 0x15,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -189,16 +1925,56 @@ func file_spacex_api_device_wifi_config_proto_rawDescG
 	return file_spacex_api_device_wifi_config_proto_rawDescData
 }
 
-var file_spacex_api_device_wifi_config_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_spacex_api_device_wifi_config_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
+var file_spacex_api_device_wifi_config_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
 var file_spacex_api_device_wifi_config_proto_goTypes = []interface{}{
-	(*WifiConfig)(nil), // 0: SpaceX.API.Device.WifiConfig
+	(MeshAuth)(0),                      // 0: SpaceX.API.Device.MeshAuth
+	(WifiConfig_Security)(0),           // 1: SpaceX.API.Device.WifiConfig.Security
+	(WifiConfig_Band)(0),               // 2: SpaceX.API.Device.WifiConfig.Band
+	(WifiConfig_WirelessMode)(0),       // 3: SpaceX.API.Device.WifiConfig.WirelessMode
+	(WifiConfig_HTBandwidth)(0),        // 4: SpaceX.API.Device.WifiConfig.HTBandwidth
+	(WifiConfig_VHTBandwidth)(0),       // 5: SpaceX.API.Device.WifiConfig.VHTBandwidth
+	(*MeshConfig)(nil),                 // 6: SpaceX.API.Device.MeshConfig
+	(*WifiConfig)(nil),                 // 7: SpaceX.API.Device.WifiConfig
+	(*AuthOpen)(nil),                   // 8: SpaceX.API.Device.AuthOpen
+	(*AuthWpa2)(nil),                   // 9: SpaceX.API.Device.AuthWpa2
+	(*AuthWpa3)(nil),                   // 10: SpaceX.API.Device.AuthWpa3
+	(*AuthWpa2Wpa3)(nil),               // 11: SpaceX.API.Device.AuthWpa2Wpa3
+	(*AuthRadius)(nil),                 // 12: SpaceX.API.Device.AuthRadius
+	nil,                                // 13: SpaceX.API.Device.WifiConfig.MeshConfigsEntry
+	nil,                                // 14: SpaceX.API.Device.WifiConfig.MeshConfigsUpdatesEntry
+	(*WifiConfig_BasicServiceSet)(nil), // 15: SpaceX.API.Device.WifiConfig.BasicServiceSet
+	(*WifiConfig_Network)(nil),         // 16: SpaceX.API.Device.WifiConfig.Network
+	(*PublicKey)(nil),                  // 17: SpaceX.API.Device.PublicKey
+	(*BootInfo)(nil),                   // 18: SpaceX.API.Device.BootInfo
 }
 var file_spacex_api_device_wifi_config_proto_depIdxs = []int32{
-	0, // [0:0] is the sub-list for method output_type
-	0, // [0:0] is the sub-list for method input_type
-	0, // [0:0] is the sub-list for extension type_name
-	0, // [0:0] is the sub-list for extension extendee
-	0, // [0:0] is the sub-list for field type_name
+	0,  // 0: SpaceX.API.Device.MeshConfig.auth:type_name -> SpaceX.API.Device.MeshAuth
+	13, // 1: SpaceX.API.Device.WifiConfig.mesh_configs:type_name -> SpaceX.API.Device.WifiConfig.MeshConfigsEntry
+	14, // 2: SpaceX.API.Device.WifiConfig.mesh_configs_updates:type_name -> SpaceX.API.Device.WifiConfig.MeshConfigsUpdatesEntry
+	17, // 3: SpaceX.API.Device.WifiConfig.dynamic_keys:type_name -> SpaceX.API.Device.PublicKey
+	18, // 4: SpaceX.API.Device.WifiConfig.boot:type_name -> SpaceX.API.Device.BootInfo
+	16, // 5: SpaceX.API.Device.WifiConfig.networks:type_name -> SpaceX.API.Device.WifiConfig.Network
+	1,  // 6: SpaceX.API.Device.WifiConfig.wifi_security:type_name -> SpaceX.API.Device.WifiConfig.Security
+	3,  // 7: SpaceX.API.Device.WifiConfig.wireless_mode_2ghz:type_name -> SpaceX.API.Device.WifiConfig.WirelessMode
+	3,  // 8: SpaceX.API.Device.WifiConfig.wireless_mode_5ghz:type_name -> SpaceX.API.Device.WifiConfig.WirelessMode
+	4,  // 9: SpaceX.API.Device.WifiConfig.ht_bandwidth_2ghz:type_name -> SpaceX.API.Device.WifiConfig.HTBandwidth
+	4,  // 10: SpaceX.API.Device.WifiConfig.ht_bandwidth_5ghz:type_name -> SpaceX.API.Device.WifiConfig.HTBandwidth
+	5,  // 11: SpaceX.API.Device.WifiConfig.vht_bandwidth:type_name -> SpaceX.API.Device.WifiConfig.VHTBandwidth
+	6,  // 12: SpaceX.API.Device.WifiConfig.MeshConfigsEntry.value:type_name -> SpaceX.API.Device.MeshConfig
+	6,  // 13: SpaceX.API.Device.WifiConfig.MeshConfigsUpdatesEntry.value:type_name -> SpaceX.API.Device.MeshConfig
+	8,  // 14: SpaceX.API.Device.WifiConfig.BasicServiceSet.auth_open:type_name -> SpaceX.API.Device.AuthOpen
+	9,  // 15: SpaceX.API.Device.WifiConfig.BasicServiceSet.auth_wpa2:type_name -> SpaceX.API.Device.AuthWpa2
+	10, // 16: SpaceX.API.Device.WifiConfig.BasicServiceSet.auth_wpa3:type_name -> SpaceX.API.Device.AuthWpa3
+	11, // 17: SpaceX.API.Device.WifiConfig.BasicServiceSet.auth_wpa2_wpa3:type_name -> SpaceX.API.Device.AuthWpa2Wpa3
+	12, // 18: SpaceX.API.Device.WifiConfig.BasicServiceSet.auth_radius:type_name -> SpaceX.API.Device.AuthRadius
+	2,  // 19: SpaceX.API.Device.WifiConfig.BasicServiceSet.band:type_name -> SpaceX.API.Device.WifiConfig.Band
+	15, // 20: SpaceX.API.Device.WifiConfig.Network.basic_service_sets:type_name -> SpaceX.API.Device.WifiConfig.BasicServiceSet
+	21, // [21:21] is the sub-list for method output_type
+	21, // [21:21] is the sub-list for method input_type
+	21, // [21:21] is the sub-list for extension type_name
+	21, // [21:21] is the sub-list for extension extendee
+	0,  // [0:21] is the sub-list for field type_name
 }
 
 func init() { file_spacex_api_device_wifi_config_proto_init() }
@@ -206,8 +1982,22 @@ func file_spacex_api_device_wifi_config_proto_init() {
 	if File_spacex_api_device_wifi_config_proto != nil {
 		return
 	}
+	file_spacex_api_device_command_proto_init()
+	file_spacex_api_device_common_proto_init()
 	if !protoimpl.UnsafeEnabled {
 		file_spacex_api_device_wifi_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MeshConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*WifiConfig); i {
 			case 0:
 				return &v.state
@@ -219,19 +2009,111 @@ func file_spacex_api_device_wifi_config_proto_init() {
 				return nil
 			}
 		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AuthOpen); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AuthWpa2); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AuthWpa3); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AuthWpa2Wpa3); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AuthRadius); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiConfig_BasicServiceSet); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spacex_api_device_wifi_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WifiConfig_Network); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
+	file_spacex_api_device_wifi_config_proto_msgTypes[9].OneofWrappers = []interface{}{
+		(*WifiConfig_BasicServiceSet_AuthOpen)(nil),
+		(*WifiConfig_BasicServiceSet_AuthWpa2)(nil),
+		(*WifiConfig_BasicServiceSet_AuthWpa3)(nil),
+		(*WifiConfig_BasicServiceSet_AuthWpa2Wpa3)(nil),
+		(*WifiConfig_BasicServiceSet_AuthRadius)(nil),
+	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_spacex_api_device_wifi_config_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   1,
+			NumEnums:      6,
+			NumMessages:   11,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
 		GoTypes:           file_spacex_api_device_wifi_config_proto_goTypes,
 		DependencyIndexes: file_spacex_api_device_wifi_config_proto_depIdxs,
+		EnumInfos:         file_spacex_api_device_wifi_config_proto_enumTypes,
 		MessageInfos:      file_spacex_api_device_wifi_config_proto_msgTypes,
 	}.Build()
 	File_spacex_api_device_wifi_config_proto = out.File
blob - /dev/null
blob + 09f032c8d6e9955f0eee320487eed541c6951af8 (mode 644)
--- /dev/null
+++ device/wifi_grpc.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.21.6
+// source: spacex/api/device/wifi.proto
+
+package device
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// MeshClient is the client API for Mesh service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type MeshClient interface {
+	MeshStream(ctx context.Context, opts ...grpc.CallOption) (Mesh_MeshStreamClient, error)
+}
+
+type meshClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMeshClient(cc grpc.ClientConnInterface) MeshClient {
+	return &meshClient{cc}
+}
+
+func (c *meshClient) MeshStream(ctx context.Context, opts ...grpc.CallOption) (Mesh_MeshStreamClient, error) {
+	stream, err := c.cc.NewStream(ctx, &Mesh_ServiceDesc.Streams[0], "/SpaceX.API.Device.Mesh/MeshStream", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &meshMeshStreamClient{stream}
+	return x, nil
+}
+
+type Mesh_MeshStreamClient interface {
+	Send(*ToController) error
+	Recv() (*FromController, error)
+	grpc.ClientStream
+}
+
+type meshMeshStreamClient struct {
+	grpc.ClientStream
+}
+
+func (x *meshMeshStreamClient) Send(m *ToController) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *meshMeshStreamClient) Recv() (*FromController, error) {
+	m := new(FromController)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+// MeshServer is the server API for Mesh service.
+// All implementations must embed UnimplementedMeshServer
+// for forward compatibility
+type MeshServer interface {
+	MeshStream(Mesh_MeshStreamServer) error
+	mustEmbedUnimplementedMeshServer()
+}
+
+// UnimplementedMeshServer must be embedded to have forward compatible implementations.
+type UnimplementedMeshServer struct {
+}
+
+func (UnimplementedMeshServer) MeshStream(Mesh_MeshStreamServer) error {
+	return status.Errorf(codes.Unimplemented, "method MeshStream not implemented")
+}
+func (UnimplementedMeshServer) mustEmbedUnimplementedMeshServer() {}
+
+// UnsafeMeshServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to MeshServer will
+// result in compilation errors.
+type UnsafeMeshServer interface {
+	mustEmbedUnimplementedMeshServer()
+}
+
+func RegisterMeshServer(s grpc.ServiceRegistrar, srv MeshServer) {
+	s.RegisterService(&Mesh_ServiceDesc, srv)
+}
+
+func _Mesh_MeshStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(MeshServer).MeshStream(&meshMeshStreamServer{stream})
+}
+
+type Mesh_MeshStreamServer interface {
+	Send(*FromController) error
+	Recv() (*ToController, error)
+	grpc.ServerStream
+}
+
+type meshMeshStreamServer struct {
+	grpc.ServerStream
+}
+
+func (x *meshMeshStreamServer) Send(m *FromController) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *meshMeshStreamServer) Recv() (*ToController, error) {
+	m := new(ToController)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+// Mesh_ServiceDesc is the grpc.ServiceDesc for Mesh service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Mesh_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "SpaceX.API.Device.Mesh",
+	HandlerType: (*MeshServer)(nil),
+	Methods:     []grpc.MethodDesc{},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "MeshStream",
+			Handler:       _Mesh_MeshStream_Handler,
+			ServerStreams: true,
+			ClientStreams: true,
+		},
+	},
+	Metadata: "spacex/api/device/wifi.proto",
+}
blob - 8c710bf7387a38c7fd1185cb0c3c395cc5afe936
blob + 15511aaa1c6bc2151b3e218abafcabd15d911dfd
Binary files device.protoset and device.protoset differ
blob - f95bb0fde4d4ffe28b8c451986e35906f8ec2df3
blob + 21cf2e6be1a6434ed1cc2be08f32d6238fcf7578
--- protoc.sh
+++ protoc.sh
@@ -7,7 +7,7 @@
 # By default it connects to the default Dishy address (see DefaultDishyAddr).
 # A different address can be specified as an argument. For example:
 #
-#	protoc.sh 172.19.248.42:9100
+#	protoc.sh 192.0.2.1:9200
 #
 # This can be useful if the device is only available through a tunnel or VPN.
 #
@@ -32,30 +32,48 @@ then
 fi
 grpcurl -plaintext -protoset-out device.protoset $addr describe SpaceX.API.Device.Device
 
-# The protoc command, without proto file arguments, to generate the Go code.
-# From https://grpc.io/docs/languages/go/quickstart/#regenerate-grpc-code
-# For a protobuf reference:
+# First compile the dependencies of the Device service
+deps="spacex/api/common/status/status.proto
+	spacex/api/common/protobuf/internal.proto
+	spacex/api/telemetron/public/common/time.proto
+	spacex/api/satellites/network/ut_disablement_codes.proto
+	spacex/api/common/protobuf/internal.proto"
+
+# Map the dependencies between protofiles to Go package import paths.
+# We need a clean import path with a different root (not the
+# automatically generated "spacex.com") so that packages in this module
+# can import each other.
 # https://developers.google.com/protocol-buffers/docs/reference/go-generated
+gomodule=`grep module go.mod | awk '{print $2}'`
+import_opt="
+	--go_opt Mspacex/api/common/status/status.proto=$gomodule/status
+	--go_opt Mspacex/api/common/protobuf/internal.proto=$gomodule/protobuf
+	--go-grpc_opt Mspacex/api/common/protobuf/internal.proto=$gomodule/protobuf
+	--go_opt Mspacex/api/satellites/network/ut_disablement_codes.proto=$gomodule/satellites
+	--go-grpc_opt Mspacex/api/satellites/network/ut_disablement_codes.proto=$gomodule/satellites
+	--go_opt Mspacex/api/telemetron/public/common/time.proto=$gomodule/telemetron
+	--go-grpc_opt Mspacex/api/telemetron/public/common/time.proto=$gomodule/telemetron"
 
-# Strip the spacex.com/api prefix so package imports can be resolved within our Go module.
+# Strip our module prefix when writing generated files to disk; we import packages from within this module.
 # https://developers.google.com/protocol-buffers/docs/reference/go-generated#invocation
-module_opt="--go_opt module=spacex.com/api --go-grpc_opt module=spacex.com/api"
+module_opt="--go_opt module=$gomodule --go-grpc_opt module=$gomodule"
 
 protoc --go_out . --go-grpc_out . --descriptor_set_in device.protoset \
-	$module_opt \
-	spacex/api/common/status/status.proto
+	$module_opt $import_opt \
+	$deps
 
-# Device proto files import status.proto, so set the corresponding Go
-# package import path for the status package we generated previously.
-gomodule=`grep module go.mod | awk '{print $2}'`
-import_opt="--go_opt Mspacex/api/common/status/status.proto=$gomodule/status"
 files="spacex/api/device/command.proto
 	spacex/api/device/common.proto
 	spacex/api/device/device.proto
 	spacex/api/device/dish.proto
+	spacex/api/device/dish_config.proto
 	spacex/api/device/transceiver.proto
 	spacex/api/device/wifi.proto
 	spacex/api/device/wifi_config.proto"
+
+# Strip the original spacex.com/api prefix so package imports are resolved from our Go module.
+module_opt="--go_opt module=spacex.com/api --go-grpc_opt module=spacex.com/api"
+
 protoc --go_out . --go-grpc_out . --descriptor_set_in device.protoset \
-	$module_opt $import_opt \
+	$import_opt $module_opt \
 	$files
blob - /dev/null
blob + da1331ead1617d5290b022f73b3fa4e1d6b9a994 (mode 644)
--- /dev/null
+++ protobuf/internal.pb.go
@@ -0,0 +1,216 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.28.1
+// 	protoc        v3.21.6
+// source: spacex/api/common/protobuf/internal.proto
+
+package protobuf
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	descriptorpb "google.golang.org/protobuf/types/descriptorpb"
+	reflect "reflect"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+var file_spacex_api_common_protobuf_internal_proto_extTypes = []protoimpl.ExtensionInfo{
+	{
+		ExtendedType:  (*descriptorpb.FileOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60000,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_file",
+		Tag:           "varint,60000,opt,name=unstable_file",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.MessageOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60001,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_message",
+		Tag:           "varint,60001,opt,name=unstable_message",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60002,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_field",
+		Tag:           "varint,60002,opt,name=unstable_field",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.EnumOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60003,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_enum",
+		Tag:           "varint,60003,opt,name=unstable_enum",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.EnumValueOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60004,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_enum_value",
+		Tag:           "varint,60004,opt,name=unstable_enum_value",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.ServiceOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60005,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_service",
+		Tag:           "varint,60005,opt,name=unstable_service",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.MethodOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         60006,
+		Name:          "SpaceX.API.Common.Protobuf.unstable_method",
+		Tag:           "varint,60006,opt,name=unstable_method",
+		Filename:      "spacex/api/common/protobuf/internal.proto",
+	},
+}
+
+// Extension fields to descriptorpb.FileOptions.
+var (
+	// optional bool unstable_file = 60000;
+	E_UnstableFile = &file_spacex_api_common_protobuf_internal_proto_extTypes[0]
+)
+
+// Extension fields to descriptorpb.MessageOptions.
+var (
+	// optional bool unstable_message = 60001;
+	E_UnstableMessage = &file_spacex_api_common_protobuf_internal_proto_extTypes[1]
+)
+
+// Extension fields to descriptorpb.FieldOptions.
+var (
+	// optional bool unstable_field = 60002;
+	E_UnstableField = &file_spacex_api_common_protobuf_internal_proto_extTypes[2]
+)
+
+// Extension fields to descriptorpb.EnumOptions.
+var (
+	// optional bool unstable_enum = 60003;
+	E_UnstableEnum = &file_spacex_api_common_protobuf_internal_proto_extTypes[3]
+)
+
+// Extension fields to descriptorpb.EnumValueOptions.
+var (
+	// optional bool unstable_enum_value = 60004;
+	E_UnstableEnumValue = &file_spacex_api_common_protobuf_internal_proto_extTypes[4]
+)
+
+// Extension fields to descriptorpb.ServiceOptions.
+var (
+	// optional bool unstable_service = 60005;
+	E_UnstableService = &file_spacex_api_common_protobuf_internal_proto_extTypes[5]
+)
+
+// Extension fields to descriptorpb.MethodOptions.
+var (
+	// optional bool unstable_method = 60006;
+	E_UnstableMethod = &file_spacex_api_common_protobuf_internal_proto_extTypes[6]
+)
+
+var File_spacex_api_common_protobuf_internal_proto protoreflect.FileDescriptor
+
+var file_spacex_api_common_protobuf_internal_proto_rawDesc = []byte{
+	0x0a, 0x29, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x53, 0x70, 0x61,
+	0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x43, 0x0a, 0x0d, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c,
+	0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe0, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0c, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x3a, 0x4c,
+	0x0a, 0x10, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xe1, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x46, 0x0a, 0x0e,
+	0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe2, 0xd4,
+	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46,
+	0x69, 0x65, 0x6c, 0x64, 0x3a, 0x43, 0x0a, 0x0d, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65,
+	0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xe3, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x53, 0x0a, 0x13, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xe4, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x4c,
+	0x0a, 0x10, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xe5, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x6e, 0x73,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x49, 0x0a, 0x0f,
+	0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12,
+	0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0xe6, 0xd4, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c,
+	0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var file_spacex_api_common_protobuf_internal_proto_goTypes = []interface{}{
+	(*descriptorpb.FileOptions)(nil),      // 0: google.protobuf.FileOptions
+	(*descriptorpb.MessageOptions)(nil),   // 1: google.protobuf.MessageOptions
+	(*descriptorpb.FieldOptions)(nil),     // 2: google.protobuf.FieldOptions
+	(*descriptorpb.EnumOptions)(nil),      // 3: google.protobuf.EnumOptions
+	(*descriptorpb.EnumValueOptions)(nil), // 4: google.protobuf.EnumValueOptions
+	(*descriptorpb.ServiceOptions)(nil),   // 5: google.protobuf.ServiceOptions
+	(*descriptorpb.MethodOptions)(nil),    // 6: google.protobuf.MethodOptions
+}
+var file_spacex_api_common_protobuf_internal_proto_depIdxs = []int32{
+	0, // 0: SpaceX.API.Common.Protobuf.unstable_file:extendee -> google.protobuf.FileOptions
+	1, // 1: SpaceX.API.Common.Protobuf.unstable_message:extendee -> google.protobuf.MessageOptions
+	2, // 2: SpaceX.API.Common.Protobuf.unstable_field:extendee -> google.protobuf.FieldOptions
+	3, // 3: SpaceX.API.Common.Protobuf.unstable_enum:extendee -> google.protobuf.EnumOptions
+	4, // 4: SpaceX.API.Common.Protobuf.unstable_enum_value:extendee -> google.protobuf.EnumValueOptions
+	5, // 5: SpaceX.API.Common.Protobuf.unstable_service:extendee -> google.protobuf.ServiceOptions
+	6, // 6: SpaceX.API.Common.Protobuf.unstable_method:extendee -> google.protobuf.MethodOptions
+	7, // [7:7] is the sub-list for method output_type
+	7, // [7:7] is the sub-list for method input_type
+	7, // [7:7] is the sub-list for extension type_name
+	0, // [0:7] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_spacex_api_common_protobuf_internal_proto_init() }
+func file_spacex_api_common_protobuf_internal_proto_init() {
+	if File_spacex_api_common_protobuf_internal_proto != nil {
+		return
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_spacex_api_common_protobuf_internal_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   0,
+			NumExtensions: 7,
+			NumServices:   0,
+		},
+		GoTypes:           file_spacex_api_common_protobuf_internal_proto_goTypes,
+		DependencyIndexes: file_spacex_api_common_protobuf_internal_proto_depIdxs,
+		ExtensionInfos:    file_spacex_api_common_protobuf_internal_proto_extTypes,
+	}.Build()
+	File_spacex_api_common_protobuf_internal_proto = out.File
+	file_spacex_api_common_protobuf_internal_proto_rawDesc = nil
+	file_spacex_api_common_protobuf_internal_proto_goTypes = nil
+	file_spacex_api_common_protobuf_internal_proto_depIdxs = nil
+}
blob - /dev/null
blob + bf22cd795c9991ff53bae28b7dd72de168be9e37 (mode 644)
--- /dev/null
+++ satellites/ut_disablement_codes.pb.go
@@ -0,0 +1,152 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.28.1
+// 	protoc        v3.21.6
+// source: spacex/api/satellites/network/ut_disablement_codes.proto
+
+package satellites
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	_ "olowe.co/dishy/protobuf"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type UtDisablementCode int32
+
+const (
+	UtDisablementCode_UNKNOWN_STATE                UtDisablementCode = 0
+	UtDisablementCode_OKAY                         UtDisablementCode = 1
+	UtDisablementCode_NO_ACTIVE_ACCOUNT            UtDisablementCode = 2
+	UtDisablementCode_TOO_FAR_FROM_SERVICE_ADDRESS UtDisablementCode = 3
+	UtDisablementCode_IN_OCEAN                     UtDisablementCode = 4
+	UtDisablementCode_INVALID_COUNTRY              UtDisablementCode = 5
+)
+
+// Enum value maps for UtDisablementCode.
+var (
+	UtDisablementCode_name = map[int32]string{
+		0: "UNKNOWN_STATE",
+		1: "OKAY",
+		2: "NO_ACTIVE_ACCOUNT",
+		3: "TOO_FAR_FROM_SERVICE_ADDRESS",
+		4: "IN_OCEAN",
+		5: "INVALID_COUNTRY",
+	}
+	UtDisablementCode_value = map[string]int32{
+		"UNKNOWN_STATE":                0,
+		"OKAY":                         1,
+		"NO_ACTIVE_ACCOUNT":            2,
+		"TOO_FAR_FROM_SERVICE_ADDRESS": 3,
+		"IN_OCEAN":                     4,
+		"INVALID_COUNTRY":              5,
+	}
+)
+
+func (x UtDisablementCode) Enum() *UtDisablementCode {
+	p := new(UtDisablementCode)
+	*p = x
+	return p
+}
+
+func (x UtDisablementCode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (UtDisablementCode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_satellites_network_ut_disablement_codes_proto_enumTypes[0].Descriptor()
+}
+
+func (UtDisablementCode) Type() protoreflect.EnumType {
+	return &file_spacex_api_satellites_network_ut_disablement_codes_proto_enumTypes[0]
+}
+
+func (x UtDisablementCode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use UtDisablementCode.Descriptor instead.
+func (UtDisablementCode) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescGZIP(), []int{0}
+}
+
+var File_spacex_api_satellites_network_ut_disablement_codes_proto protoreflect.FileDescriptor
+
+var file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDesc = []byte{
+	0x0a, 0x38, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x61, 0x74,
+	0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f,
+	0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63,
+	0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x53, 0x70, 0x61, 0x63,
+	0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x53, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65,
+	0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x1a, 0x29, 0x73, 0x70, 0x61, 0x63, 0x65,
+	0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2a, 0x8c, 0x01, 0x0a, 0x11, 0x55, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e,
+	0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a,
+	0x04, 0x4f, 0x4b, 0x41, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4f, 0x5f, 0x41, 0x43,
+	0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x20,
+	0x0a, 0x1c, 0x54, 0x4f, 0x4f, 0x5f, 0x46, 0x41, 0x52, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x53,
+	0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03,
+	0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x4f, 0x43, 0x45, 0x41, 0x4e, 0x10, 0x04, 0x12, 0x13,
+	0x0a, 0x0f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x52,
+	0x59, 0x10, 0x05, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescOnce sync.Once
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescData = file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDesc
+)
+
+func file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescGZIP() []byte {
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescOnce.Do(func() {
+		file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescData = protoimpl.X.CompressGZIP(file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescData)
+	})
+	return file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDescData
+}
+
+var file_spacex_api_satellites_network_ut_disablement_codes_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_spacex_api_satellites_network_ut_disablement_codes_proto_goTypes = []interface{}{
+	(UtDisablementCode)(0), // 0: SpaceX.API.Satellites.Network.UtDisablementCode
+}
+var file_spacex_api_satellites_network_ut_disablement_codes_proto_depIdxs = []int32{
+	0, // [0:0] is the sub-list for method output_type
+	0, // [0:0] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_spacex_api_satellites_network_ut_disablement_codes_proto_init() }
+func file_spacex_api_satellites_network_ut_disablement_codes_proto_init() {
+	if File_spacex_api_satellites_network_ut_disablement_codes_proto != nil {
+		return
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   0,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_spacex_api_satellites_network_ut_disablement_codes_proto_goTypes,
+		DependencyIndexes: file_spacex_api_satellites_network_ut_disablement_codes_proto_depIdxs,
+		EnumInfos:         file_spacex_api_satellites_network_ut_disablement_codes_proto_enumTypes,
+	}.Build()
+	File_spacex_api_satellites_network_ut_disablement_codes_proto = out.File
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_rawDesc = nil
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_goTypes = nil
+	file_spacex_api_satellites_network_ut_disablement_codes_proto_depIdxs = nil
+}
blob - /dev/null
blob + 349c2cf343cfdb995d39ac1e0b309d27a618bbce (mode 644)
--- /dev/null
+++ telemetron/time.pb.go
@@ -0,0 +1,209 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.28.1
+// 	protoc        v3.21.6
+// source: spacex/api/telemetron/public/common/time.proto
+
+package telemetron
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Epoch int32
+
+const (
+	Epoch_UNIX Epoch = 0
+	Epoch_GPS  Epoch = 1
+)
+
+// Enum value maps for Epoch.
+var (
+	Epoch_name = map[int32]string{
+		0: "UNIX",
+		1: "GPS",
+	}
+	Epoch_value = map[string]int32{
+		"UNIX": 0,
+		"GPS":  1,
+	}
+)
+
+func (x Epoch) Enum() *Epoch {
+	p := new(Epoch)
+	*p = x
+	return p
+}
+
+func (x Epoch) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Epoch) Descriptor() protoreflect.EnumDescriptor {
+	return file_spacex_api_telemetron_public_common_time_proto_enumTypes[0].Descriptor()
+}
+
+func (Epoch) Type() protoreflect.EnumType {
+	return &file_spacex_api_telemetron_public_common_time_proto_enumTypes[0]
+}
+
+func (x Epoch) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Epoch.Descriptor instead.
+func (Epoch) EnumDescriptor() ([]byte, []int) {
+	return file_spacex_api_telemetron_public_common_time_proto_rawDescGZIP(), []int{0}
+}
+
+type TimestampInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Epoch       Epoch `protobuf:"varint,1,opt,name=epoch,proto3,enum=SpaceX.API.Telemetron.Public.Common.Epoch" json:"epoch,omitempty"`
+	Nanoseconds int64 `protobuf:"varint,2,opt,name=nanoseconds,proto3" json:"nanoseconds,omitempty"`
+}
+
+func (x *TimestampInfo) Reset() {
+	*x = TimestampInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spacex_api_telemetron_public_common_time_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TimestampInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TimestampInfo) ProtoMessage() {}
+
+func (x *TimestampInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_spacex_api_telemetron_public_common_time_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TimestampInfo.ProtoReflect.Descriptor instead.
+func (*TimestampInfo) Descriptor() ([]byte, []int) {
+	return file_spacex_api_telemetron_public_common_time_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *TimestampInfo) GetEpoch() Epoch {
+	if x != nil {
+		return x.Epoch
+	}
+	return Epoch_UNIX
+}
+
+func (x *TimestampInfo) GetNanoseconds() int64 {
+	if x != nil {
+		return x.Nanoseconds
+	}
+	return 0
+}
+
+var File_spacex_api_telemetron_public_common_time_proto protoreflect.FileDescriptor
+
+var file_spacex_api_telemetron_public_common_time_proto_rawDesc = []byte{
+	0x0a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x23, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41, 0x50, 0x49, 0x2e, 0x54, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x43,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x73, 0x0a, 0x0d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x58, 0x2e, 0x41,
+	0x50, 0x49, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x6e, 0x2e, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x70, 0x6f, 0x63,
+	0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x6e, 0x6f,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6e,
+	0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2a, 0x1a, 0x0a, 0x05, 0x45, 0x70,
+	0x6f, 0x63, 0x68, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x4e, 0x49, 0x58, 0x10, 0x00, 0x12, 0x07, 0x0a,
+	0x03, 0x47, 0x50, 0x53, 0x10, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_spacex_api_telemetron_public_common_time_proto_rawDescOnce sync.Once
+	file_spacex_api_telemetron_public_common_time_proto_rawDescData = file_spacex_api_telemetron_public_common_time_proto_rawDesc
+)
+
+func file_spacex_api_telemetron_public_common_time_proto_rawDescGZIP() []byte {
+	file_spacex_api_telemetron_public_common_time_proto_rawDescOnce.Do(func() {
+		file_spacex_api_telemetron_public_common_time_proto_rawDescData = protoimpl.X.CompressGZIP(file_spacex_api_telemetron_public_common_time_proto_rawDescData)
+	})
+	return file_spacex_api_telemetron_public_common_time_proto_rawDescData
+}
+
+var file_spacex_api_telemetron_public_common_time_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_spacex_api_telemetron_public_common_time_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_spacex_api_telemetron_public_common_time_proto_goTypes = []interface{}{
+	(Epoch)(0),            // 0: SpaceX.API.Telemetron.Public.Common.Epoch
+	(*TimestampInfo)(nil), // 1: SpaceX.API.Telemetron.Public.Common.TimestampInfo
+}
+var file_spacex_api_telemetron_public_common_time_proto_depIdxs = []int32{
+	0, // 0: SpaceX.API.Telemetron.Public.Common.TimestampInfo.epoch:type_name -> SpaceX.API.Telemetron.Public.Common.Epoch
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_spacex_api_telemetron_public_common_time_proto_init() }
+func file_spacex_api_telemetron_public_common_time_proto_init() {
+	if File_spacex_api_telemetron_public_common_time_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_spacex_api_telemetron_public_common_time_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TimestampInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_spacex_api_telemetron_public_common_time_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_spacex_api_telemetron_public_common_time_proto_goTypes,
+		DependencyIndexes: file_spacex_api_telemetron_public_common_time_proto_depIdxs,
+		EnumInfos:         file_spacex_api_telemetron_public_common_time_proto_enumTypes,
+		MessageInfos:      file_spacex_api_telemetron_public_common_time_proto_msgTypes,
+	}.Build()
+	File_spacex_api_telemetron_public_common_time_proto = out.File
+	file_spacex_api_telemetron_public_common_time_proto_rawDesc = nil
+	file_spacex_api_telemetron_public_common_time_proto_goTypes = nil
+	file_spacex_api_telemetron_public_common_time_proto_depIdxs = nil
+}