// Extracted from: Spotify 1.1.73.517 (macOS) // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.12 // source: connect.proto package proto 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 AudioOutputDeviceType int32 const ( AudioOutputDeviceType_UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE AudioOutputDeviceType = 0 AudioOutputDeviceType_BUILT_IN_SPEAKER AudioOutputDeviceType = 1 AudioOutputDeviceType_LINE_OUT AudioOutputDeviceType = 2 AudioOutputDeviceType_BLUETOOTH AudioOutputDeviceType = 3 AudioOutputDeviceType_AIRPLAY AudioOutputDeviceType = 4 ) // Enum value maps for AudioOutputDeviceType. var ( AudioOutputDeviceType_name = map[int32]string{ 0: "UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE", 1: "BUILT_IN_SPEAKER", 2: "LINE_OUT", 3: "BLUETOOTH", 4: "AIRPLAY", } AudioOutputDeviceType_value = map[string]int32{ "UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE": 0, "BUILT_IN_SPEAKER": 1, "LINE_OUT": 2, "BLUETOOTH": 3, "AIRPLAY": 4, } ) func (x AudioOutputDeviceType) Enum() *AudioOutputDeviceType { p := new(AudioOutputDeviceType) *p = x return p } func (x AudioOutputDeviceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (AudioOutputDeviceType) Descriptor() protoreflect.EnumDescriptor { return file_connect_proto_enumTypes[0].Descriptor() } func (AudioOutputDeviceType) Type() protoreflect.EnumType { return &file_connect_proto_enumTypes[0] } func (x AudioOutputDeviceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use AudioOutputDeviceType.Descriptor instead. func (AudioOutputDeviceType) EnumDescriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{0} } type PutStateReason int32 const ( PutStateReason_UNKNOWN_PUT_STATE_REASON PutStateReason = 0 PutStateReason_SPIRC_HELLO PutStateReason = 1 PutStateReason_SPIRC_NOTIFY PutStateReason = 2 PutStateReason_NEW_DEVICE PutStateReason = 3 PutStateReason_PLAYER_STATE_CHANGED PutStateReason = 4 PutStateReason_VOLUME_CHANGED PutStateReason = 5 PutStateReason_PICKER_OPENED PutStateReason = 6 PutStateReason_BECAME_INACTIVE PutStateReason = 7 PutStateReason_ALIAS_CHANGED PutStateReason = 8 ) // Enum value maps for PutStateReason. var ( PutStateReason_name = map[int32]string{ 0: "UNKNOWN_PUT_STATE_REASON", 1: "SPIRC_HELLO", 2: "SPIRC_NOTIFY", 3: "NEW_DEVICE", 4: "PLAYER_STATE_CHANGED", 5: "VOLUME_CHANGED", 6: "PICKER_OPENED", 7: "BECAME_INACTIVE", 8: "ALIAS_CHANGED", } PutStateReason_value = map[string]int32{ "UNKNOWN_PUT_STATE_REASON": 0, "SPIRC_HELLO": 1, "SPIRC_NOTIFY": 2, "NEW_DEVICE": 3, "PLAYER_STATE_CHANGED": 4, "VOLUME_CHANGED": 5, "PICKER_OPENED": 6, "BECAME_INACTIVE": 7, "ALIAS_CHANGED": 8, } ) func (x PutStateReason) Enum() *PutStateReason { p := new(PutStateReason) *p = x return p } func (x PutStateReason) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (PutStateReason) Descriptor() protoreflect.EnumDescriptor { return file_connect_proto_enumTypes[1].Descriptor() } func (PutStateReason) Type() protoreflect.EnumType { return &file_connect_proto_enumTypes[1] } func (x PutStateReason) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use PutStateReason.Descriptor instead. func (PutStateReason) EnumDescriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{1} } type MemberType int32 const ( MemberType_SPIRC_V2 MemberType = 0 MemberType_SPIRC_V3 MemberType = 1 MemberType_CONNECT_STATE MemberType = 2 MemberType_CONNECT_STATE_EXTENDED MemberType = 5 MemberType_ACTIVE_DEVICE_TRACKER MemberType = 6 MemberType_PLAY_TOKEN MemberType = 7 ) // Enum value maps for MemberType. var ( MemberType_name = map[int32]string{ 0: "SPIRC_V2", 1: "SPIRC_V3", 2: "CONNECT_STATE", 5: "CONNECT_STATE_EXTENDED", 6: "ACTIVE_DEVICE_TRACKER", 7: "PLAY_TOKEN", } MemberType_value = map[string]int32{ "SPIRC_V2": 0, "SPIRC_V3": 1, "CONNECT_STATE": 2, "CONNECT_STATE_EXTENDED": 5, "ACTIVE_DEVICE_TRACKER": 6, "PLAY_TOKEN": 7, } ) func (x MemberType) Enum() *MemberType { p := new(MemberType) *p = x return p } func (x MemberType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (MemberType) Descriptor() protoreflect.EnumDescriptor { return file_connect_proto_enumTypes[2].Descriptor() } func (MemberType) Type() protoreflect.EnumType { return &file_connect_proto_enumTypes[2] } func (x MemberType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use MemberType.Descriptor instead. func (MemberType) EnumDescriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{2} } type ClusterUpdateReason int32 const ( ClusterUpdateReason_UNKNOWN_CLUSTER_UPDATE_REASON ClusterUpdateReason = 0 ClusterUpdateReason_DEVICES_DISAPPEARED ClusterUpdateReason = 1 ClusterUpdateReason_DEVICE_STATE_CHANGED ClusterUpdateReason = 2 ClusterUpdateReason_NEW_DEVICE_APPEARED ClusterUpdateReason = 3 ClusterUpdateReason_DEVICE_VOLUME_CHANGED ClusterUpdateReason = 4 ClusterUpdateReason_DEVICE_ALIAS_CHANGED ClusterUpdateReason = 5 ) // Enum value maps for ClusterUpdateReason. var ( ClusterUpdateReason_name = map[int32]string{ 0: "UNKNOWN_CLUSTER_UPDATE_REASON", 1: "DEVICES_DISAPPEARED", 2: "DEVICE_STATE_CHANGED", 3: "NEW_DEVICE_APPEARED", 4: "DEVICE_VOLUME_CHANGED", 5: "DEVICE_ALIAS_CHANGED", } ClusterUpdateReason_value = map[string]int32{ "UNKNOWN_CLUSTER_UPDATE_REASON": 0, "DEVICES_DISAPPEARED": 1, "DEVICE_STATE_CHANGED": 2, "NEW_DEVICE_APPEARED": 3, "DEVICE_VOLUME_CHANGED": 4, "DEVICE_ALIAS_CHANGED": 5, } ) func (x ClusterUpdateReason) Enum() *ClusterUpdateReason { p := new(ClusterUpdateReason) *p = x return p } func (x ClusterUpdateReason) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ClusterUpdateReason) Descriptor() protoreflect.EnumDescriptor { return file_connect_proto_enumTypes[3].Descriptor() } func (ClusterUpdateReason) Type() protoreflect.EnumType { return &file_connect_proto_enumTypes[3] } func (x ClusterUpdateReason) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ClusterUpdateReason.Descriptor instead. func (ClusterUpdateReason) EnumDescriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{3} } type SendCommandResult int32 const ( SendCommandResult_UNKNOWN_SEND_COMMAND_RESULT SendCommandResult = 0 SendCommandResult_SUCCESS SendCommandResult = 1 SendCommandResult_DEVICE_NOT_FOUND SendCommandResult = 2 SendCommandResult_CONTEXT_PLAYER_ERROR SendCommandResult = 3 SendCommandResult_DEVICE_DISAPPEARED SendCommandResult = 4 SendCommandResult_UPSTREAM_ERROR SendCommandResult = 5 SendCommandResult_DEVICE_DOES_NOT_SUPPORT_COMMAND SendCommandResult = 6 SendCommandResult_RATE_LIMITED SendCommandResult = 7 ) // Enum value maps for SendCommandResult. var ( SendCommandResult_name = map[int32]string{ 0: "UNKNOWN_SEND_COMMAND_RESULT", 1: "SUCCESS", 2: "DEVICE_NOT_FOUND", 3: "CONTEXT_PLAYER_ERROR", 4: "DEVICE_DISAPPEARED", 5: "UPSTREAM_ERROR", 6: "DEVICE_DOES_NOT_SUPPORT_COMMAND", 7: "RATE_LIMITED", } SendCommandResult_value = map[string]int32{ "UNKNOWN_SEND_COMMAND_RESULT": 0, "SUCCESS": 1, "DEVICE_NOT_FOUND": 2, "CONTEXT_PLAYER_ERROR": 3, "DEVICE_DISAPPEARED": 4, "UPSTREAM_ERROR": 5, "DEVICE_DOES_NOT_SUPPORT_COMMAND": 6, "RATE_LIMITED": 7, } ) func (x SendCommandResult) Enum() *SendCommandResult { p := new(SendCommandResult) *p = x return p } func (x SendCommandResult) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SendCommandResult) Descriptor() protoreflect.EnumDescriptor { return file_connect_proto_enumTypes[4].Descriptor() } func (SendCommandResult) Type() protoreflect.EnumType { return &file_connect_proto_enumTypes[4] } func (x SendCommandResult) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SendCommandResult.Descriptor instead. func (SendCommandResult) EnumDescriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{4} } type ClusterUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Cluster *Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` UpdateReason ClusterUpdateReason `protobuf:"varint,2,opt,name=update_reason,json=updateReason,proto3,enum=spotify.connectstate.ClusterUpdateReason" json:"update_reason,omitempty"` AckId string `protobuf:"bytes,3,opt,name=ack_id,json=ackId,proto3" json:"ack_id,omitempty"` DevicesThatChanged []string `protobuf:"bytes,4,rep,name=devices_that_changed,json=devicesThatChanged,proto3" json:"devices_that_changed,omitempty"` } func (x *ClusterUpdate) Reset() { *x = ClusterUpdate{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ClusterUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*ClusterUpdate) ProtoMessage() {} func (x *ClusterUpdate) ProtoReflect() protoreflect.Message { mi := &file_connect_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 ClusterUpdate.ProtoReflect.Descriptor instead. func (*ClusterUpdate) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{0} } func (x *ClusterUpdate) GetCluster() *Cluster { if x != nil { return x.Cluster } return nil } func (x *ClusterUpdate) GetUpdateReason() ClusterUpdateReason { if x != nil { return x.UpdateReason } return ClusterUpdateReason_UNKNOWN_CLUSTER_UPDATE_REASON } func (x *ClusterUpdate) GetAckId() string { if x != nil { return x.AckId } return "" } func (x *ClusterUpdate) GetDevicesThatChanged() []string { if x != nil { return x.DevicesThatChanged } return nil } type PostCommandResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields AckId string `protobuf:"bytes,1,opt,name=ack_id,json=ackId,proto3" json:"ack_id,omitempty"` } func (x *PostCommandResponse) Reset() { *x = PostCommandResponse{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PostCommandResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*PostCommandResponse) ProtoMessage() {} func (x *PostCommandResponse) ProtoReflect() protoreflect.Message { mi := &file_connect_proto_msgTypes[1] 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 PostCommandResponse.ProtoReflect.Descriptor instead. func (*PostCommandResponse) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{1} } func (x *PostCommandResponse) GetAckId() string { if x != nil { return x.AckId } return "" } type Device 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"` PlayerState *PlayerState `protobuf:"bytes,2,opt,name=player_state,json=playerState,proto3" json:"player_state,omitempty"` PrivateDeviceInfo *PrivateDeviceInfo `protobuf:"bytes,3,opt,name=private_device_info,json=privateDeviceInfo,proto3" json:"private_device_info,omitempty"` TransferData []byte `protobuf:"bytes,4,opt,name=transfer_data,json=transferData,proto3" json:"transfer_data,omitempty"` } func (x *Device) Reset() { *x = Device{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Device) String() string { return protoimpl.X.MessageStringOf(x) } func (*Device) ProtoMessage() {} func (x *Device) ProtoReflect() protoreflect.Message { mi := &file_connect_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 Device.ProtoReflect.Descriptor instead. func (*Device) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{2} } func (x *Device) GetDeviceInfo() *DeviceInfo { if x != nil { return x.DeviceInfo } return nil } func (x *Device) GetPlayerState() *PlayerState { if x != nil { return x.PlayerState } return nil } func (x *Device) GetPrivateDeviceInfo() *PrivateDeviceInfo { if x != nil { return x.PrivateDeviceInfo } return nil } func (x *Device) GetTransferData() []byte { if x != nil { return x.TransferData } return nil } type Cluster struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChangedTimestampMs int64 `protobuf:"varint,1,opt,name=changed_timestamp_ms,json=changedTimestampMs,proto3" json:"changed_timestamp_ms,omitempty"` ActiveDeviceId string `protobuf:"bytes,2,opt,name=active_device_id,json=activeDeviceId,proto3" json:"active_device_id,omitempty"` PlayerState *PlayerState `protobuf:"bytes,3,opt,name=player_state,json=playerState,proto3" json:"player_state,omitempty"` Device map[string]*DeviceInfo `protobuf:"bytes,4,rep,name=device,proto3" json:"device,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` TransferData []byte `protobuf:"bytes,5,opt,name=transfer_data,json=transferData,proto3" json:"transfer_data,omitempty"` TransferDataTimestamp uint64 `protobuf:"varint,6,opt,name=transfer_data_timestamp,json=transferDataTimestamp,proto3" json:"transfer_data_timestamp,omitempty"` NotPlayingSinceTimestamp int64 `protobuf:"varint,7,opt,name=not_playing_since_timestamp,json=notPlayingSinceTimestamp,proto3" json:"not_playing_since_timestamp,omitempty"` NeedFullPlayerState bool `protobuf:"varint,8,opt,name=need_full_player_state,json=needFullPlayerState,proto3" json:"need_full_player_state,omitempty"` ServerTimestampMs int64 `protobuf:"varint,9,opt,name=server_timestamp_ms,json=serverTimestampMs,proto3" json:"server_timestamp_ms,omitempty"` } func (x *Cluster) Reset() { *x = Cluster{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Cluster) String() string { return protoimpl.X.MessageStringOf(x) } func (*Cluster) ProtoMessage() {} func (x *Cluster) ProtoReflect() protoreflect.Message { mi := &file_connect_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 Cluster.ProtoReflect.Descriptor instead. func (*Cluster) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{3} } func (x *Cluster) GetChangedTimestampMs() int64 { if x != nil { return x.ChangedTimestampMs } return 0 } func (x *Cluster) GetActiveDeviceId() string { if x != nil { return x.ActiveDeviceId } return "" } func (x *Cluster) GetPlayerState() *PlayerState { if x != nil { return x.PlayerState } return nil } func (x *Cluster) GetDevice() map[string]*DeviceInfo { if x != nil { return x.Device } return nil } func (x *Cluster) GetTransferData() []byte { if x != nil { return x.TransferData } return nil } func (x *Cluster) GetTransferDataTimestamp() uint64 { if x != nil { return x.TransferDataTimestamp } return 0 } func (x *Cluster) GetNotPlayingSinceTimestamp() int64 { if x != nil { return x.NotPlayingSinceTimestamp } return 0 } func (x *Cluster) GetNeedFullPlayerState() bool { if x != nil { return x.NeedFullPlayerState } return false } func (x *Cluster) GetServerTimestampMs() int64 { if x != nil { return x.ServerTimestampMs } return 0 } type PutStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CallbackUrl string `protobuf:"bytes,1,opt,name=callback_url,json=callbackUrl,proto3" json:"callback_url,omitempty"` Device *Device `protobuf:"bytes,2,opt,name=device,proto3" json:"device,omitempty"` MemberType MemberType `protobuf:"varint,3,opt,name=member_type,json=memberType,proto3,enum=spotify.connectstate.MemberType" json:"member_type,omitempty"` IsActive bool `protobuf:"varint,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` PutStateReason PutStateReason `protobuf:"varint,5,opt,name=put_state_reason,json=putStateReason,proto3,enum=spotify.connectstate.PutStateReason" json:"put_state_reason,omitempty"` MessageId uint32 `protobuf:"varint,6,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` LastCommandSentByDeviceId string `protobuf:"bytes,7,opt,name=last_command_sent_by_device_id,json=lastCommandSentByDeviceId,proto3" json:"last_command_sent_by_device_id,omitempty"` LastCommandMessageId uint32 `protobuf:"varint,8,opt,name=last_command_message_id,json=lastCommandMessageId,proto3" json:"last_command_message_id,omitempty"` StartedPlayingAt uint64 `protobuf:"varint,9,opt,name=started_playing_at,json=startedPlayingAt,proto3" json:"started_playing_at,omitempty"` HasBeenPlayingForMs uint64 `protobuf:"varint,11,opt,name=has_been_playing_for_ms,json=hasBeenPlayingForMs,proto3" json:"has_been_playing_for_ms,omitempty"` ClientSideTimestamp uint64 `protobuf:"varint,12,opt,name=client_side_timestamp,json=clientSideTimestamp,proto3" json:"client_side_timestamp,omitempty"` OnlyWritePlayerState bool `protobuf:"varint,13,opt,name=only_write_player_state,json=onlyWritePlayerState,proto3" json:"only_write_player_state,omitempty"` } func (x *PutStateRequest) Reset() { *x = PutStateRequest{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PutStateRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*PutStateRequest) ProtoMessage() {} func (x *PutStateRequest) ProtoReflect() protoreflect.Message { mi := &file_connect_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 PutStateRequest.ProtoReflect.Descriptor instead. func (*PutStateRequest) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{4} } func (x *PutStateRequest) GetCallbackUrl() string { if x != nil { return x.CallbackUrl } return "" } func (x *PutStateRequest) GetDevice() *Device { if x != nil { return x.Device } return nil } func (x *PutStateRequest) GetMemberType() MemberType { if x != nil { return x.MemberType } return MemberType_SPIRC_V2 } func (x *PutStateRequest) GetIsActive() bool { if x != nil { return x.IsActive } return false } func (x *PutStateRequest) GetPutStateReason() PutStateReason { if x != nil { return x.PutStateReason } return PutStateReason_UNKNOWN_PUT_STATE_REASON } func (x *PutStateRequest) GetMessageId() uint32 { if x != nil { return x.MessageId } return 0 } func (x *PutStateRequest) GetLastCommandSentByDeviceId() string { if x != nil { return x.LastCommandSentByDeviceId } return "" } func (x *PutStateRequest) GetLastCommandMessageId() uint32 { if x != nil { return x.LastCommandMessageId } return 0 } func (x *PutStateRequest) GetStartedPlayingAt() uint64 { if x != nil { return x.StartedPlayingAt } return 0 } func (x *PutStateRequest) GetHasBeenPlayingForMs() uint64 { if x != nil { return x.HasBeenPlayingForMs } return 0 } func (x *PutStateRequest) GetClientSideTimestamp() uint64 { if x != nil { return x.ClientSideTimestamp } return 0 } func (x *PutStateRequest) GetOnlyWritePlayerState() bool { if x != nil { return x.OnlyWritePlayerState } return false } type PrivateDeviceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` } func (x *PrivateDeviceInfo) Reset() { *x = PrivateDeviceInfo{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PrivateDeviceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*PrivateDeviceInfo) ProtoMessage() {} func (x *PrivateDeviceInfo) ProtoReflect() protoreflect.Message { mi := &file_connect_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 PrivateDeviceInfo.ProtoReflect.Descriptor instead. func (*PrivateDeviceInfo) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{5} } func (x *PrivateDeviceInfo) GetPlatform() string { if x != nil { return x.Platform } return "" } type SubscribeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CallbackUrl string `protobuf:"bytes,1,opt,name=callback_url,json=callbackUrl,proto3" json:"callback_url,omitempty"` } func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_connect_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 SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{6} } func (x *SubscribeRequest) GetCallbackUrl() string { if x != nil { return x.CallbackUrl } return "" } type DeviceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CanPlay bool `protobuf:"varint,1,opt,name=can_play,json=canPlay,proto3" json:"can_play,omitempty"` Volume uint32 `protobuf:"varint,2,opt,name=volume,proto3" json:"volume,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` Capabilities *Capabilities `protobuf:"bytes,4,opt,name=capabilities,proto3" json:"capabilities,omitempty"` Metadata []*DeviceMetadata `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty"` DeviceSoftwareVersion string `protobuf:"bytes,6,opt,name=device_software_version,json=deviceSoftwareVersion,proto3" json:"device_software_version,omitempty"` DeviceType DeviceType `protobuf:"varint,7,opt,name=device_type,json=deviceType,proto3,enum=spotify.connectstate.devices.DeviceType" json:"device_type,omitempty"` SpircVersion string `protobuf:"bytes,9,opt,name=spirc_version,json=spircVersion,proto3" json:"spirc_version,omitempty"` DeviceId string `protobuf:"bytes,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` IsPrivateSession bool `protobuf:"varint,11,opt,name=is_private_session,json=isPrivateSession,proto3" json:"is_private_session,omitempty"` IsSocialConnect bool `protobuf:"varint,12,opt,name=is_social_connect,json=isSocialConnect,proto3" json:"is_social_connect,omitempty"` ClientId string `protobuf:"bytes,13,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` Brand string `protobuf:"bytes,14,opt,name=brand,proto3" json:"brand,omitempty"` Model string `protobuf:"bytes,15,opt,name=model,proto3" json:"model,omitempty"` MetadataMap map[string]string `protobuf:"bytes,16,rep,name=metadata_map,json=metadataMap,proto3" json:"metadata_map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` ProductId string `protobuf:"bytes,17,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` DeduplicationId string `protobuf:"bytes,18,opt,name=deduplication_id,json=deduplicationId,proto3" json:"deduplication_id,omitempty"` SelectedAliasId uint32 `protobuf:"varint,19,opt,name=selected_alias_id,json=selectedAliasId,proto3" json:"selected_alias_id,omitempty"` DeviceAliases map[uint32]*DeviceAlias `protobuf:"bytes,20,rep,name=device_aliases,json=deviceAliases,proto3" json:"device_aliases,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` IsOffline bool `protobuf:"varint,21,opt,name=is_offline,json=isOffline,proto3" json:"is_offline,omitempty"` PublicIp string `protobuf:"bytes,22,opt,name=public_ip,json=publicIp,proto3" json:"public_ip,omitempty"` License string `protobuf:"bytes,23,opt,name=license,proto3" json:"license,omitempty"` IsGroup bool `protobuf:"varint,25,opt,name=is_group,json=isGroup,proto3" json:"is_group,omitempty"` IsDynamicDevice bool `protobuf:"varint,26,opt,name=is_dynamic_device,json=isDynamicDevice,proto3" json:"is_dynamic_device,omitempty"` DisallowPlaybackReasons []string `protobuf:"bytes,27,rep,name=disallow_playback_reasons,json=disallowPlaybackReasons,proto3" json:"disallow_playback_reasons,omitempty"` DisallowTransferReasons []string `protobuf:"bytes,28,rep,name=disallow_transfer_reasons,json=disallowTransferReasons,proto3" json:"disallow_transfer_reasons,omitempty"` // Types that are assignable to XAudioOutputDeviceInfo: // // *DeviceInfo_AudioOutputDeviceInfo XAudioOutputDeviceInfo isDeviceInfo_XAudioOutputDeviceInfo `protobuf_oneof:"_audio_output_device_info"` } func (x *DeviceInfo) Reset() { *x = DeviceInfo{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceInfo) ProtoMessage() {} func (x *DeviceInfo) ProtoReflect() protoreflect.Message { mi := &file_connect_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 mi.MessageOf(x) } // Deprecated: Use DeviceInfo.ProtoReflect.Descriptor instead. func (*DeviceInfo) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{7} } func (x *DeviceInfo) GetCanPlay() bool { if x != nil { return x.CanPlay } return false } func (x *DeviceInfo) GetVolume() uint32 { if x != nil { return x.Volume } return 0 } func (x *DeviceInfo) GetName() string { if x != nil { return x.Name } return "" } func (x *DeviceInfo) GetCapabilities() *Capabilities { if x != nil { return x.Capabilities } return nil } func (x *DeviceInfo) GetMetadata() []*DeviceMetadata { if x != nil { return x.Metadata } return nil } func (x *DeviceInfo) GetDeviceSoftwareVersion() string { if x != nil { return x.DeviceSoftwareVersion } return "" } func (x *DeviceInfo) GetDeviceType() DeviceType { if x != nil { return x.DeviceType } return DeviceType_UNKNOWN } func (x *DeviceInfo) GetSpircVersion() string { if x != nil { return x.SpircVersion } return "" } func (x *DeviceInfo) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } func (x *DeviceInfo) GetIsPrivateSession() bool { if x != nil { return x.IsPrivateSession } return false } func (x *DeviceInfo) GetIsSocialConnect() bool { if x != nil { return x.IsSocialConnect } return false } func (x *DeviceInfo) GetClientId() string { if x != nil { return x.ClientId } return "" } func (x *DeviceInfo) GetBrand() string { if x != nil { return x.Brand } return "" } func (x *DeviceInfo) GetModel() string { if x != nil { return x.Model } return "" } func (x *DeviceInfo) GetMetadataMap() map[string]string { if x != nil { return x.MetadataMap } return nil } func (x *DeviceInfo) GetProductId() string { if x != nil { return x.ProductId } return "" } func (x *DeviceInfo) GetDeduplicationId() string { if x != nil { return x.DeduplicationId } return "" } func (x *DeviceInfo) GetSelectedAliasId() uint32 { if x != nil { return x.SelectedAliasId } return 0 } func (x *DeviceInfo) GetDeviceAliases() map[uint32]*DeviceAlias { if x != nil { return x.DeviceAliases } return nil } func (x *DeviceInfo) GetIsOffline() bool { if x != nil { return x.IsOffline } return false } func (x *DeviceInfo) GetPublicIp() string { if x != nil { return x.PublicIp } return "" } func (x *DeviceInfo) GetLicense() string { if x != nil { return x.License } return "" } func (x *DeviceInfo) GetIsGroup() bool { if x != nil { return x.IsGroup } return false } func (x *DeviceInfo) GetIsDynamicDevice() bool { if x != nil { return x.IsDynamicDevice } return false } func (x *DeviceInfo) GetDisallowPlaybackReasons() []string { if x != nil { return x.DisallowPlaybackReasons } return nil } func (x *DeviceInfo) GetDisallowTransferReasons() []string { if x != nil { return x.DisallowTransferReasons } return nil } func (m *DeviceInfo) GetXAudioOutputDeviceInfo() isDeviceInfo_XAudioOutputDeviceInfo { if m != nil { return m.XAudioOutputDeviceInfo } return nil } func (x *DeviceInfo) GetAudioOutputDeviceInfo() *AudioOutputDeviceInfo { if x, ok := x.GetXAudioOutputDeviceInfo().(*DeviceInfo_AudioOutputDeviceInfo); ok { return x.AudioOutputDeviceInfo } return nil } type isDeviceInfo_XAudioOutputDeviceInfo interface { isDeviceInfo_XAudioOutputDeviceInfo() } type DeviceInfo_AudioOutputDeviceInfo struct { AudioOutputDeviceInfo *AudioOutputDeviceInfo `protobuf:"bytes,24,opt,name=audio_output_device_info,json=audioOutputDeviceInfo,proto3,oneof"` } func (*DeviceInfo_AudioOutputDeviceInfo) isDeviceInfo_XAudioOutputDeviceInfo() {} type AudioOutputDeviceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to XAudioOutputDeviceType: // // *AudioOutputDeviceInfo_AudioOutputDeviceType XAudioOutputDeviceType isAudioOutputDeviceInfo_XAudioOutputDeviceType `protobuf_oneof:"_audio_output_device_type"` // Types that are assignable to XDeviceName: // // *AudioOutputDeviceInfo_DeviceName XDeviceName isAudioOutputDeviceInfo_XDeviceName `protobuf_oneof:"_device_name"` } func (x *AudioOutputDeviceInfo) Reset() { *x = AudioOutputDeviceInfo{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AudioOutputDeviceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*AudioOutputDeviceInfo) ProtoMessage() {} func (x *AudioOutputDeviceInfo) ProtoReflect() protoreflect.Message { mi := &file_connect_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 AudioOutputDeviceInfo.ProtoReflect.Descriptor instead. func (*AudioOutputDeviceInfo) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{8} } func (m *AudioOutputDeviceInfo) GetXAudioOutputDeviceType() isAudioOutputDeviceInfo_XAudioOutputDeviceType { if m != nil { return m.XAudioOutputDeviceType } return nil } func (x *AudioOutputDeviceInfo) GetAudioOutputDeviceType() AudioOutputDeviceType { if x, ok := x.GetXAudioOutputDeviceType().(*AudioOutputDeviceInfo_AudioOutputDeviceType); ok { return x.AudioOutputDeviceType } return AudioOutputDeviceType_UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE } func (m *AudioOutputDeviceInfo) GetXDeviceName() isAudioOutputDeviceInfo_XDeviceName { if m != nil { return m.XDeviceName } return nil } func (x *AudioOutputDeviceInfo) GetDeviceName() string { if x, ok := x.GetXDeviceName().(*AudioOutputDeviceInfo_DeviceName); ok { return x.DeviceName } return "" } type isAudioOutputDeviceInfo_XAudioOutputDeviceType interface { isAudioOutputDeviceInfo_XAudioOutputDeviceType() } type AudioOutputDeviceInfo_AudioOutputDeviceType struct { AudioOutputDeviceType AudioOutputDeviceType `protobuf:"varint,1,opt,name=audio_output_device_type,json=audioOutputDeviceType,proto3,enum=spotify.connectstate.AudioOutputDeviceType,oneof"` } func (*AudioOutputDeviceInfo_AudioOutputDeviceType) isAudioOutputDeviceInfo_XAudioOutputDeviceType() { } type isAudioOutputDeviceInfo_XDeviceName interface { isAudioOutputDeviceInfo_XDeviceName() } type AudioOutputDeviceInfo_DeviceName struct { DeviceName string `protobuf:"bytes,2,opt,name=device_name,json=deviceName,proto3,oneof"` } func (*AudioOutputDeviceInfo_DeviceName) isAudioOutputDeviceInfo_XDeviceName() {} // Deprecated: Do not use. type DeviceMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` Metadata string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *DeviceMetadata) Reset() { *x = DeviceMetadata{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceMetadata) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceMetadata) ProtoMessage() {} func (x *DeviceMetadata) ProtoReflect() protoreflect.Message { mi := &file_connect_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 DeviceMetadata.ProtoReflect.Descriptor instead. func (*DeviceMetadata) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{9} } func (x *DeviceMetadata) GetType() string { if x != nil { return x.Type } return "" } func (x *DeviceMetadata) GetMetadata() string { if x != nil { return x.Metadata } return "" } type Capabilities struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CanBePlayer bool `protobuf:"varint,2,opt,name=can_be_player,json=canBePlayer,proto3" json:"can_be_player,omitempty"` RestrictToLocal bool `protobuf:"varint,3,opt,name=restrict_to_local,json=restrictToLocal,proto3" json:"restrict_to_local,omitempty"` GaiaEqConnectId bool `protobuf:"varint,5,opt,name=gaia_eq_connect_id,json=gaiaEqConnectId,proto3" json:"gaia_eq_connect_id,omitempty"` SupportsLogout bool `protobuf:"varint,6,opt,name=supports_logout,json=supportsLogout,proto3" json:"supports_logout,omitempty"` IsObservable bool `protobuf:"varint,7,opt,name=is_observable,json=isObservable,proto3" json:"is_observable,omitempty"` VolumeSteps int32 `protobuf:"varint,8,opt,name=volume_steps,json=volumeSteps,proto3" json:"volume_steps,omitempty"` SupportedTypes []string `protobuf:"bytes,9,rep,name=supported_types,json=supportedTypes,proto3" json:"supported_types,omitempty"` CommandAcks bool `protobuf:"varint,10,opt,name=command_acks,json=commandAcks,proto3" json:"command_acks,omitempty"` SupportsRename bool `protobuf:"varint,11,opt,name=supports_rename,json=supportsRename,proto3" json:"supports_rename,omitempty"` Hidden bool `protobuf:"varint,12,opt,name=hidden,proto3" json:"hidden,omitempty"` DisableVolume bool `protobuf:"varint,13,opt,name=disable_volume,json=disableVolume,proto3" json:"disable_volume,omitempty"` ConnectDisabled bool `protobuf:"varint,14,opt,name=connect_disabled,json=connectDisabled,proto3" json:"connect_disabled,omitempty"` SupportsPlaylistV2 bool `protobuf:"varint,15,opt,name=supports_playlist_v2,json=supportsPlaylistV2,proto3" json:"supports_playlist_v2,omitempty"` IsControllable bool `protobuf:"varint,16,opt,name=is_controllable,json=isControllable,proto3" json:"is_controllable,omitempty"` SupportsExternalEpisodes bool `protobuf:"varint,17,opt,name=supports_external_episodes,json=supportsExternalEpisodes,proto3" json:"supports_external_episodes,omitempty"` SupportsSetBackendMetadata bool `protobuf:"varint,18,opt,name=supports_set_backend_metadata,json=supportsSetBackendMetadata,proto3" json:"supports_set_backend_metadata,omitempty"` SupportsTransferCommand bool `protobuf:"varint,19,opt,name=supports_transfer_command,json=supportsTransferCommand,proto3" json:"supports_transfer_command,omitempty"` SupportsCommandRequest bool `protobuf:"varint,20,opt,name=supports_command_request,json=supportsCommandRequest,proto3" json:"supports_command_request,omitempty"` IsVoiceEnabled bool `protobuf:"varint,21,opt,name=is_voice_enabled,json=isVoiceEnabled,proto3" json:"is_voice_enabled,omitempty"` NeedsFullPlayerState bool `protobuf:"varint,22,opt,name=needs_full_player_state,json=needsFullPlayerState,proto3" json:"needs_full_player_state,omitempty"` SupportsGzipPushes bool `protobuf:"varint,23,opt,name=supports_gzip_pushes,json=supportsGzipPushes,proto3" json:"supports_gzip_pushes,omitempty"` SupportsSetOptionsCommand bool `protobuf:"varint,25,opt,name=supports_set_options_command,json=supportsSetOptionsCommand,proto3" json:"supports_set_options_command,omitempty"` SupportsHifi *CapabilitySupportDetails `protobuf:"bytes,26,opt,name=supports_hifi,json=supportsHifi,proto3" json:"supports_hifi,omitempty"` ConnectCapabilities string `protobuf:"bytes,27,opt,name=connect_capabilities,json=connectCapabilities,proto3" json:"connect_capabilities,omitempty"` } func (x *Capabilities) Reset() { *x = Capabilities{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Capabilities) String() string { return protoimpl.X.MessageStringOf(x) } func (*Capabilities) ProtoMessage() {} func (x *Capabilities) ProtoReflect() protoreflect.Message { mi := &file_connect_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 Capabilities.ProtoReflect.Descriptor instead. func (*Capabilities) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{10} } func (x *Capabilities) GetCanBePlayer() bool { if x != nil { return x.CanBePlayer } return false } func (x *Capabilities) GetRestrictToLocal() bool { if x != nil { return x.RestrictToLocal } return false } func (x *Capabilities) GetGaiaEqConnectId() bool { if x != nil { return x.GaiaEqConnectId } return false } func (x *Capabilities) GetSupportsLogout() bool { if x != nil { return x.SupportsLogout } return false } func (x *Capabilities) GetIsObservable() bool { if x != nil { return x.IsObservable } return false } func (x *Capabilities) GetVolumeSteps() int32 { if x != nil { return x.VolumeSteps } return 0 } func (x *Capabilities) GetSupportedTypes() []string { if x != nil { return x.SupportedTypes } return nil } func (x *Capabilities) GetCommandAcks() bool { if x != nil { return x.CommandAcks } return false } func (x *Capabilities) GetSupportsRename() bool { if x != nil { return x.SupportsRename } return false } func (x *Capabilities) GetHidden() bool { if x != nil { return x.Hidden } return false } func (x *Capabilities) GetDisableVolume() bool { if x != nil { return x.DisableVolume } return false } func (x *Capabilities) GetConnectDisabled() bool { if x != nil { return x.ConnectDisabled } return false } func (x *Capabilities) GetSupportsPlaylistV2() bool { if x != nil { return x.SupportsPlaylistV2 } return false } func (x *Capabilities) GetIsControllable() bool { if x != nil { return x.IsControllable } return false } func (x *Capabilities) GetSupportsExternalEpisodes() bool { if x != nil { return x.SupportsExternalEpisodes } return false } func (x *Capabilities) GetSupportsSetBackendMetadata() bool { if x != nil { return x.SupportsSetBackendMetadata } return false } func (x *Capabilities) GetSupportsTransferCommand() bool { if x != nil { return x.SupportsTransferCommand } return false } func (x *Capabilities) GetSupportsCommandRequest() bool { if x != nil { return x.SupportsCommandRequest } return false } func (x *Capabilities) GetIsVoiceEnabled() bool { if x != nil { return x.IsVoiceEnabled } return false } func (x *Capabilities) GetNeedsFullPlayerState() bool { if x != nil { return x.NeedsFullPlayerState } return false } func (x *Capabilities) GetSupportsGzipPushes() bool { if x != nil { return x.SupportsGzipPushes } return false } func (x *Capabilities) GetSupportsSetOptionsCommand() bool { if x != nil { return x.SupportsSetOptionsCommand } return false } func (x *Capabilities) GetSupportsHifi() *CapabilitySupportDetails { if x != nil { return x.SupportsHifi } return nil } func (x *Capabilities) GetConnectCapabilities() string { if x != nil { return x.ConnectCapabilities } return "" } type CapabilitySupportDetails struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FullySupported bool `protobuf:"varint,1,opt,name=fully_supported,json=fullySupported,proto3" json:"fully_supported,omitempty"` UserEligible bool `protobuf:"varint,2,opt,name=user_eligible,json=userEligible,proto3" json:"user_eligible,omitempty"` DeviceSupported bool `protobuf:"varint,3,opt,name=device_supported,json=deviceSupported,proto3" json:"device_supported,omitempty"` } func (x *CapabilitySupportDetails) Reset() { *x = CapabilitySupportDetails{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CapabilitySupportDetails) String() string { return protoimpl.X.MessageStringOf(x) } func (*CapabilitySupportDetails) ProtoMessage() {} func (x *CapabilitySupportDetails) ProtoReflect() protoreflect.Message { mi := &file_connect_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 CapabilitySupportDetails.ProtoReflect.Descriptor instead. func (*CapabilitySupportDetails) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{11} } func (x *CapabilitySupportDetails) GetFullySupported() bool { if x != nil { return x.FullySupported } return false } func (x *CapabilitySupportDetails) GetUserEligible() bool { if x != nil { return x.UserEligible } return false } func (x *CapabilitySupportDetails) GetDeviceSupported() bool { if x != nil { return x.DeviceSupported } return false } type ConnectCommandOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields MessageId int32 `protobuf:"varint,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` TargetAliasId uint32 `protobuf:"varint,3,opt,name=target_alias_id,json=targetAliasId,proto3" json:"target_alias_id,omitempty"` } func (x *ConnectCommandOptions) Reset() { *x = ConnectCommandOptions{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ConnectCommandOptions) String() string { return protoimpl.X.MessageStringOf(x) } func (*ConnectCommandOptions) ProtoMessage() {} func (x *ConnectCommandOptions) ProtoReflect() protoreflect.Message { mi := &file_connect_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 ConnectCommandOptions.ProtoReflect.Descriptor instead. func (*ConnectCommandOptions) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{12} } func (x *ConnectCommandOptions) GetMessageId() int32 { if x != nil { return x.MessageId } return 0 } func (x *ConnectCommandOptions) GetTargetAliasId() uint32 { if x != nil { return x.TargetAliasId } return 0 } type LogoutCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CommandOptions *ConnectCommandOptions `protobuf:"bytes,1,opt,name=command_options,json=commandOptions,proto3" json:"command_options,omitempty"` } func (x *LogoutCommand) Reset() { *x = LogoutCommand{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LogoutCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*LogoutCommand) ProtoMessage() {} func (x *LogoutCommand) ProtoReflect() protoreflect.Message { mi := &file_connect_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 LogoutCommand.ProtoReflect.Descriptor instead. func (*LogoutCommand) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{13} } func (x *LogoutCommand) GetCommandOptions() *ConnectCommandOptions { if x != nil { return x.CommandOptions } return nil } type SetVolumeCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Volume int32 `protobuf:"varint,1,opt,name=volume,proto3" json:"volume,omitempty"` CommandOptions *ConnectCommandOptions `protobuf:"bytes,2,opt,name=command_options,json=commandOptions,proto3" json:"command_options,omitempty"` } func (x *SetVolumeCommand) Reset() { *x = SetVolumeCommand{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetVolumeCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetVolumeCommand) ProtoMessage() {} func (x *SetVolumeCommand) ProtoReflect() protoreflect.Message { mi := &file_connect_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 SetVolumeCommand.ProtoReflect.Descriptor instead. func (*SetVolumeCommand) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{14} } func (x *SetVolumeCommand) GetVolume() int32 { if x != nil { return x.Volume } return 0 } func (x *SetVolumeCommand) GetCommandOptions() *ConnectCommandOptions { if x != nil { return x.CommandOptions } return nil } type RenameCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields RenameTo string `protobuf:"bytes,1,opt,name=rename_to,json=renameTo,proto3" json:"rename_to,omitempty"` CommandOptions *ConnectCommandOptions `protobuf:"bytes,2,opt,name=command_options,json=commandOptions,proto3" json:"command_options,omitempty"` } func (x *RenameCommand) Reset() { *x = RenameCommand{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RenameCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*RenameCommand) ProtoMessage() {} func (x *RenameCommand) ProtoReflect() protoreflect.Message { mi := &file_connect_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 RenameCommand.ProtoReflect.Descriptor instead. func (*RenameCommand) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{15} } func (x *RenameCommand) GetRenameTo() string { if x != nil { return x.RenameTo } return "" } func (x *RenameCommand) GetCommandOptions() *ConnectCommandOptions { if x != nil { return x.CommandOptions } return nil } type ConnectPlayerCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields PlayerCommandJson string `protobuf:"bytes,1,opt,name=player_command_json,json=playerCommandJson,proto3" json:"player_command_json,omitempty"` CommandOptions *ConnectCommandOptions `protobuf:"bytes,2,opt,name=command_options,json=commandOptions,proto3" json:"command_options,omitempty"` } func (x *ConnectPlayerCommand) Reset() { *x = ConnectPlayerCommand{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ConnectPlayerCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*ConnectPlayerCommand) ProtoMessage() {} func (x *ConnectPlayerCommand) ProtoReflect() protoreflect.Message { mi := &file_connect_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 ConnectPlayerCommand.ProtoReflect.Descriptor instead. func (*ConnectPlayerCommand) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{16} } func (x *ConnectPlayerCommand) GetPlayerCommandJson() string { if x != nil { return x.PlayerCommandJson } return "" } func (x *ConnectPlayerCommand) GetCommandOptions() *ConnectCommandOptions { if x != nil { return x.CommandOptions } return nil } type SetBackendMetadataCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Metadata map[string]string `protobuf:"bytes,1,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *SetBackendMetadataCommand) Reset() { *x = SetBackendMetadataCommand{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetBackendMetadataCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetBackendMetadataCommand) ProtoMessage() {} func (x *SetBackendMetadataCommand) ProtoReflect() protoreflect.Message { mi := &file_connect_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 SetBackendMetadataCommand.ProtoReflect.Descriptor instead. func (*SetBackendMetadataCommand) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{17} } func (x *SetBackendMetadataCommand) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } type CommandAndSourceDevice struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"` SourceDeviceInfo *DeviceInfo `protobuf:"bytes,2,opt,name=source_device_info,json=sourceDeviceInfo,proto3" json:"source_device_info,omitempty"` } func (x *CommandAndSourceDevice) Reset() { *x = CommandAndSourceDevice{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CommandAndSourceDevice) String() string { return protoimpl.X.MessageStringOf(x) } func (*CommandAndSourceDevice) ProtoMessage() {} func (x *CommandAndSourceDevice) ProtoReflect() protoreflect.Message { mi := &file_connect_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 CommandAndSourceDevice.ProtoReflect.Descriptor instead. func (*CommandAndSourceDevice) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{18} } func (x *CommandAndSourceDevice) GetCommand() string { if x != nil { return x.Command } return "" } func (x *CommandAndSourceDevice) GetSourceDeviceInfo() *DeviceInfo { if x != nil { return x.SourceDeviceInfo } return nil } type ActiveDeviceUpdate 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"` } func (x *ActiveDeviceUpdate) Reset() { *x = ActiveDeviceUpdate{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ActiveDeviceUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*ActiveDeviceUpdate) ProtoMessage() {} func (x *ActiveDeviceUpdate) ProtoReflect() protoreflect.Message { mi := &file_connect_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 ActiveDeviceUpdate.ProtoReflect.Descriptor instead. func (*ActiveDeviceUpdate) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{19} } func (x *ActiveDeviceUpdate) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } type StartedPlayingEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields UserInfoHeader []byte `protobuf:"bytes,1,opt,name=user_info_header,json=userInfoHeader,proto3" json:"user_info_header,omitempty"` DeviceId string `protobuf:"bytes,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` } func (x *StartedPlayingEvent) Reset() { *x = StartedPlayingEvent{} if protoimpl.UnsafeEnabled { mi := &file_connect_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartedPlayingEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartedPlayingEvent) ProtoMessage() {} func (x *StartedPlayingEvent) ProtoReflect() protoreflect.Message { mi := &file_connect_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 StartedPlayingEvent.ProtoReflect.Descriptor instead. func (*StartedPlayingEvent) Descriptor() ([]byte, []int) { return file_connect_proto_rawDescGZIP(), []int{20} } func (x *StartedPlayingEvent) GetUserInfoHeader() []byte { if x != nil { return x.UserInfoHeader } return nil } func (x *StartedPlayingEvent) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } var File_connect_proto protoreflect.FileDescriptor var file_connect_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe1, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x2c, 0x0a, 0x13, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x22, 0x8f, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 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, 0x44, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0xcc, 0x04, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3d, 0x0a, 0x1b, 0x6e, 0x6f, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x16, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x1a, 0x5b, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x05, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x55, 0x72, 0x6c, 0x12, 0x34, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0e, 0x70, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x1e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x12, 0x34, 0x0a, 0x17, 0x68, 0x61, 0x73, 0x5f, 0x62, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x68, 0x61, 0x73, 0x42, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x46, 0x6f, 0x72, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x35, 0x0a, 0x17, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6f, 0x6e, 0x6c, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2f, 0x0a, 0x11, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x35, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x55, 0x72, 0x6c, 0x22, 0xb4, 0x0b, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x70, 0x69, 0x72, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x70, 0x69, 0x72, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x54, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x61, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x18, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x15, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6b, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xcf, 0x01, 0x0a, 0x15, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x66, 0x0a, 0x18, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x89, 0x09, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x61, 0x6e, 0x5f, 0x62, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x12, 0x67, 0x61, 0x69, 0x61, 0x5f, 0x65, 0x71, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x61, 0x69, 0x61, 0x45, 0x71, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x41, 0x63, 0x6b, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x19, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x67, 0x7a, 0x69, 0x70, 0x5f, 0x70, 0x75, 0x73, 0x68, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x47, 0x7a, 0x69, 0x70, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x53, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x68, 0x69, 0x66, 0x69, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x48, 0x69, 0x66, 0x69, 0x12, 0x31, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x5e, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x12, 0x54, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x59, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x12, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x31, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x22, 0x5c, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x2a, 0x7d, 0x0a, 0x15, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x53, 0x50, 0x45, 0x41, 0x4b, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x49, 0x52, 0x50, 0x4c, 0x41, 0x59, 0x10, 0x04, 0x2a, 0xca, 0x01, 0x0a, 0x0e, 0x50, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x50, 0x49, 0x52, 0x43, 0x5f, 0x48, 0x45, 0x4c, 0x4c, 0x4f, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x50, 0x49, 0x52, 0x43, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x57, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x45, 0x43, 0x41, 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x08, 0x2a, 0x82, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x50, 0x49, 0x52, 0x43, 0x5f, 0x56, 0x32, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x50, 0x49, 0x52, 0x43, 0x5f, 0x56, 0x33, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x07, 0x2a, 0xb9, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x50, 0x50, 0x45, 0x41, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4e, 0x45, 0x57, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x45, 0x41, 0x52, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xd4, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x50, 0x50, 0x45, 0x41, 0x52, 0x45, 0x44, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x50, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x10, 0x07, 0x42, 0x45, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x48, 0x02, 0x5a, 0x21, 0x74, 0x75, 0x78, 0x70, 0x61, 0x2e, 0x69, 0x6e, 0x2f, 0x61, 0x2f, 0x67, 0x6f, 0x70, 0x6c, 0x61, 0x79, 0x64, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x70, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_connect_proto_rawDescOnce sync.Once file_connect_proto_rawDescData = file_connect_proto_rawDesc ) func file_connect_proto_rawDescGZIP() []byte { file_connect_proto_rawDescOnce.Do(func() { file_connect_proto_rawDescData = protoimpl.X.CompressGZIP(file_connect_proto_rawDescData) }) return file_connect_proto_rawDescData } var file_connect_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_connect_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_connect_proto_goTypes = []interface{}{ (AudioOutputDeviceType)(0), // 0: spotify.connectstate.AudioOutputDeviceType (PutStateReason)(0), // 1: spotify.connectstate.PutStateReason (MemberType)(0), // 2: spotify.connectstate.MemberType (ClusterUpdateReason)(0), // 3: spotify.connectstate.ClusterUpdateReason (SendCommandResult)(0), // 4: spotify.connectstate.SendCommandResult (*ClusterUpdate)(nil), // 5: spotify.connectstate.ClusterUpdate (*PostCommandResponse)(nil), // 6: spotify.connectstate.PostCommandResponse (*Device)(nil), // 7: spotify.connectstate.Device (*Cluster)(nil), // 8: spotify.connectstate.Cluster (*PutStateRequest)(nil), // 9: spotify.connectstate.PutStateRequest (*PrivateDeviceInfo)(nil), // 10: spotify.connectstate.PrivateDeviceInfo (*SubscribeRequest)(nil), // 11: spotify.connectstate.SubscribeRequest (*DeviceInfo)(nil), // 12: spotify.connectstate.DeviceInfo (*AudioOutputDeviceInfo)(nil), // 13: spotify.connectstate.AudioOutputDeviceInfo (*DeviceMetadata)(nil), // 14: spotify.connectstate.DeviceMetadata (*Capabilities)(nil), // 15: spotify.connectstate.Capabilities (*CapabilitySupportDetails)(nil), // 16: spotify.connectstate.CapabilitySupportDetails (*ConnectCommandOptions)(nil), // 17: spotify.connectstate.ConnectCommandOptions (*LogoutCommand)(nil), // 18: spotify.connectstate.LogoutCommand (*SetVolumeCommand)(nil), // 19: spotify.connectstate.SetVolumeCommand (*RenameCommand)(nil), // 20: spotify.connectstate.RenameCommand (*ConnectPlayerCommand)(nil), // 21: spotify.connectstate.ConnectPlayerCommand (*SetBackendMetadataCommand)(nil), // 22: spotify.connectstate.SetBackendMetadataCommand (*CommandAndSourceDevice)(nil), // 23: spotify.connectstate.CommandAndSourceDevice (*ActiveDeviceUpdate)(nil), // 24: spotify.connectstate.ActiveDeviceUpdate (*StartedPlayingEvent)(nil), // 25: spotify.connectstate.StartedPlayingEvent nil, // 26: spotify.connectstate.Cluster.DeviceEntry nil, // 27: spotify.connectstate.DeviceInfo.MetadataMapEntry nil, // 28: spotify.connectstate.DeviceInfo.DeviceAliasesEntry nil, // 29: spotify.connectstate.SetBackendMetadataCommand.MetadataEntry (*PlayerState)(nil), // 30: spotify.connectstate.PlayerState (DeviceType)(0), // 31: spotify.connectstate.devices.DeviceType (*DeviceAlias)(nil), // 32: spotify.connectstate.devices.DeviceAlias } var file_connect_proto_depIdxs = []int32{ 8, // 0: spotify.connectstate.ClusterUpdate.cluster:type_name -> spotify.connectstate.Cluster 3, // 1: spotify.connectstate.ClusterUpdate.update_reason:type_name -> spotify.connectstate.ClusterUpdateReason 12, // 2: spotify.connectstate.Device.device_info:type_name -> spotify.connectstate.DeviceInfo 30, // 3: spotify.connectstate.Device.player_state:type_name -> spotify.connectstate.PlayerState 10, // 4: spotify.connectstate.Device.private_device_info:type_name -> spotify.connectstate.PrivateDeviceInfo 30, // 5: spotify.connectstate.Cluster.player_state:type_name -> spotify.connectstate.PlayerState 26, // 6: spotify.connectstate.Cluster.device:type_name -> spotify.connectstate.Cluster.DeviceEntry 7, // 7: spotify.connectstate.PutStateRequest.device:type_name -> spotify.connectstate.Device 2, // 8: spotify.connectstate.PutStateRequest.member_type:type_name -> spotify.connectstate.MemberType 1, // 9: spotify.connectstate.PutStateRequest.put_state_reason:type_name -> spotify.connectstate.PutStateReason 15, // 10: spotify.connectstate.DeviceInfo.capabilities:type_name -> spotify.connectstate.Capabilities 14, // 11: spotify.connectstate.DeviceInfo.metadata:type_name -> spotify.connectstate.DeviceMetadata 31, // 12: spotify.connectstate.DeviceInfo.device_type:type_name -> spotify.connectstate.devices.DeviceType 27, // 13: spotify.connectstate.DeviceInfo.metadata_map:type_name -> spotify.connectstate.DeviceInfo.MetadataMapEntry 28, // 14: spotify.connectstate.DeviceInfo.device_aliases:type_name -> spotify.connectstate.DeviceInfo.DeviceAliasesEntry 13, // 15: spotify.connectstate.DeviceInfo.audio_output_device_info:type_name -> spotify.connectstate.AudioOutputDeviceInfo 0, // 16: spotify.connectstate.AudioOutputDeviceInfo.audio_output_device_type:type_name -> spotify.connectstate.AudioOutputDeviceType 16, // 17: spotify.connectstate.Capabilities.supports_hifi:type_name -> spotify.connectstate.CapabilitySupportDetails 17, // 18: spotify.connectstate.LogoutCommand.command_options:type_name -> spotify.connectstate.ConnectCommandOptions 17, // 19: spotify.connectstate.SetVolumeCommand.command_options:type_name -> spotify.connectstate.ConnectCommandOptions 17, // 20: spotify.connectstate.RenameCommand.command_options:type_name -> spotify.connectstate.ConnectCommandOptions 17, // 21: spotify.connectstate.ConnectPlayerCommand.command_options:type_name -> spotify.connectstate.ConnectCommandOptions 29, // 22: spotify.connectstate.SetBackendMetadataCommand.metadata:type_name -> spotify.connectstate.SetBackendMetadataCommand.MetadataEntry 12, // 23: spotify.connectstate.CommandAndSourceDevice.source_device_info:type_name -> spotify.connectstate.DeviceInfo 12, // 24: spotify.connectstate.Cluster.DeviceEntry.value:type_name -> spotify.connectstate.DeviceInfo 32, // 25: spotify.connectstate.DeviceInfo.DeviceAliasesEntry.value:type_name -> spotify.connectstate.devices.DeviceAlias 26, // [26:26] is the sub-list for method output_type 26, // [26:26] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name 26, // [26:26] is the sub-list for extension extendee 0, // [0:26] is the sub-list for field type_name } func init() { file_connect_proto_init() } func file_connect_proto_init() { if File_connect_proto != nil { return } file_player_proto_init() file_devices_proto_init() if !protoimpl.UnsafeEnabled { file_connect_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PostCommandResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Device); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cluster); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PutStateRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrivateDeviceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AudioOutputDeviceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceMetadata); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Capabilities); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CapabilitySupportDetails); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnectCommandOptions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogoutCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetVolumeCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenameCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnectPlayerCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetBackendMetadataCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommandAndSourceDevice); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ActiveDeviceUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_connect_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartedPlayingEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_connect_proto_msgTypes[7].OneofWrappers = []interface{}{ (*DeviceInfo_AudioOutputDeviceInfo)(nil), } file_connect_proto_msgTypes[8].OneofWrappers = []interface{}{ (*AudioOutputDeviceInfo_AudioOutputDeviceType)(nil), (*AudioOutputDeviceInfo_DeviceName)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_connect_proto_rawDesc, NumEnums: 5, NumMessages: 25, NumExtensions: 0, NumServices: 0, }, GoTypes: file_connect_proto_goTypes, DependencyIndexes: file_connect_proto_depIdxs, EnumInfos: file_connect_proto_enumTypes, MessageInfos: file_connect_proto_msgTypes, }.Build() File_connect_proto = out.File file_connect_proto_rawDesc = nil file_connect_proto_goTypes = nil file_connect_proto_depIdxs = nil }