From 3e68d1801a4ef6157fcf88aefaab634a72aa12d6 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Thu, 29 Aug 2024 19:45:45 -0400 Subject: [PATCH 01/15] chat,user: initial plumbing for pay-to-chat --- proto/chat/v2/chat_service.proto | 63 ++++++++++++++++++++++------ proto/user/v1/identity_service.proto | 22 +++++++++- 2 files changed, 72 insertions(+), 13 deletions(-) diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 780565d..ba99e6d 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -203,31 +203,70 @@ message StartChatRequest { oneof parameters { option (validate.required) = true; - StartTipChatParameters tip_chat = 3; + StartTwoWayChatParameters two_way_chat = 3; // GroupChatParameters group_chat = 4; } } -// Starts a two-way chat between a tipper and tippee. Chat members are -// inferred from the 12 word public keys involved in the intent. Only -// the tippee can start the chat, and the tipper is anonymous if this -// is the first between the involved Code users. -message StartTipChatParameters { - // The tip's intent ID, which can be extracted from the reference in - // an ExchangeDataContent message content where the verb is RECEIVED_TIP. - common.v1.IntentId intent_id = 1 [(validate.rules).message.required = true]; +// StartTwoWayChatParameters contains the parameters required to start +// or recover a two way chat between the caller and the specified 'other_user'. +// +// The 'other_user' is currently the 'tip_address', normally retrieved from +// user.Identity.GetTwitterUser(username). +message StartTwoWayChatParameters { + common.v1.SolanaAccountId other_user = 1 [(validate.rules).message.required = true]; + + oneof payment { + option (validate.required) = true; + + // A previous intent with data that indicates the intent was for establishing + // the chat/friendship. + // + // In cases where a friendship has already been established, it can be grabbed + // from the respective users profile RPCs. For example, user.Identity.GetTwitterUser(). + common.v1.IntentId intent_id = 2; + + // The intent that the server should submit to the transaction service. + // + // Clients should not submit this on their own, in order for server to help + // facilitate distributed transactions. + // + // If no intent has been submitted for this relationship, or the previous intents + // failed, the intent will be submitted. + // + // Otherwise, the intent will not be submitted. Read another way, if the relationship + // was already confirmed, or is pending confirmation, the intent will not be submitted. + transaction.v2.SubmitIntentRequest intent_to_submit = 3; + } } message StartChatResponse { Result result = 1; enum Result { - OK = 0; - DENIED = 1; + OK = 0; + + // DENIED indicates the caller is not allowed to start/join the chat. + DENIED = 1; + + // INVALID_PRAMETER indicates one of the parameters is invalid. INVALID_PARAMETER = 2; + + // PENDING indicates that an intent (not necessarily the provided one) is + // pending confirmation before the service will create the chat. This can + // happen in cases of retry, or if the blockchain confirmation is being + // particularly slow. + PENDING = 3; } - // The chat to use if the RPC was successful + // The chat to use if the RPC was successful. ChatMetadata chat = 2; + + // If result == PENDING_INTENT, pending_intent_id contains the intent that + // the server is waiting on before proceeding with chat creation. + // + // The server may return this instead of OK if the blockchain has accepted + // the transaction, but is taking an unsually long time to confirm. + common.v1.IntentId pending_intent_id = 3; } message SendMessageRequest { diff --git a/proto/user/v1/identity_service.proto b/proto/user/v1/identity_service.proto index e6cc57b..ff29368 100644 --- a/proto/user/v1/identity_service.proto +++ b/proto/user/v1/identity_service.proto @@ -291,6 +291,11 @@ message GetTwitterUserRequest { // The tip address to query against common.v1.SolanaAccountId tip_address = 2; } + + // An optional set of authentication information that allows for more + // information to be returned in the request. + common.v1.SolanaAccountId requestor = 10; + common.v1.Signature signature = 11; } message GetTwitterUserResponse { @@ -335,6 +340,8 @@ message PhoneMetadata { message TwitterUser { // Public key for a token account where tips are routed + // + // TODO(tip_rename): Candidate for renaming to something more generic. common.v1.SolanaAccountId tip_address = 1 [(validate.rules).message.required = true]; // The user's username on Twitter @@ -365,5 +372,18 @@ message TwitterUser { } // The number of followers the user has on Twitter - uint32 follower_count = 6; + uint32 follower_count = 6; + + // =========================================================== + // The rest of the fields require authentication to be present. + // =========================================================== + + // If a friendship has already been established with the user, + // then the following IntentId is the intent that unlocked it. + // + // This ID can be used directly with StartChat() if no other + // chats with the user exists. While this isn't required for + // deduplication on StartChat(), it can help circumvent a lot + // of the flow. + common.v1.IntentId friendship_intent_id = 10; } From 55461c98daa62393fa13c9b7ebd6b6cd5f9de0f9 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 11:57:32 -0400 Subject: [PATCH 02/15] chat/v2: keep chat isolated from transaction work. --- proto/chat/v2/chat_service.proto | 48 +++++++++------------------- proto/user/v1/identity_service.proto | 10 ++---- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index ba99e6d..2bfad6c 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -214,30 +214,20 @@ message StartChatRequest { // The 'other_user' is currently the 'tip_address', normally retrieved from // user.Identity.GetTwitterUser(username). message StartTwoWayChatParameters { + // The account id of the user the caller wishes to chat with. + // + // This will be the `tip` (or equivalent) address. common.v1.SolanaAccountId other_user = 1 [(validate.rules).message.required = true]; - oneof payment { - option (validate.required) = true; - - // A previous intent with data that indicates the intent was for establishing - // the chat/friendship. - // - // In cases where a friendship has already been established, it can be grabbed - // from the respective users profile RPCs. For example, user.Identity.GetTwitterUser(). - common.v1.IntentId intent_id = 2; - - // The intent that the server should submit to the transaction service. - // - // Clients should not submit this on their own, in order for server to help - // facilitate distributed transactions. - // - // If no intent has been submitted for this relationship, or the previous intents - // failed, the intent will be submitted. - // - // Otherwise, the intent will not be submitted. Read another way, if the relationship - // was already confirmed, or is pending confirmation, the intent will not be submitted. - transaction.v2.SubmitIntentRequest intent_to_submit = 3; - } + // The intent_id of the payment that initiated the chat/friendship. + // + // This field is optional. It is used as an optimization when the server has not + // yet observed the establishment of a friendship. In this case, the server will + // use the provided intent_id to verify the friendship. + // + // This is most likely to occur when initiating a chat with a user for the first + // time. + common.v1.IntentId intent_id = 2; } message StartChatResponse { @@ -251,22 +241,14 @@ message StartChatResponse { // INVALID_PRAMETER indicates one of the parameters is invalid. INVALID_PARAMETER = 2; - // PENDING indicates that an intent (not necessarily the provided one) is - // pending confirmation before the service will create the chat. This can - // happen in cases of retry, or if the blockchain confirmation is being - // particularly slow. + // PENDING indicates that the payment (for chat) intent is pending confirmation + // before the service will permit the creation of the chat. This can happen in + // cases where the block chain is particularly slow (beyond our RPC timeouts). PENDING = 3; } // The chat to use if the RPC was successful. ChatMetadata chat = 2; - - // If result == PENDING_INTENT, pending_intent_id contains the intent that - // the server is waiting on before proceeding with chat creation. - // - // The server may return this instead of OK if the blockchain has accepted - // the transaction, but is taking an unsually long time to confirm. - common.v1.IntentId pending_intent_id = 3; } message SendMessageRequest { diff --git a/proto/user/v1/identity_service.proto b/proto/user/v1/identity_service.proto index ff29368..6d1119b 100644 --- a/proto/user/v1/identity_service.proto +++ b/proto/user/v1/identity_service.proto @@ -378,12 +378,6 @@ message TwitterUser { // The rest of the fields require authentication to be present. // =========================================================== - // If a friendship has already been established with the user, - // then the following IntentId is the intent that unlocked it. - // - // This ID can be used directly with StartChat() if no other - // chats with the user exists. While this isn't required for - // deduplication on StartChat(), it can help circumvent a lot - // of the flow. - common.v1.IntentId friendship_intent_id = 10; + // Indicates the user is a friend of the caller. + bool is_friend = 10; } From 5933fe04bc2eedcd91b2415643737148ee9c3c11 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 12:09:48 -0400 Subject: [PATCH 03/15] user: add friendship cost --- proto/user/v1/identity_service.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/proto/user/v1/identity_service.proto b/proto/user/v1/identity_service.proto index 6d1119b..2eb36ae 100644 --- a/proto/user/v1/identity_service.proto +++ b/proto/user/v1/identity_service.proto @@ -374,6 +374,12 @@ message TwitterUser { // The number of followers the user has on Twitter uint32 follower_count = 6; + // The cost of establishing the friendship (regardless if caller is a friend). + // + // This should not be cached for an extended period, as exchange rate / value + // may change at any time. + transaction.v2.ExchangeData friendship_cost = 7; + // =========================================================== // The rest of the fields require authentication to be present. // =========================================================== From b6b77a17bed2d010ec1b90cc9fe98b8a16bc6e83 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 13:35:18 -0400 Subject: [PATCH 04/15] generated: generate protos --- generated/go/chat/v2/chat_service.pb.go | 1210 +++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 54 +- generated/go/user/v1/identity_service.pb.go | 317 +++-- .../user/v1/identity_service.pb.validate.go | 32 + .../protobuf-es/chat/v2/chat_service_pb.ts | 81 +- .../user/v1/identity_service_pb.ts | 38 +- 6 files changed, 966 insertions(+), 766 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index b0ec389..080f1f7 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -410,9 +410,15 @@ func (ChatStreamEventError_Code) EnumDescriptor() ([]byte, []int) { type StartChatResponse_Result int32 const ( - StartChatResponse_OK StartChatResponse_Result = 0 - StartChatResponse_DENIED StartChatResponse_Result = 1 + StartChatResponse_OK StartChatResponse_Result = 0 + // DENIED indicates the caller is not allowed to start/join the chat. + StartChatResponse_DENIED StartChatResponse_Result = 1 + // INVALID_PRAMETER indicates one of the parameters is invalid. StartChatResponse_INVALID_PARAMETER StartChatResponse_Result = 2 + // PENDING indicates that the payment (for chat) intent is pending confirmation + // before the service will permit the creation of the chat. This can happen in + // cases where the block chain is particularly slow (beyond our RPC timeouts). + StartChatResponse_PENDING StartChatResponse_Result = 3 ) // Enum value maps for StartChatResponse_Result. @@ -421,11 +427,13 @@ var ( 0: "OK", 1: "DENIED", 2: "INVALID_PARAMETER", + 3: "PENDING", } StartChatResponse_Result_value = map[string]int32{ "OK": 0, "DENIED": 1, "INVALID_PARAMETER": 2, + "PENDING": 3, } ) @@ -1576,7 +1584,7 @@ type StartChatRequest struct { Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` // Types that are assignable to Parameters: // - // *StartChatRequest_TipChat + // *StartChatRequest_TwoWayChat Parameters isStartChatRequest_Parameters `protobuf_oneof:"parameters"` } @@ -1633,9 +1641,9 @@ func (m *StartChatRequest) GetParameters() isStartChatRequest_Parameters { return nil } -func (x *StartChatRequest) GetTipChat() *StartTipChatParameters { - if x, ok := x.GetParameters().(*StartChatRequest_TipChat); ok { - return x.TipChat +func (x *StartChatRequest) GetTwoWayChat() *StartTwoWayChatParameters { + if x, ok := x.GetParameters().(*StartChatRequest_TwoWayChat); ok { + return x.TwoWayChat } return nil } @@ -1644,28 +1652,39 @@ type isStartChatRequest_Parameters interface { isStartChatRequest_Parameters() } -type StartChatRequest_TipChat struct { - TipChat *StartTipChatParameters `protobuf:"bytes,3,opt,name=tip_chat,json=tipChat,proto3,oneof"` // GroupChatParameters group_chat = 4; +type StartChatRequest_TwoWayChat struct { + TwoWayChat *StartTwoWayChatParameters `protobuf:"bytes,3,opt,name=two_way_chat,json=twoWayChat,proto3,oneof"` // GroupChatParameters group_chat = 4; } -func (*StartChatRequest_TipChat) isStartChatRequest_Parameters() {} +func (*StartChatRequest_TwoWayChat) isStartChatRequest_Parameters() {} -// Starts a two-way chat between a tipper and tippee. Chat members are -// inferred from the 12 word public keys involved in the intent. Only -// the tippee can start the chat, and the tipper is anonymous if this -// is the first between the involved Code users. -type StartTipChatParameters struct { +// StartTwoWayChatParameters contains the parameters required to start +// or recover a two way chat between the caller and the specified 'other_user'. +// +// The 'other_user' is currently the 'tip_address', normally retrieved from +// user.Identity.GetTwitterUser(username). +type StartTwoWayChatParameters struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The tip's intent ID, which can be extracted from the reference in - // an ExchangeDataContent message content where the verb is RECEIVED_TIP. - IntentId *v1.IntentId `protobuf:"bytes,1,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` + // The account id of the user the caller wishes to chat with. + // + // This will be the `tip` (or equivalent) address. + OtherUser *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=other_user,json=otherUser,proto3" json:"other_user,omitempty"` + // The intent_id of the payment that initiated the chat/friendship. + // + // This field is optional. It is used as an optimization when the server has not + // yet observed the establishment of a friendship. In this case, the server will + // use the provided intent_id to verify the friendship. + // + // This is most likely to occur when initiating a chat with a user for the first + // time. + IntentId *v1.IntentId `protobuf:"bytes,2,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` } -func (x *StartTipChatParameters) Reset() { - *x = StartTipChatParameters{} +func (x *StartTwoWayChatParameters) Reset() { + *x = StartTwoWayChatParameters{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1673,13 +1692,13 @@ func (x *StartTipChatParameters) Reset() { } } -func (x *StartTipChatParameters) String() string { +func (x *StartTwoWayChatParameters) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StartTipChatParameters) ProtoMessage() {} +func (*StartTwoWayChatParameters) ProtoMessage() {} -func (x *StartTipChatParameters) ProtoReflect() protoreflect.Message { +func (x *StartTwoWayChatParameters) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1691,12 +1710,19 @@ func (x *StartTipChatParameters) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StartTipChatParameters.ProtoReflect.Descriptor instead. -func (*StartTipChatParameters) Descriptor() ([]byte, []int) { +// Deprecated: Use StartTwoWayChatParameters.ProtoReflect.Descriptor instead. +func (*StartTwoWayChatParameters) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} } -func (x *StartTipChatParameters) GetIntentId() *v1.IntentId { +func (x *StartTwoWayChatParameters) GetOtherUser() *v1.SolanaAccountId { + if x != nil { + return x.OtherUser + } + return nil +} + +func (x *StartTwoWayChatParameters) GetIntentId() *v1.IntentId { if x != nil { return x.IntentId } @@ -1709,7 +1735,7 @@ type StartChatResponse struct { unknownFields protoimpl.UnknownFields Result StartChatResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.StartChatResponse_Result" json:"result,omitempty"` - // The chat to use if the RPC was successful + // The chat to use if the RPC was successful. Chat *ChatMetadata `protobuf:"bytes,2,opt,name=chat,proto3" json:"chat,omitempty"` } @@ -3895,7 +3921,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xf2, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, @@ -3905,111 +3931,151 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x74, 0x69, 0x70, 0x5f, 0x63, 0x68, 0x61, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x70, 0x43, - 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, - 0x07, 0x74, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x5b, 0x0a, - 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x11, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, - 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, - 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, - 0x54, 0x45, 0x52, 0x10, 0x02, 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, 0x79, + 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, + 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, + 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, + 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x40, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, + 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, + 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, + 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, + 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, + 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x10, 0x04, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, - 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, + 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, + 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x04, 0x22, 0xeb, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, - 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, - 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, - 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xeb, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, - 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, + 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, + 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, @@ -4018,63 +4084,60 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, - 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, - 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, - 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, - 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, - 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, - 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xcc, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, + 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, + 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, + 0x03, 0x22, 0xcc, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, + 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, + 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, + 0x42, 0x45, 0x10, 0x03, 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, + 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, @@ -4083,324 +4146,292 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, - 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, - 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, - 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, + 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdb, + 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, + 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, - 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, - 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, - 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, - 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, - 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, - 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, - 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, - 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, - 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, - 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, - 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, - 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, - 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, - 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, - 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, - 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, - 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, - 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, - 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, - 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, - 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, - 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, - 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, - 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, - 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, - 0x01, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, - 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, + 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, + 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, + 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, + 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, + 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, - 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, - 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, - 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, - 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, - 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, + 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, + 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb3, 0x01, + 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, + 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, + 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, + 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, + 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, + 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, + 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, + 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, + 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, + 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, + 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, + 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, + 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, + 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, + 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, + 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, + 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, + 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, + 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, + 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, + 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, + 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, + 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, + 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, + 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, + 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, + 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, + 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, + 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, + 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, + 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, + 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, + 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, + 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, - 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, + 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, + 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, - 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, - 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, - 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, + 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, + 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, + 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4445,7 +4476,7 @@ var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (*StreamChatEventsRequest)(nil), // 24: code.chat.v2.StreamChatEventsRequest (*StreamChatEventsResponse)(nil), // 25: code.chat.v2.StreamChatEventsResponse (*StartChatRequest)(nil), // 26: code.chat.v2.StartChatRequest - (*StartTipChatParameters)(nil), // 27: code.chat.v2.StartTipChatParameters + (*StartTwoWayChatParameters)(nil), // 27: code.chat.v2.StartTwoWayChatParameters (*StartChatResponse)(nil), // 28: code.chat.v2.StartChatResponse (*SendMessageRequest)(nil), // 29: code.chat.v2.SendMessageRequest (*SendMessageResponse)(nil), // 30: code.chat.v2.SendMessageResponse @@ -4516,101 +4547,102 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 23, // 27: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError 57, // 28: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId 58, // 29: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 27, // 30: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters - 62, // 31: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId - 8, // 32: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 43, // 33: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 59, // 34: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 35: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 48, // 36: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 57, // 37: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 38: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 39: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 44, // 40: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 41: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId - 47, // 42: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 57, // 43: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 44: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 45: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 59, // 46: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 47: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 48: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity - 57, // 49: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 50: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 11, // 51: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 44, // 52: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 53: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 54: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 55: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 56: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 57: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 59, // 58: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 59: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 60: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 61: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 62: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 59, // 63: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 64: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 65: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 66: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature - 14, // 67: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result - 59, // 68: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId - 0, // 69: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType - 45, // 70: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 55, // 71: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 41, // 72: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 42, // 73: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 48, // 74: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 63, // 75: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 55, // 76: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 42, // 77: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 78: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 47, // 79: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 80: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 81: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType - 41, // 82: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 42, // 83: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 49, // 84: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 50, // 85: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 51, // 86: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 52, // 87: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 53, // 88: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 54, // 89: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 15, // 90: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 64, // 91: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 65, // 92: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 62, // 93: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 58, // 94: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 57, // 95: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 62, // 96: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 42, // 97: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 98: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity - 42, // 99: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId - 16, // 100: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 18, // 101: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 24, // 102: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 26, // 103: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 29, // 104: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 31, // 105: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 33, // 106: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 35, // 107: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 37, // 108: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 39, // 109: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 17, // 110: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 19, // 111: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 25, // 112: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 28, // 113: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 30, // 114: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 32, // 115: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 34, // 116: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 36, // 117: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 38, // 118: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 40, // 119: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 110, // [110:120] is the sub-list for method output_type - 100, // [100:110] is the sub-list for method input_type - 100, // [100:100] is the sub-list for extension type_name - 100, // [100:100] is the sub-list for extension extendee - 0, // [0:100] is the sub-list for field type_name + 27, // 30: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters + 57, // 31: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId + 62, // 32: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 33: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 43, // 34: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 59, // 35: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 36: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 48, // 37: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 57, // 38: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 39: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 40: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 44, // 41: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 42: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId + 47, // 43: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 57, // 44: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 45: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 46: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 59, // 47: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 48: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 49: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 57, // 50: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 51: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 11, // 52: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 44, // 53: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 54: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 55: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 56: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 57: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 58: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 59, // 59: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 60: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 61: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 62: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 63: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 59, // 64: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 65: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 66: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 67: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature + 14, // 68: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result + 59, // 69: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId + 0, // 70: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType + 45, // 71: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 55, // 72: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 41, // 73: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 42, // 74: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 48, // 75: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 63, // 76: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 55, // 77: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 42, // 78: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 79: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 47, // 80: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 81: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 82: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 41, // 83: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 42, // 84: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 49, // 85: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 50, // 86: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 51, // 87: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 52, // 88: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 53, // 89: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 54, // 90: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 15, // 91: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 64, // 92: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 65, // 93: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 62, // 94: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 58, // 95: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 57, // 96: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 62, // 97: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 42, // 98: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 99: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 42, // 100: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId + 16, // 101: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 18, // 102: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 24, // 103: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 26, // 104: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 29, // 105: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 31, // 106: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 33, // 107: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 35, // 108: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 37, // 109: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 39, // 110: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 17, // 111: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 19, // 112: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 25, // 113: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 28, // 114: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 30, // 115: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 32, // 116: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 34, // 117: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 36, // 118: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 38, // 119: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 40, // 120: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 111, // [111:121] is the sub-list for method output_type + 101, // [101:111] is the sub-list for method input_type + 101, // [101:101] is the sub-list for extension type_name + 101, // [101:101] is the sub-list for extension extendee + 0, // [0:101] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -4752,7 +4784,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartTipChatParameters); i { + switch v := v.(*StartTwoWayChatParameters); i { case 0: return &v.state case 1: @@ -5127,7 +5159,7 @@ func file_chat_v2_chat_service_proto_init() { (*StreamChatEventsResponse_Error)(nil), } file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ - (*StartChatRequest_TipChat)(nil), + (*StartChatRequest_TwoWayChat)(nil), } file_chat_v2_chat_service_proto_msgTypes[32].OneofWrappers = []interface{}{ (*Content_Text)(nil), diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 6382685..88e96af 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1147,12 +1147,12 @@ func (m *StartChatRequest) Validate() error { switch m.Parameters.(type) { - case *StartChatRequest_TipChat: + case *StartChatRequest_TwoWayChat: - if v, ok := interface{}(m.GetTipChat()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetTwoWayChat()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return StartChatRequestValidationError{ - field: "TipChat", + field: "TwoWayChat", reason: "embedded message failed validation", cause: err, } @@ -1224,24 +1224,34 @@ var _ interface { ErrorName() string } = StartChatRequestValidationError{} -// Validate checks the field values on StartTipChatParameters with the rules +// Validate checks the field values on StartTwoWayChatParameters with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *StartTipChatParameters) Validate() error { +func (m *StartTwoWayChatParameters) Validate() error { if m == nil { return nil } - if m.GetIntentId() == nil { - return StartTipChatParametersValidationError{ - field: "IntentId", + if m.GetOtherUser() == nil { + return StartTwoWayChatParametersValidationError{ + field: "OtherUser", reason: "value is required", } } + if v, ok := interface{}(m.GetOtherUser()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartTwoWayChatParametersValidationError{ + field: "OtherUser", + reason: "embedded message failed validation", + cause: err, + } + } + } + if v, ok := interface{}(m.GetIntentId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return StartTipChatParametersValidationError{ + return StartTwoWayChatParametersValidationError{ field: "IntentId", reason: "embedded message failed validation", cause: err, @@ -1252,9 +1262,9 @@ func (m *StartTipChatParameters) Validate() error { return nil } -// StartTipChatParametersValidationError is the validation error returned by -// StartTipChatParameters.Validate if the designated constraints aren't met. -type StartTipChatParametersValidationError struct { +// StartTwoWayChatParametersValidationError is the validation error returned by +// StartTwoWayChatParameters.Validate if the designated constraints aren't met. +type StartTwoWayChatParametersValidationError struct { field string reason string cause error @@ -1262,24 +1272,24 @@ type StartTipChatParametersValidationError struct { } // Field function returns field value. -func (e StartTipChatParametersValidationError) Field() string { return e.field } +func (e StartTwoWayChatParametersValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e StartTipChatParametersValidationError) Reason() string { return e.reason } +func (e StartTwoWayChatParametersValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e StartTipChatParametersValidationError) Cause() error { return e.cause } +func (e StartTwoWayChatParametersValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e StartTipChatParametersValidationError) Key() bool { return e.key } +func (e StartTwoWayChatParametersValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e StartTipChatParametersValidationError) ErrorName() string { - return "StartTipChatParametersValidationError" +func (e StartTwoWayChatParametersValidationError) ErrorName() string { + return "StartTwoWayChatParametersValidationError" } // Error satisfies the builtin error interface -func (e StartTipChatParametersValidationError) Error() string { +func (e StartTwoWayChatParametersValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1291,14 +1301,14 @@ func (e StartTipChatParametersValidationError) Error() string { } return fmt.Sprintf( - "invalid %sStartTipChatParameters.%s: %s%s", + "invalid %sStartTwoWayChatParameters.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = StartTipChatParametersValidationError{} +var _ error = StartTwoWayChatParametersValidationError{} var _ interface { Field() string @@ -1306,7 +1316,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = StartTipChatParametersValidationError{} +} = StartTwoWayChatParametersValidationError{} // Validate checks the field values on StartChatResponse with the rules defined // in the proto definition for this message. If any rules are violated, an diff --git a/generated/go/user/v1/identity_service.pb.go b/generated/go/user/v1/identity_service.pb.go index 8c4b7f3..5e33d73 100644 --- a/generated/go/user/v1/identity_service.pb.go +++ b/generated/go/user/v1/identity_service.pb.go @@ -1360,6 +1360,10 @@ type GetTwitterUserRequest struct { // *GetTwitterUserRequest_Username // *GetTwitterUserRequest_TipAddress Query isGetTwitterUserRequest_Query `protobuf_oneof:"query"` + // An optional set of authentication information that allows for more + // information to be returned in the request. + Requestor *v1.SolanaAccountId `protobuf:"bytes,10,opt,name=requestor,proto3" json:"requestor,omitempty"` + Signature *v1.Signature `protobuf:"bytes,11,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *GetTwitterUserRequest) Reset() { @@ -1415,6 +1419,20 @@ func (x *GetTwitterUserRequest) GetTipAddress() *v1.SolanaAccountId { return nil } +func (x *GetTwitterUserRequest) GetRequestor() *v1.SolanaAccountId { + if x != nil { + return x.Requestor + } + return nil +} + +func (x *GetTwitterUserRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + type isGetTwitterUserRequest_Query interface { isGetTwitterUserRequest_Query() } @@ -1659,6 +1677,8 @@ type TwitterUser struct { unknownFields protoimpl.UnknownFields // Public key for a token account where tips are routed + // + // TODO(tip_rename): Candidate for renaming to something more generic. TipAddress *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=tip_address,json=tipAddress,proto3" json:"tip_address,omitempty"` // The user's username on Twitter Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` @@ -1670,6 +1690,13 @@ type TwitterUser struct { VerifiedType TwitterUser_VerifiedType `protobuf:"varint,5,opt,name=verified_type,json=verifiedType,proto3,enum=code.user.v1.TwitterUser_VerifiedType" json:"verified_type,omitempty"` // The number of followers the user has on Twitter FollowerCount uint32 `protobuf:"varint,6,opt,name=follower_count,json=followerCount,proto3" json:"follower_count,omitempty"` + // The cost of establishing the friendship (regardless if caller is a friend). + // + // This should not be cached for an extended period, as exchange rate / value + // may change at any time. + FriendshipCost *v2.ExchangeData `protobuf:"bytes,7,opt,name=friendship_cost,json=friendshipCost,proto3" json:"friendship_cost,omitempty"` + // Indicates the user is a friend of the caller. + IsFriend bool `protobuf:"varint,10,opt,name=is_friend,json=isFriend,proto3" json:"is_friend,omitempty"` } func (x *TwitterUser) Reset() { @@ -1746,6 +1773,20 @@ func (x *TwitterUser) GetFollowerCount() uint32 { return 0 } +func (x *TwitterUser) GetFriendshipCost() *v2.ExchangeData { + if x != nil { + return x.FriendshipCost + } + return nil +} + +func (x *TwitterUser) GetIsFriend() bool { + if x != nil { + return x.IsFriend + } + return false +} + var File_user_v1_identity_service_proto protoreflect.FileDescriptor var file_user_v1_identity_service_proto_rawDesc = []byte{ @@ -1965,7 +2006,7 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4f, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x10, 0x03, 0x22, 0x94, 0x01, + 0x52, 0x5f, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x10, 0x03, 0x22, 0x8c, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, @@ -1974,110 +2015,124 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x69, 0x70, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x42, 0x0e, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xbc, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x74, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x74, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x01, 0x22, 0x6e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x32, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, - 0x77, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x76, - 0x69, 0x65, 0x77, 0x22, 0x52, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4a, 0x0a, 0x0c, 0x70, - 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x0d, 0x50, 0x68, 0x6f, 0x6e, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, - 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, - 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0x92, 0x03, 0x0a, 0x0b, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0b, 0x74, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x74, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, - 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, - 0x10, 0x01, 0x18, 0x80, 0x10, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, - 0x63, 0x55, 0x72, 0x6c, 0x12, 0x4b, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x77, 0x69, 0x74, 0x74, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, - 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4f, - 0x56, 0x45, 0x52, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x55, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, - 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, - 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x2d, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0e, 0x0a, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xbc, 0x01, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, + 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x0c, + 0x74, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x74, + 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, + 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x6e, 0x0a, 0x04, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x52, 0x0a, 0x04, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x4a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, + 0x2c, 0x0a, 0x0d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0xfb, 0x03, + 0x0a, 0x0b, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4c, 0x0a, + 0x0b, 0x74, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x0a, 0x74, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x10, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x12, 0x4b, 0x0a, 0x0d, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x4a, 0x0a, 0x0f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x63, + 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x73, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, + 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, + 0x08, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, + 0x4f, 0x56, 0x45, 0x52, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, + 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, + 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, + 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, + 0x2d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, + 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, - 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, - 0x0e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, - 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, - 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x75, - 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, 0x50, - 0x42, 0x55, 0x73, 0x65, 0x72, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, + 0x50, 0x42, 0x55, 0x73, 0x65, 0x72, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2130,6 +2185,7 @@ var file_user_v1_identity_service_proto_goTypes = []interface{}{ (*v1.Locale)(nil), // 32: code.common.v1.Locale (*v1.IntentId)(nil), // 33: code.common.v1.IntentId (*v1.UserId)(nil), // 34: code.common.v1.UserId + (*v2.ExchangeData)(nil), // 35: code.transaction.v2.ExchangeData } var file_user_v1_identity_service_proto_depIdxs = []int32{ 26, // 0: code.user.v1.LinkAccountRequest.owner_account_id:type_name -> code.common.v1.SolanaAccountId @@ -2166,32 +2222,35 @@ var file_user_v1_identity_service_proto_depIdxs = []int32{ 5, // 31: code.user.v1.GetLoginForThirdPartyAppResponse.result:type_name -> code.user.v1.GetLoginForThirdPartyAppResponse.Result 26, // 32: code.user.v1.GetLoginForThirdPartyAppResponse.user_id:type_name -> code.common.v1.SolanaAccountId 26, // 33: code.user.v1.GetTwitterUserRequest.tip_address:type_name -> code.common.v1.SolanaAccountId - 6, // 34: code.user.v1.GetTwitterUserResponse.result:type_name -> code.user.v1.GetTwitterUserResponse.Result - 25, // 35: code.user.v1.GetTwitterUserResponse.twitter_user:type_name -> code.user.v1.TwitterUser - 34, // 36: code.user.v1.User.id:type_name -> code.common.v1.UserId - 23, // 37: code.user.v1.User.view:type_name -> code.user.v1.View - 30, // 38: code.user.v1.View.phone_number:type_name -> code.common.v1.PhoneNumber - 26, // 39: code.user.v1.TwitterUser.tip_address:type_name -> code.common.v1.SolanaAccountId - 7, // 40: code.user.v1.TwitterUser.verified_type:type_name -> code.user.v1.TwitterUser.VerifiedType - 8, // 41: code.user.v1.Identity.LinkAccount:input_type -> code.user.v1.LinkAccountRequest - 10, // 42: code.user.v1.Identity.UnlinkAccount:input_type -> code.user.v1.UnlinkAccountRequest - 12, // 43: code.user.v1.Identity.GetUser:input_type -> code.user.v1.GetUserRequest - 14, // 44: code.user.v1.Identity.UpdatePreferences:input_type -> code.user.v1.UpdatePreferencesRequest - 16, // 45: code.user.v1.Identity.LoginToThirdPartyApp:input_type -> code.user.v1.LoginToThirdPartyAppRequest - 18, // 46: code.user.v1.Identity.GetLoginForThirdPartyApp:input_type -> code.user.v1.GetLoginForThirdPartyAppRequest - 20, // 47: code.user.v1.Identity.GetTwitterUser:input_type -> code.user.v1.GetTwitterUserRequest - 9, // 48: code.user.v1.Identity.LinkAccount:output_type -> code.user.v1.LinkAccountResponse - 11, // 49: code.user.v1.Identity.UnlinkAccount:output_type -> code.user.v1.UnlinkAccountResponse - 13, // 50: code.user.v1.Identity.GetUser:output_type -> code.user.v1.GetUserResponse - 15, // 51: code.user.v1.Identity.UpdatePreferences:output_type -> code.user.v1.UpdatePreferencesResponse - 17, // 52: code.user.v1.Identity.LoginToThirdPartyApp:output_type -> code.user.v1.LoginToThirdPartyAppResponse - 19, // 53: code.user.v1.Identity.GetLoginForThirdPartyApp:output_type -> code.user.v1.GetLoginForThirdPartyAppResponse - 21, // 54: code.user.v1.Identity.GetTwitterUser:output_type -> code.user.v1.GetTwitterUserResponse - 48, // [48:55] is the sub-list for method output_type - 41, // [41:48] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 26, // 34: code.user.v1.GetTwitterUserRequest.requestor:type_name -> code.common.v1.SolanaAccountId + 27, // 35: code.user.v1.GetTwitterUserRequest.signature:type_name -> code.common.v1.Signature + 6, // 36: code.user.v1.GetTwitterUserResponse.result:type_name -> code.user.v1.GetTwitterUserResponse.Result + 25, // 37: code.user.v1.GetTwitterUserResponse.twitter_user:type_name -> code.user.v1.TwitterUser + 34, // 38: code.user.v1.User.id:type_name -> code.common.v1.UserId + 23, // 39: code.user.v1.User.view:type_name -> code.user.v1.View + 30, // 40: code.user.v1.View.phone_number:type_name -> code.common.v1.PhoneNumber + 26, // 41: code.user.v1.TwitterUser.tip_address:type_name -> code.common.v1.SolanaAccountId + 7, // 42: code.user.v1.TwitterUser.verified_type:type_name -> code.user.v1.TwitterUser.VerifiedType + 35, // 43: code.user.v1.TwitterUser.friendship_cost:type_name -> code.transaction.v2.ExchangeData + 8, // 44: code.user.v1.Identity.LinkAccount:input_type -> code.user.v1.LinkAccountRequest + 10, // 45: code.user.v1.Identity.UnlinkAccount:input_type -> code.user.v1.UnlinkAccountRequest + 12, // 46: code.user.v1.Identity.GetUser:input_type -> code.user.v1.GetUserRequest + 14, // 47: code.user.v1.Identity.UpdatePreferences:input_type -> code.user.v1.UpdatePreferencesRequest + 16, // 48: code.user.v1.Identity.LoginToThirdPartyApp:input_type -> code.user.v1.LoginToThirdPartyAppRequest + 18, // 49: code.user.v1.Identity.GetLoginForThirdPartyApp:input_type -> code.user.v1.GetLoginForThirdPartyAppRequest + 20, // 50: code.user.v1.Identity.GetTwitterUser:input_type -> code.user.v1.GetTwitterUserRequest + 9, // 51: code.user.v1.Identity.LinkAccount:output_type -> code.user.v1.LinkAccountResponse + 11, // 52: code.user.v1.Identity.UnlinkAccount:output_type -> code.user.v1.UnlinkAccountResponse + 13, // 53: code.user.v1.Identity.GetUser:output_type -> code.user.v1.GetUserResponse + 15, // 54: code.user.v1.Identity.UpdatePreferences:output_type -> code.user.v1.UpdatePreferencesResponse + 17, // 55: code.user.v1.Identity.LoginToThirdPartyApp:output_type -> code.user.v1.LoginToThirdPartyAppResponse + 19, // 56: code.user.v1.Identity.GetLoginForThirdPartyApp:output_type -> code.user.v1.GetLoginForThirdPartyAppResponse + 21, // 57: code.user.v1.Identity.GetTwitterUser:output_type -> code.user.v1.GetTwitterUserResponse + 51, // [51:58] is the sub-list for method output_type + 44, // [44:51] is the sub-list for method input_type + 44, // [44:44] is the sub-list for extension type_name + 44, // [44:44] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_user_v1_identity_service_proto_init() } diff --git a/generated/go/user/v1/identity_service.pb.validate.go b/generated/go/user/v1/identity_service.pb.validate.go index ffa1bf2..4301e79 100644 --- a/generated/go/user/v1/identity_service.pb.validate.go +++ b/generated/go/user/v1/identity_service.pb.validate.go @@ -1298,6 +1298,26 @@ func (m *GetTwitterUserRequest) Validate() error { return nil } + if v, ok := interface{}(m.GetRequestor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetTwitterUserRequestValidationError{ + field: "Requestor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetTwitterUserRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + switch m.Query.(type) { case *GetTwitterUserRequest_Username: @@ -1763,6 +1783,18 @@ func (m *TwitterUser) Validate() error { // no validation rules for FollowerCount + if v, ok := interface{}(m.GetFriendshipCost()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TwitterUserValidationError{ + field: "FriendshipCost", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsFriend + return nil } diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index b8407f8..f4f4f53 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -736,10 +736,10 @@ export class StartChatRequest extends Message { /** * GroupChatParameters group_chat = 4; * - * @generated from field: code.chat.v2.StartTipChatParameters tip_chat = 3; + * @generated from field: code.chat.v2.StartTwoWayChatParameters two_way_chat = 3; */ - value: StartTipChatParameters; - case: "tipChat"; + value: StartTwoWayChatParameters; + case: "twoWayChat"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -752,7 +752,7 @@ export class StartChatRequest extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, { no: 2, name: "signature", kind: "message", T: Signature }, - { no: 3, name: "tip_chat", kind: "message", T: StartTipChatParameters, oneof: "parameters" }, + { no: 3, name: "two_way_chat", kind: "message", T: StartTwoWayChatParameters, oneof: "parameters" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartChatRequest { @@ -773,47 +773,64 @@ export class StartChatRequest extends Message { } /** - * Starts a two-way chat between a tipper and tippee. Chat members are - * inferred from the 12 word public keys involved in the intent. Only - * the tippee can start the chat, and the tipper is anonymous if this - * is the first between the involved Code users. + * StartTwoWayChatParameters contains the parameters required to start + * or recover a two way chat between the caller and the specified 'other_user'. * - * @generated from message code.chat.v2.StartTipChatParameters + * The 'other_user' is currently the 'tip_address', normally retrieved from + * user.Identity.GetTwitterUser(username). + * + * @generated from message code.chat.v2.StartTwoWayChatParameters */ -export class StartTipChatParameters extends Message { +export class StartTwoWayChatParameters extends Message { /** - * The tip's intent ID, which can be extracted from the reference in - * an ExchangeDataContent message content where the verb is RECEIVED_TIP. + * The account id of the user the caller wishes to chat with. + * + * This will be the `tip` (or equivalent) address. + * + * @generated from field: code.common.v1.SolanaAccountId other_user = 1; + */ + otherUser?: SolanaAccountId; + + /** + * The intent_id of the payment that initiated the chat/friendship. + * + * This field is optional. It is used as an optimization when the server has not + * yet observed the establishment of a friendship. In this case, the server will + * use the provided intent_id to verify the friendship. * - * @generated from field: code.common.v1.IntentId intent_id = 1; + * This is most likely to occur when initiating a chat with a user for the first + * time. + * + * @generated from field: code.common.v1.IntentId intent_id = 2; */ intentId?: IntentId; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.StartTipChatParameters"; + static readonly typeName = "code.chat.v2.StartTwoWayChatParameters"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "intent_id", kind: "message", T: IntentId }, + { no: 1, name: "other_user", kind: "message", T: SolanaAccountId }, + { no: 2, name: "intent_id", kind: "message", T: IntentId }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): StartTipChatParameters { - return new StartTipChatParameters().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): StartTwoWayChatParameters { + return new StartTwoWayChatParameters().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): StartTipChatParameters { - return new StartTipChatParameters().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): StartTwoWayChatParameters { + return new StartTwoWayChatParameters().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): StartTipChatParameters { - return new StartTipChatParameters().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): StartTwoWayChatParameters { + return new StartTwoWayChatParameters().fromJsonString(jsonString, options); } - static equals(a: StartTipChatParameters | PlainMessage | undefined, b: StartTipChatParameters | PlainMessage | undefined): boolean { - return proto3.util.equals(StartTipChatParameters, a, b); + static equals(a: StartTwoWayChatParameters | PlainMessage | undefined, b: StartTwoWayChatParameters | PlainMessage | undefined): boolean { + return proto3.util.equals(StartTwoWayChatParameters, a, b); } } @@ -827,7 +844,7 @@ export class StartChatResponse extends Message { result = StartChatResponse_Result.OK; /** - * The chat to use if the RPC was successful + * The chat to use if the RPC was successful. * * @generated from field: code.chat.v2.ChatMetadata chat = 2; */ @@ -872,20 +889,34 @@ export enum StartChatResponse_Result { OK = 0, /** + * DENIED indicates the caller is not allowed to start/join the chat. + * * @generated from enum value: DENIED = 1; */ DENIED = 1, /** + * INVALID_PRAMETER indicates one of the parameters is invalid. + * * @generated from enum value: INVALID_PARAMETER = 2; */ INVALID_PARAMETER = 2, + + /** + * PENDING indicates that the payment (for chat) intent is pending confirmation + * before the service will permit the creation of the chat. This can happen in + * cases where the block chain is particularly slow (beyond our RPC timeouts). + * + * @generated from enum value: PENDING = 3; + */ + PENDING = 3, } // Retrieve enum metadata with: proto3.getEnumType(StartChatResponse_Result) proto3.util.setEnumType(StartChatResponse_Result, "code.chat.v2.StartChatResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, { no: 2, name: "INVALID_PARAMETER" }, + { no: 3, name: "PENDING" }, ]); /** diff --git a/generated/protobuf-es/user/v1/identity_service_pb.ts b/generated/protobuf-es/user/v1/identity_service_pb.ts index d416464..2eef1ca 100644 --- a/generated/protobuf-es/user/v1/identity_service_pb.ts +++ b/generated/protobuf-es/user/v1/identity_service_pb.ts @@ -7,7 +7,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialM import { Message, proto3 } from "@bufbuild/protobuf"; import { DataContainerId, IntentId, Locale, PhoneNumber, Signature, SolanaAccountId, UserId } from "../../common/v1/model_pb"; import { PhoneLinkingToken } from "../../phone/v1/phone_verification_service_pb"; -import { AirdropType } from "../../transaction/v2/transaction_service_pb"; +import { AirdropType, ExchangeData } from "../../transaction/v2/transaction_service_pb"; /** * @generated from message code.user.v1.LinkAccountRequest @@ -939,6 +939,19 @@ export class GetTwitterUserRequest extends Message { case: "tipAddress"; } | { case: undefined; value?: undefined } = { case: undefined }; + /** + * An optional set of authentication information that allows for more + * information to be returned in the request. + * + * @generated from field: code.common.v1.SolanaAccountId requestor = 10; + */ + requestor?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 11; + */ + signature?: Signature; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -949,6 +962,8 @@ export class GetTwitterUserRequest extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "username", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "query" }, { no: 2, name: "tip_address", kind: "message", T: SolanaAccountId, oneof: "query" }, + { no: 10, name: "requestor", kind: "message", T: SolanaAccountId }, + { no: 11, name: "signature", kind: "message", T: Signature }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetTwitterUserRequest { @@ -1178,6 +1193,8 @@ export class TwitterUser extends Message { /** * Public key for a token account where tips are routed * + * TODO(tip_rename): Candidate for renaming to something more generic. + * * @generated from field: code.common.v1.SolanaAccountId tip_address = 1; */ tipAddress?: SolanaAccountId; @@ -1217,6 +1234,23 @@ export class TwitterUser extends Message { */ followerCount = 0; + /** + * The cost of establishing the friendship (regardless if caller is a friend). + * + * This should not be cached for an extended period, as exchange rate / value + * may change at any time. + * + * @generated from field: code.transaction.v2.ExchangeData friendship_cost = 7; + */ + friendshipCost?: ExchangeData; + + /** + * Indicates the user is a friend of the caller. + * + * @generated from field: bool is_friend = 10; + */ + isFriend = false; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1231,6 +1265,8 @@ export class TwitterUser extends Message { { no: 4, name: "profile_pic_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "verified_type", kind: "enum", T: proto3.getEnumType(TwitterUser_VerifiedType) }, { no: 6, name: "follower_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, + { no: 7, name: "friendship_cost", kind: "message", T: ExchangeData }, + { no: 10, name: "is_friend", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): TwitterUser { From af7e8f665ef1ae29d598037060bb62f6e4558d3c Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 15:49:36 -0400 Subject: [PATCH 05/15] transaction: add friending intents --- .../transaction/v2/transaction_service.pb.go | 931 ++++++++++-------- .../v2/transaction_service.pb.validate.go | 83 ++ .../transaction/v2/transaction_service_pb.ts | 63 ++ .../transaction/v2/transaction_service.proto | 15 + 4 files changed, 690 insertions(+), 402 deletions(-) diff --git a/generated/go/transaction/v2/transaction_service.pb.go b/generated/go/transaction/v2/transaction_service.pb.go index 3845d46..e756a8e 100644 --- a/generated/go/transaction/v2/transaction_service.pb.go +++ b/generated/go/transaction/v2/transaction_service.pb.go @@ -980,6 +980,52 @@ func (TippedUser_Platform) EnumDescriptor() ([]byte, []int) { return file_transaction_v2_transaction_service_proto_rawDescGZIP(), []int{63, 0} } +type FriendedUser_Platform int32 + +const ( + FriendedUser_UNKNOWN FriendedUser_Platform = 0 + FriendedUser_TWITTER FriendedUser_Platform = 1 +) + +// Enum value maps for FriendedUser_Platform. +var ( + FriendedUser_Platform_name = map[int32]string{ + 0: "UNKNOWN", + 1: "TWITTER", + } + FriendedUser_Platform_value = map[string]int32{ + "UNKNOWN": 0, + "TWITTER": 1, + } +) + +func (x FriendedUser_Platform) Enum() *FriendedUser_Platform { + p := new(FriendedUser_Platform) + *p = x + return p +} + +func (x FriendedUser_Platform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FriendedUser_Platform) Descriptor() protoreflect.EnumDescriptor { + return file_transaction_v2_transaction_service_proto_enumTypes[19].Descriptor() +} + +func (FriendedUser_Platform) Type() protoreflect.EnumType { + return &file_transaction_v2_transaction_service_proto_enumTypes[19] +} + +func (x FriendedUser_Platform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FriendedUser_Platform.Descriptor instead. +func (FriendedUser_Platform) EnumDescriptor() ([]byte, []int) { + return file_transaction_v2_transaction_service_proto_rawDescGZIP(), []int{64, 0} +} + type SubmitIntentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5847,6 +5893,61 @@ func (x *TippedUser) GetUsername() string { return "" } +type FriendedUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform FriendedUser_Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.transaction.v2.FriendedUser_Platform" json:"platform,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *FriendedUser) Reset() { + *x = FriendedUser{} + if protoimpl.UnsafeEnabled { + mi := &file_transaction_v2_transaction_service_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FriendedUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FriendedUser) ProtoMessage() {} + +func (x *FriendedUser) ProtoReflect() protoreflect.Message { + mi := &file_transaction_v2_transaction_service_proto_msgTypes[64] + 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 FriendedUser.ProtoReflect.Descriptor instead. +func (*FriendedUser) Descriptor() ([]byte, []int) { + return file_transaction_v2_transaction_service_proto_rawDescGZIP(), []int{64} +} + +func (x *FriendedUser) GetPlatform() FriendedUser_Platform { + if x != nil { + return x.Platform + } + return FriendedUser_UNKNOWN +} + +func (x *FriendedUser) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + type Cursor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5858,7 +5959,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[64] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5871,7 +5972,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[64] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5884,7 +5985,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_transaction_v2_transaction_service_proto_rawDescGZIP(), []int{64} + return file_transaction_v2_transaction_service_proto_rawDescGZIP(), []int{65} } func (x *Cursor) GetValue() []byte { @@ -5919,7 +6020,7 @@ type SubmitIntentRequest_SubmitActions struct { func (x *SubmitIntentRequest_SubmitActions) Reset() { *x = SubmitIntentRequest_SubmitActions{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[65] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5932,7 +6033,7 @@ func (x *SubmitIntentRequest_SubmitActions) String() string { func (*SubmitIntentRequest_SubmitActions) ProtoMessage() {} func (x *SubmitIntentRequest_SubmitActions) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[65] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6003,7 +6104,7 @@ type SubmitIntentRequest_SubmitSignatures struct { func (x *SubmitIntentRequest_SubmitSignatures) Reset() { *x = SubmitIntentRequest_SubmitSignatures{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[66] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6016,7 +6117,7 @@ func (x *SubmitIntentRequest_SubmitSignatures) String() string { func (*SubmitIntentRequest_SubmitSignatures) ProtoMessage() {} func (x *SubmitIntentRequest_SubmitSignatures) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[66] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6053,7 +6154,7 @@ type SubmitIntentResponse_ServerParameters struct { func (x *SubmitIntentResponse_ServerParameters) Reset() { *x = SubmitIntentResponse_ServerParameters{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[67] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6066,7 +6167,7 @@ func (x *SubmitIntentResponse_ServerParameters) String() string { func (*SubmitIntentResponse_ServerParameters) ProtoMessage() {} func (x *SubmitIntentResponse_ServerParameters) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[67] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6100,7 +6201,7 @@ type SubmitIntentResponse_Success struct { func (x *SubmitIntentResponse_Success) Reset() { *x = SubmitIntentResponse_Success{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[68] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6113,7 +6214,7 @@ func (x *SubmitIntentResponse_Success) String() string { func (*SubmitIntentResponse_Success) ProtoMessage() {} func (x *SubmitIntentResponse_Success) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[68] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6148,7 +6249,7 @@ type SubmitIntentResponse_Error struct { func (x *SubmitIntentResponse_Error) Reset() { *x = SubmitIntentResponse_Error{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[69] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6161,7 +6262,7 @@ func (x *SubmitIntentResponse_Error) String() string { func (*SubmitIntentResponse_Error) ProtoMessage() {} func (x *SubmitIntentResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[69] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6218,7 +6319,7 @@ type SwapRequest_Initiate struct { func (x *SwapRequest_Initiate) Reset() { *x = SwapRequest_Initiate{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[73] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6231,7 +6332,7 @@ func (x *SwapRequest_Initiate) String() string { func (*SwapRequest_Initiate) ProtoMessage() {} func (x *SwapRequest_Initiate) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[73] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6294,7 +6395,7 @@ type SwapRequest_SubmitSignature struct { func (x *SwapRequest_SubmitSignature) Reset() { *x = SwapRequest_SubmitSignature{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[74] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6307,7 +6408,7 @@ func (x *SwapRequest_SubmitSignature) String() string { func (*SwapRequest_SubmitSignature) ProtoMessage() {} func (x *SwapRequest_SubmitSignature) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[74] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6366,7 +6467,7 @@ type SwapResponse_ServerParameters struct { func (x *SwapResponse_ServerParameters) Reset() { *x = SwapResponse_ServerParameters{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[75] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6379,7 +6480,7 @@ func (x *SwapResponse_ServerParameters) String() string { func (*SwapResponse_ServerParameters) ProtoMessage() {} func (x *SwapResponse_ServerParameters) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[75] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6476,7 +6577,7 @@ type SwapResponse_Success struct { func (x *SwapResponse_Success) Reset() { *x = SwapResponse_Success{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[76] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6489,7 +6590,7 @@ func (x *SwapResponse_Success) String() string { func (*SwapResponse_Success) ProtoMessage() {} func (x *SwapResponse_Success) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[76] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6524,7 +6625,7 @@ type SwapResponse_Error struct { func (x *SwapResponse_Error) Reset() { *x = SwapResponse_Error{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[77] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6537,7 +6638,7 @@ func (x *SwapResponse_Error) String() string { func (*SwapResponse_Error) ProtoMessage() {} func (x *SwapResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[77] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6599,7 +6700,7 @@ type UpgradeableIntent_UpgradeablePrivateAction struct { func (x *UpgradeableIntent_UpgradeablePrivateAction) Reset() { *x = UpgradeableIntent_UpgradeablePrivateAction{} if protoimpl.UnsafeEnabled { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[78] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6612,7 +6713,7 @@ func (x *UpgradeableIntent_UpgradeablePrivateAction) String() string { func (*UpgradeableIntent_UpgradeablePrivateAction) ProtoMessage() {} func (x *UpgradeableIntent_UpgradeablePrivateAction) ProtoReflect() protoreflect.Message { - mi := &file_transaction_v2_transaction_service_proto_msgTypes[78] + mi := &file_transaction_v2_transaction_service_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7945,99 +8046,110 @@ var file_transaction_v2_transaction_service_proto_rawDesc = []byte{ 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, - 0x01, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x41, - 0x0a, 0x0b, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x49, - 0x56, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x11, - 0x0a, 0x0d, 0x47, 0x45, 0x54, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x10, - 0x02, 0x32, 0xbb, 0x09, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x67, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x2d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x01, 0x22, 0xb1, 0x01, 0x0a, 0x0c, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x52, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, + 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, + 0x54, 0x45, 0x52, 0x10, 0x01, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x2a, 0x41, 0x0a, 0x0b, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, + 0x0a, 0x0e, 0x47, 0x49, 0x56, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4b, 0x49, 0x4e, + 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x54, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, + 0x4b, 0x49, 0x4e, 0x10, 0x02, 0x32, 0xbb, 0x09, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x67, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x72, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, + 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, - 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, - 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x46, - 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x12, 0x42, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x50, - 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x26, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, + 0x72, 0x61, 0x64, 0x65, 0x12, 0x42, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x55, 0x70, + 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2d, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x64, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, + 0x14, 0x43, 0x61, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, + 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x07, 0x41, 0x69, + 0x72, 0x64, 0x72, 0x6f, 0x70, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x69, 0x72, 0x64, + 0x72, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x14, 0x43, 0x61, 0x6e, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x07, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, - 0x70, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x69, 0x72, - 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x04, - 0x53, 0x77, 0x61, 0x70, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x9f, 0x01, - 0x0a, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x61, 0x74, 0x4f, 0x6e, 0x72, - 0x61, 0x6d, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x12, 0x3c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, - 0x46, 0x69, 0x61, 0x74, 0x4f, 0x6e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, - 0x61, 0x74, 0x4f, 0x6e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, - 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x87, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, - 0x67, 0x65, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x10, 0x41, 0x50, 0x42, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x2e, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4f, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x9f, 0x01, 0x0a, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x61, + 0x74, 0x4f, 0x6e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, + 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x3c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, + 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x61, 0x74, 0x4f, 0x6e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x75, + 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, + 0x72, 0x65, 0x46, 0x69, 0x61, 0x74, 0x4f, 0x6e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x75, 0x72, 0x63, + 0x68, 0x61, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x87, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x10, 0x41, 0x50, 0x42, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8052,8 +8164,8 @@ func file_transaction_v2_transaction_service_proto_rawDescGZIP() []byte { return file_transaction_v2_transaction_service_proto_rawDescData } -var file_transaction_v2_transaction_service_proto_enumTypes = make([]protoimpl.EnumInfo, 19) -var file_transaction_v2_transaction_service_proto_msgTypes = make([]protoimpl.MessageInfo, 79) +var file_transaction_v2_transaction_service_proto_enumTypes = make([]protoimpl.EnumInfo, 20) +var file_transaction_v2_transaction_service_proto_msgTypes = make([]protoimpl.MessageInfo, 80) var file_transaction_v2_transaction_service_proto_goTypes = []interface{}{ (AirdropType)(0), // 0: code.transaction.v2.AirdropType (SubmitIntentResponse_Success_Code)(0), // 1: code.transaction.v2.SubmitIntentResponse.Success.Code @@ -8074,299 +8186,302 @@ var file_transaction_v2_transaction_service_proto_goTypes = []interface{}{ (DeniedErrorDetails_Code)(0), // 16: code.transaction.v2.DeniedErrorDetails.Code (PaymentHistoryItem_PaymentType)(0), // 17: code.transaction.v2.PaymentHistoryItem.PaymentType (TippedUser_Platform)(0), // 18: code.transaction.v2.TippedUser.Platform - (*SubmitIntentRequest)(nil), // 19: code.transaction.v2.SubmitIntentRequest - (*SubmitIntentResponse)(nil), // 20: code.transaction.v2.SubmitIntentResponse - (*GetIntentMetadataRequest)(nil), // 21: code.transaction.v2.GetIntentMetadataRequest - (*GetIntentMetadataResponse)(nil), // 22: code.transaction.v2.GetIntentMetadataResponse - (*GetPrivacyUpgradeStatusRequest)(nil), // 23: code.transaction.v2.GetPrivacyUpgradeStatusRequest - (*GetPrivacyUpgradeStatusResponse)(nil), // 24: code.transaction.v2.GetPrivacyUpgradeStatusResponse - (*GetPrioritizedIntentsForPrivacyUpgradeRequest)(nil), // 25: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest - (*GetPrioritizedIntentsForPrivacyUpgradeResponse)(nil), // 26: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse - (*GetLimitsRequest)(nil), // 27: code.transaction.v2.GetLimitsRequest - (*GetLimitsResponse)(nil), // 28: code.transaction.v2.GetLimitsResponse - (*GetPaymentHistoryRequest)(nil), // 29: code.transaction.v2.GetPaymentHistoryRequest - (*GetPaymentHistoryResponse)(nil), // 30: code.transaction.v2.GetPaymentHistoryResponse - (*CanWithdrawToAccountRequest)(nil), // 31: code.transaction.v2.CanWithdrawToAccountRequest - (*CanWithdrawToAccountResponse)(nil), // 32: code.transaction.v2.CanWithdrawToAccountResponse - (*AirdropRequest)(nil), // 33: code.transaction.v2.AirdropRequest - (*AirdropResponse)(nil), // 34: code.transaction.v2.AirdropResponse - (*SwapRequest)(nil), // 35: code.transaction.v2.SwapRequest - (*SwapResponse)(nil), // 36: code.transaction.v2.SwapResponse - (*DeclareFiatOnrampPurchaseAttemptRequest)(nil), // 37: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest - (*DeclareFiatOnrampPurchaseAttemptResponse)(nil), // 38: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse - (*Metadata)(nil), // 39: code.transaction.v2.Metadata - (*OpenAccountsMetadata)(nil), // 40: code.transaction.v2.OpenAccountsMetadata - (*SendPrivatePaymentMetadata)(nil), // 41: code.transaction.v2.SendPrivatePaymentMetadata - (*SendPublicPaymentMetadata)(nil), // 42: code.transaction.v2.SendPublicPaymentMetadata - (*ReceivePaymentsPrivatelyMetadata)(nil), // 43: code.transaction.v2.ReceivePaymentsPrivatelyMetadata - (*ReceivePaymentsPubliclyMetadata)(nil), // 44: code.transaction.v2.ReceivePaymentsPubliclyMetadata - (*UpgradePrivacyMetadata)(nil), // 45: code.transaction.v2.UpgradePrivacyMetadata - (*MigrateToPrivacy2022Metadata)(nil), // 46: code.transaction.v2.MigrateToPrivacy2022Metadata - (*EstablishRelationshipMetadata)(nil), // 47: code.transaction.v2.EstablishRelationshipMetadata - (*Action)(nil), // 48: code.transaction.v2.Action - (*OpenAccountAction)(nil), // 49: code.transaction.v2.OpenAccountAction - (*CloseEmptyAccountAction)(nil), // 50: code.transaction.v2.CloseEmptyAccountAction - (*CloseDormantAccountAction)(nil), // 51: code.transaction.v2.CloseDormantAccountAction - (*NoPrivacyTransferAction)(nil), // 52: code.transaction.v2.NoPrivacyTransferAction - (*NoPrivacyWithdrawAction)(nil), // 53: code.transaction.v2.NoPrivacyWithdrawAction - (*TemporaryPrivacyTransferAction)(nil), // 54: code.transaction.v2.TemporaryPrivacyTransferAction - (*TemporaryPrivacyExchangeAction)(nil), // 55: code.transaction.v2.TemporaryPrivacyExchangeAction - (*PermanentPrivacyUpgradeAction)(nil), // 56: code.transaction.v2.PermanentPrivacyUpgradeAction - (*FeePaymentAction)(nil), // 57: code.transaction.v2.FeePaymentAction - (*ServerParameter)(nil), // 58: code.transaction.v2.ServerParameter - (*NoncedTransactionMetadata)(nil), // 59: code.transaction.v2.NoncedTransactionMetadata - (*OpenAccountServerParameter)(nil), // 60: code.transaction.v2.OpenAccountServerParameter - (*CloseEmptyAccountServerParameter)(nil), // 61: code.transaction.v2.CloseEmptyAccountServerParameter - (*CloseDormantAccountServerParameter)(nil), // 62: code.transaction.v2.CloseDormantAccountServerParameter - (*NoPrivacyTransferServerParameter)(nil), // 63: code.transaction.v2.NoPrivacyTransferServerParameter - (*NoPrivacyWithdrawServerParameter)(nil), // 64: code.transaction.v2.NoPrivacyWithdrawServerParameter - (*TemporaryPrivacyTransferServerParameter)(nil), // 65: code.transaction.v2.TemporaryPrivacyTransferServerParameter - (*TemporaryPrivacyExchangeServerParameter)(nil), // 66: code.transaction.v2.TemporaryPrivacyExchangeServerParameter - (*PermanentPrivacyUpgradeServerParameter)(nil), // 67: code.transaction.v2.PermanentPrivacyUpgradeServerParameter - (*FeePaymentServerParameter)(nil), // 68: code.transaction.v2.FeePaymentServerParameter - (*ErrorDetails)(nil), // 69: code.transaction.v2.ErrorDetails - (*ReasonStringErrorDetails)(nil), // 70: code.transaction.v2.ReasonStringErrorDetails - (*InvalidSignatureErrorDetails)(nil), // 71: code.transaction.v2.InvalidSignatureErrorDetails - (*DeniedErrorDetails)(nil), // 72: code.transaction.v2.DeniedErrorDetails - (*UpgradeableIntent)(nil), // 73: code.transaction.v2.UpgradeableIntent - (*PaymentHistoryItem)(nil), // 74: code.transaction.v2.PaymentHistoryItem - (*ExchangeData)(nil), // 75: code.transaction.v2.ExchangeData - (*ExchangeDataWithoutRate)(nil), // 76: code.transaction.v2.ExchangeDataWithoutRate - (*AdditionalFeePayment)(nil), // 77: code.transaction.v2.AdditionalFeePayment - (*SendLimit)(nil), // 78: code.transaction.v2.SendLimit - (*DepositLimit)(nil), // 79: code.transaction.v2.DepositLimit - (*MicroPaymentLimit)(nil), // 80: code.transaction.v2.MicroPaymentLimit - (*BuyModuleLimit)(nil), // 81: code.transaction.v2.BuyModuleLimit - (*TippedUser)(nil), // 82: code.transaction.v2.TippedUser - (*Cursor)(nil), // 83: code.transaction.v2.Cursor - (*SubmitIntentRequest_SubmitActions)(nil), // 84: code.transaction.v2.SubmitIntentRequest.SubmitActions - (*SubmitIntentRequest_SubmitSignatures)(nil), // 85: code.transaction.v2.SubmitIntentRequest.SubmitSignatures - (*SubmitIntentResponse_ServerParameters)(nil), // 86: code.transaction.v2.SubmitIntentResponse.ServerParameters - (*SubmitIntentResponse_Success)(nil), // 87: code.transaction.v2.SubmitIntentResponse.Success - (*SubmitIntentResponse_Error)(nil), // 88: code.transaction.v2.SubmitIntentResponse.Error - nil, // 89: code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry - nil, // 90: code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry - nil, // 91: code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry - (*SwapRequest_Initiate)(nil), // 92: code.transaction.v2.SwapRequest.Initiate - (*SwapRequest_SubmitSignature)(nil), // 93: code.transaction.v2.SwapRequest.SubmitSignature - (*SwapResponse_ServerParameters)(nil), // 94: code.transaction.v2.SwapResponse.ServerParameters - (*SwapResponse_Success)(nil), // 95: code.transaction.v2.SwapResponse.Success - (*SwapResponse_Error)(nil), // 96: code.transaction.v2.SwapResponse.Error - (*UpgradeableIntent_UpgradeablePrivateAction)(nil), // 97: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction - (*v1.IntentId)(nil), // 98: code.common.v1.IntentId - (*v1.SolanaAccountId)(nil), // 99: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 100: code.common.v1.Signature - (*timestamppb.Timestamp)(nil), // 101: google.protobuf.Timestamp - (*v1.UUID)(nil), // 102: code.common.v1.UUID - (*v1.ChatId)(nil), // 103: code.common.v1.ChatId - (*v1.Relationship)(nil), // 104: code.common.v1.Relationship - (v1.AccountType)(0), // 105: code.common.v1.AccountType - (*v1.Blockhash)(nil), // 106: code.common.v1.Blockhash - (*v1.Hash)(nil), // 107: code.common.v1.Hash - (*v1.Transaction)(nil), // 108: code.common.v1.Transaction - (*v1.DeviceToken)(nil), // 109: code.common.v1.DeviceToken - (*v1.InstructionAccount)(nil), // 110: code.common.v1.InstructionAccount + (FriendedUser_Platform)(0), // 19: code.transaction.v2.FriendedUser.Platform + (*SubmitIntentRequest)(nil), // 20: code.transaction.v2.SubmitIntentRequest + (*SubmitIntentResponse)(nil), // 21: code.transaction.v2.SubmitIntentResponse + (*GetIntentMetadataRequest)(nil), // 22: code.transaction.v2.GetIntentMetadataRequest + (*GetIntentMetadataResponse)(nil), // 23: code.transaction.v2.GetIntentMetadataResponse + (*GetPrivacyUpgradeStatusRequest)(nil), // 24: code.transaction.v2.GetPrivacyUpgradeStatusRequest + (*GetPrivacyUpgradeStatusResponse)(nil), // 25: code.transaction.v2.GetPrivacyUpgradeStatusResponse + (*GetPrioritizedIntentsForPrivacyUpgradeRequest)(nil), // 26: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest + (*GetPrioritizedIntentsForPrivacyUpgradeResponse)(nil), // 27: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse + (*GetLimitsRequest)(nil), // 28: code.transaction.v2.GetLimitsRequest + (*GetLimitsResponse)(nil), // 29: code.transaction.v2.GetLimitsResponse + (*GetPaymentHistoryRequest)(nil), // 30: code.transaction.v2.GetPaymentHistoryRequest + (*GetPaymentHistoryResponse)(nil), // 31: code.transaction.v2.GetPaymentHistoryResponse + (*CanWithdrawToAccountRequest)(nil), // 32: code.transaction.v2.CanWithdrawToAccountRequest + (*CanWithdrawToAccountResponse)(nil), // 33: code.transaction.v2.CanWithdrawToAccountResponse + (*AirdropRequest)(nil), // 34: code.transaction.v2.AirdropRequest + (*AirdropResponse)(nil), // 35: code.transaction.v2.AirdropResponse + (*SwapRequest)(nil), // 36: code.transaction.v2.SwapRequest + (*SwapResponse)(nil), // 37: code.transaction.v2.SwapResponse + (*DeclareFiatOnrampPurchaseAttemptRequest)(nil), // 38: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest + (*DeclareFiatOnrampPurchaseAttemptResponse)(nil), // 39: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse + (*Metadata)(nil), // 40: code.transaction.v2.Metadata + (*OpenAccountsMetadata)(nil), // 41: code.transaction.v2.OpenAccountsMetadata + (*SendPrivatePaymentMetadata)(nil), // 42: code.transaction.v2.SendPrivatePaymentMetadata + (*SendPublicPaymentMetadata)(nil), // 43: code.transaction.v2.SendPublicPaymentMetadata + (*ReceivePaymentsPrivatelyMetadata)(nil), // 44: code.transaction.v2.ReceivePaymentsPrivatelyMetadata + (*ReceivePaymentsPubliclyMetadata)(nil), // 45: code.transaction.v2.ReceivePaymentsPubliclyMetadata + (*UpgradePrivacyMetadata)(nil), // 46: code.transaction.v2.UpgradePrivacyMetadata + (*MigrateToPrivacy2022Metadata)(nil), // 47: code.transaction.v2.MigrateToPrivacy2022Metadata + (*EstablishRelationshipMetadata)(nil), // 48: code.transaction.v2.EstablishRelationshipMetadata + (*Action)(nil), // 49: code.transaction.v2.Action + (*OpenAccountAction)(nil), // 50: code.transaction.v2.OpenAccountAction + (*CloseEmptyAccountAction)(nil), // 51: code.transaction.v2.CloseEmptyAccountAction + (*CloseDormantAccountAction)(nil), // 52: code.transaction.v2.CloseDormantAccountAction + (*NoPrivacyTransferAction)(nil), // 53: code.transaction.v2.NoPrivacyTransferAction + (*NoPrivacyWithdrawAction)(nil), // 54: code.transaction.v2.NoPrivacyWithdrawAction + (*TemporaryPrivacyTransferAction)(nil), // 55: code.transaction.v2.TemporaryPrivacyTransferAction + (*TemporaryPrivacyExchangeAction)(nil), // 56: code.transaction.v2.TemporaryPrivacyExchangeAction + (*PermanentPrivacyUpgradeAction)(nil), // 57: code.transaction.v2.PermanentPrivacyUpgradeAction + (*FeePaymentAction)(nil), // 58: code.transaction.v2.FeePaymentAction + (*ServerParameter)(nil), // 59: code.transaction.v2.ServerParameter + (*NoncedTransactionMetadata)(nil), // 60: code.transaction.v2.NoncedTransactionMetadata + (*OpenAccountServerParameter)(nil), // 61: code.transaction.v2.OpenAccountServerParameter + (*CloseEmptyAccountServerParameter)(nil), // 62: code.transaction.v2.CloseEmptyAccountServerParameter + (*CloseDormantAccountServerParameter)(nil), // 63: code.transaction.v2.CloseDormantAccountServerParameter + (*NoPrivacyTransferServerParameter)(nil), // 64: code.transaction.v2.NoPrivacyTransferServerParameter + (*NoPrivacyWithdrawServerParameter)(nil), // 65: code.transaction.v2.NoPrivacyWithdrawServerParameter + (*TemporaryPrivacyTransferServerParameter)(nil), // 66: code.transaction.v2.TemporaryPrivacyTransferServerParameter + (*TemporaryPrivacyExchangeServerParameter)(nil), // 67: code.transaction.v2.TemporaryPrivacyExchangeServerParameter + (*PermanentPrivacyUpgradeServerParameter)(nil), // 68: code.transaction.v2.PermanentPrivacyUpgradeServerParameter + (*FeePaymentServerParameter)(nil), // 69: code.transaction.v2.FeePaymentServerParameter + (*ErrorDetails)(nil), // 70: code.transaction.v2.ErrorDetails + (*ReasonStringErrorDetails)(nil), // 71: code.transaction.v2.ReasonStringErrorDetails + (*InvalidSignatureErrorDetails)(nil), // 72: code.transaction.v2.InvalidSignatureErrorDetails + (*DeniedErrorDetails)(nil), // 73: code.transaction.v2.DeniedErrorDetails + (*UpgradeableIntent)(nil), // 74: code.transaction.v2.UpgradeableIntent + (*PaymentHistoryItem)(nil), // 75: code.transaction.v2.PaymentHistoryItem + (*ExchangeData)(nil), // 76: code.transaction.v2.ExchangeData + (*ExchangeDataWithoutRate)(nil), // 77: code.transaction.v2.ExchangeDataWithoutRate + (*AdditionalFeePayment)(nil), // 78: code.transaction.v2.AdditionalFeePayment + (*SendLimit)(nil), // 79: code.transaction.v2.SendLimit + (*DepositLimit)(nil), // 80: code.transaction.v2.DepositLimit + (*MicroPaymentLimit)(nil), // 81: code.transaction.v2.MicroPaymentLimit + (*BuyModuleLimit)(nil), // 82: code.transaction.v2.BuyModuleLimit + (*TippedUser)(nil), // 83: code.transaction.v2.TippedUser + (*FriendedUser)(nil), // 84: code.transaction.v2.FriendedUser + (*Cursor)(nil), // 85: code.transaction.v2.Cursor + (*SubmitIntentRequest_SubmitActions)(nil), // 86: code.transaction.v2.SubmitIntentRequest.SubmitActions + (*SubmitIntentRequest_SubmitSignatures)(nil), // 87: code.transaction.v2.SubmitIntentRequest.SubmitSignatures + (*SubmitIntentResponse_ServerParameters)(nil), // 88: code.transaction.v2.SubmitIntentResponse.ServerParameters + (*SubmitIntentResponse_Success)(nil), // 89: code.transaction.v2.SubmitIntentResponse.Success + (*SubmitIntentResponse_Error)(nil), // 90: code.transaction.v2.SubmitIntentResponse.Error + nil, // 91: code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry + nil, // 92: code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry + nil, // 93: code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry + (*SwapRequest_Initiate)(nil), // 94: code.transaction.v2.SwapRequest.Initiate + (*SwapRequest_SubmitSignature)(nil), // 95: code.transaction.v2.SwapRequest.SubmitSignature + (*SwapResponse_ServerParameters)(nil), // 96: code.transaction.v2.SwapResponse.ServerParameters + (*SwapResponse_Success)(nil), // 97: code.transaction.v2.SwapResponse.Success + (*SwapResponse_Error)(nil), // 98: code.transaction.v2.SwapResponse.Error + (*UpgradeableIntent_UpgradeablePrivateAction)(nil), // 99: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction + (*v1.IntentId)(nil), // 100: code.common.v1.IntentId + (*v1.SolanaAccountId)(nil), // 101: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 102: code.common.v1.Signature + (*timestamppb.Timestamp)(nil), // 103: google.protobuf.Timestamp + (*v1.UUID)(nil), // 104: code.common.v1.UUID + (*v1.ChatId)(nil), // 105: code.common.v1.ChatId + (*v1.Relationship)(nil), // 106: code.common.v1.Relationship + (v1.AccountType)(0), // 107: code.common.v1.AccountType + (*v1.Blockhash)(nil), // 108: code.common.v1.Blockhash + (*v1.Hash)(nil), // 109: code.common.v1.Hash + (*v1.Transaction)(nil), // 110: code.common.v1.Transaction + (*v1.DeviceToken)(nil), // 111: code.common.v1.DeviceToken + (*v1.InstructionAccount)(nil), // 112: code.common.v1.InstructionAccount } var file_transaction_v2_transaction_service_proto_depIdxs = []int32{ - 84, // 0: code.transaction.v2.SubmitIntentRequest.submit_actions:type_name -> code.transaction.v2.SubmitIntentRequest.SubmitActions - 85, // 1: code.transaction.v2.SubmitIntentRequest.submit_signatures:type_name -> code.transaction.v2.SubmitIntentRequest.SubmitSignatures - 86, // 2: code.transaction.v2.SubmitIntentResponse.server_parameters:type_name -> code.transaction.v2.SubmitIntentResponse.ServerParameters - 87, // 3: code.transaction.v2.SubmitIntentResponse.success:type_name -> code.transaction.v2.SubmitIntentResponse.Success - 88, // 4: code.transaction.v2.SubmitIntentResponse.error:type_name -> code.transaction.v2.SubmitIntentResponse.Error - 98, // 5: code.transaction.v2.GetIntentMetadataRequest.intent_id:type_name -> code.common.v1.IntentId - 99, // 6: code.transaction.v2.GetIntentMetadataRequest.owner:type_name -> code.common.v1.SolanaAccountId - 100, // 7: code.transaction.v2.GetIntentMetadataRequest.signature:type_name -> code.common.v1.Signature + 86, // 0: code.transaction.v2.SubmitIntentRequest.submit_actions:type_name -> code.transaction.v2.SubmitIntentRequest.SubmitActions + 87, // 1: code.transaction.v2.SubmitIntentRequest.submit_signatures:type_name -> code.transaction.v2.SubmitIntentRequest.SubmitSignatures + 88, // 2: code.transaction.v2.SubmitIntentResponse.server_parameters:type_name -> code.transaction.v2.SubmitIntentResponse.ServerParameters + 89, // 3: code.transaction.v2.SubmitIntentResponse.success:type_name -> code.transaction.v2.SubmitIntentResponse.Success + 90, // 4: code.transaction.v2.SubmitIntentResponse.error:type_name -> code.transaction.v2.SubmitIntentResponse.Error + 100, // 5: code.transaction.v2.GetIntentMetadataRequest.intent_id:type_name -> code.common.v1.IntentId + 101, // 6: code.transaction.v2.GetIntentMetadataRequest.owner:type_name -> code.common.v1.SolanaAccountId + 102, // 7: code.transaction.v2.GetIntentMetadataRequest.signature:type_name -> code.common.v1.Signature 3, // 8: code.transaction.v2.GetIntentMetadataResponse.result:type_name -> code.transaction.v2.GetIntentMetadataResponse.Result - 39, // 9: code.transaction.v2.GetIntentMetadataResponse.metadata:type_name -> code.transaction.v2.Metadata - 98, // 10: code.transaction.v2.GetPrivacyUpgradeStatusRequest.intent_id:type_name -> code.common.v1.IntentId + 40, // 9: code.transaction.v2.GetIntentMetadataResponse.metadata:type_name -> code.transaction.v2.Metadata + 100, // 10: code.transaction.v2.GetPrivacyUpgradeStatusRequest.intent_id:type_name -> code.common.v1.IntentId 4, // 11: code.transaction.v2.GetPrivacyUpgradeStatusResponse.result:type_name -> code.transaction.v2.GetPrivacyUpgradeStatusResponse.Result 5, // 12: code.transaction.v2.GetPrivacyUpgradeStatusResponse.status:type_name -> code.transaction.v2.GetPrivacyUpgradeStatusResponse.Status - 99, // 13: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest.owner:type_name -> code.common.v1.SolanaAccountId - 100, // 14: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest.signature:type_name -> code.common.v1.Signature + 101, // 13: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest.owner:type_name -> code.common.v1.SolanaAccountId + 102, // 14: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest.signature:type_name -> code.common.v1.Signature 6, // 15: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse.result:type_name -> code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse.Result - 73, // 16: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse.items:type_name -> code.transaction.v2.UpgradeableIntent - 99, // 17: code.transaction.v2.GetLimitsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 100, // 18: code.transaction.v2.GetLimitsRequest.signature:type_name -> code.common.v1.Signature - 101, // 19: code.transaction.v2.GetLimitsRequest.consumed_since:type_name -> google.protobuf.Timestamp + 74, // 16: code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse.items:type_name -> code.transaction.v2.UpgradeableIntent + 101, // 17: code.transaction.v2.GetLimitsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 102, // 18: code.transaction.v2.GetLimitsRequest.signature:type_name -> code.common.v1.Signature + 103, // 19: code.transaction.v2.GetLimitsRequest.consumed_since:type_name -> google.protobuf.Timestamp 7, // 20: code.transaction.v2.GetLimitsResponse.result:type_name -> code.transaction.v2.GetLimitsResponse.Result - 89, // 21: code.transaction.v2.GetLimitsResponse.send_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry - 79, // 22: code.transaction.v2.GetLimitsResponse.deposit_limit:type_name -> code.transaction.v2.DepositLimit - 90, // 23: code.transaction.v2.GetLimitsResponse.micro_payment_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry - 91, // 24: code.transaction.v2.GetLimitsResponse.buy_module_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry - 99, // 25: code.transaction.v2.GetPaymentHistoryRequest.owner:type_name -> code.common.v1.SolanaAccountId - 83, // 26: code.transaction.v2.GetPaymentHistoryRequest.cursor:type_name -> code.transaction.v2.Cursor + 91, // 21: code.transaction.v2.GetLimitsResponse.send_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry + 80, // 22: code.transaction.v2.GetLimitsResponse.deposit_limit:type_name -> code.transaction.v2.DepositLimit + 92, // 23: code.transaction.v2.GetLimitsResponse.micro_payment_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry + 93, // 24: code.transaction.v2.GetLimitsResponse.buy_module_limits_by_currency:type_name -> code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry + 101, // 25: code.transaction.v2.GetPaymentHistoryRequest.owner:type_name -> code.common.v1.SolanaAccountId + 85, // 26: code.transaction.v2.GetPaymentHistoryRequest.cursor:type_name -> code.transaction.v2.Cursor 8, // 27: code.transaction.v2.GetPaymentHistoryRequest.direction:type_name -> code.transaction.v2.GetPaymentHistoryRequest.Direction - 100, // 28: code.transaction.v2.GetPaymentHistoryRequest.signature:type_name -> code.common.v1.Signature + 102, // 28: code.transaction.v2.GetPaymentHistoryRequest.signature:type_name -> code.common.v1.Signature 9, // 29: code.transaction.v2.GetPaymentHistoryResponse.result:type_name -> code.transaction.v2.GetPaymentHistoryResponse.Result - 74, // 30: code.transaction.v2.GetPaymentHistoryResponse.items:type_name -> code.transaction.v2.PaymentHistoryItem - 99, // 31: code.transaction.v2.CanWithdrawToAccountRequest.account:type_name -> code.common.v1.SolanaAccountId + 75, // 30: code.transaction.v2.GetPaymentHistoryResponse.items:type_name -> code.transaction.v2.PaymentHistoryItem + 101, // 31: code.transaction.v2.CanWithdrawToAccountRequest.account:type_name -> code.common.v1.SolanaAccountId 10, // 32: code.transaction.v2.CanWithdrawToAccountResponse.account_type:type_name -> code.transaction.v2.CanWithdrawToAccountResponse.AccountType 0, // 33: code.transaction.v2.AirdropRequest.airdrop_type:type_name -> code.transaction.v2.AirdropType - 99, // 34: code.transaction.v2.AirdropRequest.owner:type_name -> code.common.v1.SolanaAccountId - 100, // 35: code.transaction.v2.AirdropRequest.signature:type_name -> code.common.v1.Signature + 101, // 34: code.transaction.v2.AirdropRequest.owner:type_name -> code.common.v1.SolanaAccountId + 102, // 35: code.transaction.v2.AirdropRequest.signature:type_name -> code.common.v1.Signature 11, // 36: code.transaction.v2.AirdropResponse.result:type_name -> code.transaction.v2.AirdropResponse.Result - 75, // 37: code.transaction.v2.AirdropResponse.exchange_data:type_name -> code.transaction.v2.ExchangeData - 92, // 38: code.transaction.v2.SwapRequest.initiate:type_name -> code.transaction.v2.SwapRequest.Initiate - 93, // 39: code.transaction.v2.SwapRequest.submit_signature:type_name -> code.transaction.v2.SwapRequest.SubmitSignature - 94, // 40: code.transaction.v2.SwapResponse.server_parameters:type_name -> code.transaction.v2.SwapResponse.ServerParameters - 95, // 41: code.transaction.v2.SwapResponse.success:type_name -> code.transaction.v2.SwapResponse.Success - 96, // 42: code.transaction.v2.SwapResponse.error:type_name -> code.transaction.v2.SwapResponse.Error - 99, // 43: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.owner:type_name -> code.common.v1.SolanaAccountId - 76, // 44: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.purchase_amount:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 102, // 45: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.nonce:type_name -> code.common.v1.UUID - 100, // 46: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.signature:type_name -> code.common.v1.Signature + 76, // 37: code.transaction.v2.AirdropResponse.exchange_data:type_name -> code.transaction.v2.ExchangeData + 94, // 38: code.transaction.v2.SwapRequest.initiate:type_name -> code.transaction.v2.SwapRequest.Initiate + 95, // 39: code.transaction.v2.SwapRequest.submit_signature:type_name -> code.transaction.v2.SwapRequest.SubmitSignature + 96, // 40: code.transaction.v2.SwapResponse.server_parameters:type_name -> code.transaction.v2.SwapResponse.ServerParameters + 97, // 41: code.transaction.v2.SwapResponse.success:type_name -> code.transaction.v2.SwapResponse.Success + 98, // 42: code.transaction.v2.SwapResponse.error:type_name -> code.transaction.v2.SwapResponse.Error + 101, // 43: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.owner:type_name -> code.common.v1.SolanaAccountId + 77, // 44: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.purchase_amount:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 104, // 45: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.nonce:type_name -> code.common.v1.UUID + 102, // 46: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest.signature:type_name -> code.common.v1.Signature 14, // 47: code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse.result:type_name -> code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse.Result - 40, // 48: code.transaction.v2.Metadata.open_accounts:type_name -> code.transaction.v2.OpenAccountsMetadata - 41, // 49: code.transaction.v2.Metadata.send_private_payment:type_name -> code.transaction.v2.SendPrivatePaymentMetadata - 43, // 50: code.transaction.v2.Metadata.receive_payments_privately:type_name -> code.transaction.v2.ReceivePaymentsPrivatelyMetadata - 45, // 51: code.transaction.v2.Metadata.upgrade_privacy:type_name -> code.transaction.v2.UpgradePrivacyMetadata - 46, // 52: code.transaction.v2.Metadata.migrate_to_privacy_2022:type_name -> code.transaction.v2.MigrateToPrivacy2022Metadata - 42, // 53: code.transaction.v2.Metadata.send_public_payment:type_name -> code.transaction.v2.SendPublicPaymentMetadata - 44, // 54: code.transaction.v2.Metadata.receive_payments_publicly:type_name -> code.transaction.v2.ReceivePaymentsPubliclyMetadata - 47, // 55: code.transaction.v2.Metadata.establish_relationship:type_name -> code.transaction.v2.EstablishRelationshipMetadata - 99, // 56: code.transaction.v2.SendPrivatePaymentMetadata.destination:type_name -> code.common.v1.SolanaAccountId - 75, // 57: code.transaction.v2.SendPrivatePaymentMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData - 82, // 58: code.transaction.v2.SendPrivatePaymentMetadata.tipped_user:type_name -> code.transaction.v2.TippedUser - 103, // 59: code.transaction.v2.SendPrivatePaymentMetadata.chat_id:type_name -> code.common.v1.ChatId - 99, // 60: code.transaction.v2.SendPublicPaymentMetadata.source:type_name -> code.common.v1.SolanaAccountId - 99, // 61: code.transaction.v2.SendPublicPaymentMetadata.destination:type_name -> code.common.v1.SolanaAccountId - 75, // 62: code.transaction.v2.SendPublicPaymentMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData - 99, // 63: code.transaction.v2.ReceivePaymentsPrivatelyMetadata.source:type_name -> code.common.v1.SolanaAccountId - 99, // 64: code.transaction.v2.ReceivePaymentsPubliclyMetadata.source:type_name -> code.common.v1.SolanaAccountId - 75, // 65: code.transaction.v2.ReceivePaymentsPubliclyMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData - 104, // 66: code.transaction.v2.EstablishRelationshipMetadata.relationship:type_name -> code.common.v1.Relationship - 49, // 67: code.transaction.v2.Action.open_account:type_name -> code.transaction.v2.OpenAccountAction - 50, // 68: code.transaction.v2.Action.close_empty_account:type_name -> code.transaction.v2.CloseEmptyAccountAction - 51, // 69: code.transaction.v2.Action.close_dormant_account:type_name -> code.transaction.v2.CloseDormantAccountAction - 52, // 70: code.transaction.v2.Action.no_privacy_transfer:type_name -> code.transaction.v2.NoPrivacyTransferAction - 53, // 71: code.transaction.v2.Action.no_privacy_withdraw:type_name -> code.transaction.v2.NoPrivacyWithdrawAction - 54, // 72: code.transaction.v2.Action.temporary_privacy_transfer:type_name -> code.transaction.v2.TemporaryPrivacyTransferAction - 55, // 73: code.transaction.v2.Action.temporary_privacy_exchange:type_name -> code.transaction.v2.TemporaryPrivacyExchangeAction - 56, // 74: code.transaction.v2.Action.permanent_privacy_upgrade:type_name -> code.transaction.v2.PermanentPrivacyUpgradeAction - 57, // 75: code.transaction.v2.Action.fee_payment:type_name -> code.transaction.v2.FeePaymentAction - 105, // 76: code.transaction.v2.OpenAccountAction.account_type:type_name -> code.common.v1.AccountType - 99, // 77: code.transaction.v2.OpenAccountAction.owner:type_name -> code.common.v1.SolanaAccountId - 99, // 78: code.transaction.v2.OpenAccountAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 79: code.transaction.v2.OpenAccountAction.token:type_name -> code.common.v1.SolanaAccountId - 100, // 80: code.transaction.v2.OpenAccountAction.authority_signature:type_name -> code.common.v1.Signature - 105, // 81: code.transaction.v2.CloseEmptyAccountAction.account_type:type_name -> code.common.v1.AccountType - 99, // 82: code.transaction.v2.CloseEmptyAccountAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 83: code.transaction.v2.CloseEmptyAccountAction.token:type_name -> code.common.v1.SolanaAccountId - 105, // 84: code.transaction.v2.CloseDormantAccountAction.account_type:type_name -> code.common.v1.AccountType - 99, // 85: code.transaction.v2.CloseDormantAccountAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 86: code.transaction.v2.CloseDormantAccountAction.token:type_name -> code.common.v1.SolanaAccountId - 99, // 87: code.transaction.v2.CloseDormantAccountAction.destination:type_name -> code.common.v1.SolanaAccountId - 99, // 88: code.transaction.v2.NoPrivacyTransferAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 89: code.transaction.v2.NoPrivacyTransferAction.source:type_name -> code.common.v1.SolanaAccountId - 99, // 90: code.transaction.v2.NoPrivacyTransferAction.destination:type_name -> code.common.v1.SolanaAccountId - 99, // 91: code.transaction.v2.NoPrivacyWithdrawAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 92: code.transaction.v2.NoPrivacyWithdrawAction.source:type_name -> code.common.v1.SolanaAccountId - 99, // 93: code.transaction.v2.NoPrivacyWithdrawAction.destination:type_name -> code.common.v1.SolanaAccountId - 99, // 94: code.transaction.v2.TemporaryPrivacyTransferAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 95: code.transaction.v2.TemporaryPrivacyTransferAction.source:type_name -> code.common.v1.SolanaAccountId - 99, // 96: code.transaction.v2.TemporaryPrivacyTransferAction.destination:type_name -> code.common.v1.SolanaAccountId - 99, // 97: code.transaction.v2.TemporaryPrivacyExchangeAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 98: code.transaction.v2.TemporaryPrivacyExchangeAction.source:type_name -> code.common.v1.SolanaAccountId - 99, // 99: code.transaction.v2.TemporaryPrivacyExchangeAction.destination:type_name -> code.common.v1.SolanaAccountId + 41, // 48: code.transaction.v2.Metadata.open_accounts:type_name -> code.transaction.v2.OpenAccountsMetadata + 42, // 49: code.transaction.v2.Metadata.send_private_payment:type_name -> code.transaction.v2.SendPrivatePaymentMetadata + 44, // 50: code.transaction.v2.Metadata.receive_payments_privately:type_name -> code.transaction.v2.ReceivePaymentsPrivatelyMetadata + 46, // 51: code.transaction.v2.Metadata.upgrade_privacy:type_name -> code.transaction.v2.UpgradePrivacyMetadata + 47, // 52: code.transaction.v2.Metadata.migrate_to_privacy_2022:type_name -> code.transaction.v2.MigrateToPrivacy2022Metadata + 43, // 53: code.transaction.v2.Metadata.send_public_payment:type_name -> code.transaction.v2.SendPublicPaymentMetadata + 45, // 54: code.transaction.v2.Metadata.receive_payments_publicly:type_name -> code.transaction.v2.ReceivePaymentsPubliclyMetadata + 48, // 55: code.transaction.v2.Metadata.establish_relationship:type_name -> code.transaction.v2.EstablishRelationshipMetadata + 101, // 56: code.transaction.v2.SendPrivatePaymentMetadata.destination:type_name -> code.common.v1.SolanaAccountId + 76, // 57: code.transaction.v2.SendPrivatePaymentMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData + 83, // 58: code.transaction.v2.SendPrivatePaymentMetadata.tipped_user:type_name -> code.transaction.v2.TippedUser + 105, // 59: code.transaction.v2.SendPrivatePaymentMetadata.chat_id:type_name -> code.common.v1.ChatId + 101, // 60: code.transaction.v2.SendPublicPaymentMetadata.source:type_name -> code.common.v1.SolanaAccountId + 101, // 61: code.transaction.v2.SendPublicPaymentMetadata.destination:type_name -> code.common.v1.SolanaAccountId + 76, // 62: code.transaction.v2.SendPublicPaymentMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData + 101, // 63: code.transaction.v2.ReceivePaymentsPrivatelyMetadata.source:type_name -> code.common.v1.SolanaAccountId + 101, // 64: code.transaction.v2.ReceivePaymentsPubliclyMetadata.source:type_name -> code.common.v1.SolanaAccountId + 76, // 65: code.transaction.v2.ReceivePaymentsPubliclyMetadata.exchange_data:type_name -> code.transaction.v2.ExchangeData + 106, // 66: code.transaction.v2.EstablishRelationshipMetadata.relationship:type_name -> code.common.v1.Relationship + 50, // 67: code.transaction.v2.Action.open_account:type_name -> code.transaction.v2.OpenAccountAction + 51, // 68: code.transaction.v2.Action.close_empty_account:type_name -> code.transaction.v2.CloseEmptyAccountAction + 52, // 69: code.transaction.v2.Action.close_dormant_account:type_name -> code.transaction.v2.CloseDormantAccountAction + 53, // 70: code.transaction.v2.Action.no_privacy_transfer:type_name -> code.transaction.v2.NoPrivacyTransferAction + 54, // 71: code.transaction.v2.Action.no_privacy_withdraw:type_name -> code.transaction.v2.NoPrivacyWithdrawAction + 55, // 72: code.transaction.v2.Action.temporary_privacy_transfer:type_name -> code.transaction.v2.TemporaryPrivacyTransferAction + 56, // 73: code.transaction.v2.Action.temporary_privacy_exchange:type_name -> code.transaction.v2.TemporaryPrivacyExchangeAction + 57, // 74: code.transaction.v2.Action.permanent_privacy_upgrade:type_name -> code.transaction.v2.PermanentPrivacyUpgradeAction + 58, // 75: code.transaction.v2.Action.fee_payment:type_name -> code.transaction.v2.FeePaymentAction + 107, // 76: code.transaction.v2.OpenAccountAction.account_type:type_name -> code.common.v1.AccountType + 101, // 77: code.transaction.v2.OpenAccountAction.owner:type_name -> code.common.v1.SolanaAccountId + 101, // 78: code.transaction.v2.OpenAccountAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 79: code.transaction.v2.OpenAccountAction.token:type_name -> code.common.v1.SolanaAccountId + 102, // 80: code.transaction.v2.OpenAccountAction.authority_signature:type_name -> code.common.v1.Signature + 107, // 81: code.transaction.v2.CloseEmptyAccountAction.account_type:type_name -> code.common.v1.AccountType + 101, // 82: code.transaction.v2.CloseEmptyAccountAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 83: code.transaction.v2.CloseEmptyAccountAction.token:type_name -> code.common.v1.SolanaAccountId + 107, // 84: code.transaction.v2.CloseDormantAccountAction.account_type:type_name -> code.common.v1.AccountType + 101, // 85: code.transaction.v2.CloseDormantAccountAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 86: code.transaction.v2.CloseDormantAccountAction.token:type_name -> code.common.v1.SolanaAccountId + 101, // 87: code.transaction.v2.CloseDormantAccountAction.destination:type_name -> code.common.v1.SolanaAccountId + 101, // 88: code.transaction.v2.NoPrivacyTransferAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 89: code.transaction.v2.NoPrivacyTransferAction.source:type_name -> code.common.v1.SolanaAccountId + 101, // 90: code.transaction.v2.NoPrivacyTransferAction.destination:type_name -> code.common.v1.SolanaAccountId + 101, // 91: code.transaction.v2.NoPrivacyWithdrawAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 92: code.transaction.v2.NoPrivacyWithdrawAction.source:type_name -> code.common.v1.SolanaAccountId + 101, // 93: code.transaction.v2.NoPrivacyWithdrawAction.destination:type_name -> code.common.v1.SolanaAccountId + 101, // 94: code.transaction.v2.TemporaryPrivacyTransferAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 95: code.transaction.v2.TemporaryPrivacyTransferAction.source:type_name -> code.common.v1.SolanaAccountId + 101, // 96: code.transaction.v2.TemporaryPrivacyTransferAction.destination:type_name -> code.common.v1.SolanaAccountId + 101, // 97: code.transaction.v2.TemporaryPrivacyExchangeAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 98: code.transaction.v2.TemporaryPrivacyExchangeAction.source:type_name -> code.common.v1.SolanaAccountId + 101, // 99: code.transaction.v2.TemporaryPrivacyExchangeAction.destination:type_name -> code.common.v1.SolanaAccountId 15, // 100: code.transaction.v2.FeePaymentAction.type:type_name -> code.transaction.v2.FeePaymentAction.FeeType - 99, // 101: code.transaction.v2.FeePaymentAction.authority:type_name -> code.common.v1.SolanaAccountId - 99, // 102: code.transaction.v2.FeePaymentAction.source:type_name -> code.common.v1.SolanaAccountId - 99, // 103: code.transaction.v2.FeePaymentAction.destination:type_name -> code.common.v1.SolanaAccountId - 59, // 104: code.transaction.v2.ServerParameter.nonces:type_name -> code.transaction.v2.NoncedTransactionMetadata - 60, // 105: code.transaction.v2.ServerParameter.open_account:type_name -> code.transaction.v2.OpenAccountServerParameter - 61, // 106: code.transaction.v2.ServerParameter.close_empty_account:type_name -> code.transaction.v2.CloseEmptyAccountServerParameter - 62, // 107: code.transaction.v2.ServerParameter.close_dormant_account:type_name -> code.transaction.v2.CloseDormantAccountServerParameter - 63, // 108: code.transaction.v2.ServerParameter.no_privacy_transfer:type_name -> code.transaction.v2.NoPrivacyTransferServerParameter - 64, // 109: code.transaction.v2.ServerParameter.no_privacy_withdraw:type_name -> code.transaction.v2.NoPrivacyWithdrawServerParameter - 65, // 110: code.transaction.v2.ServerParameter.temporary_privacy_transfer:type_name -> code.transaction.v2.TemporaryPrivacyTransferServerParameter - 66, // 111: code.transaction.v2.ServerParameter.temporary_privacy_exchange:type_name -> code.transaction.v2.TemporaryPrivacyExchangeServerParameter - 67, // 112: code.transaction.v2.ServerParameter.permanent_privacy_upgrade:type_name -> code.transaction.v2.PermanentPrivacyUpgradeServerParameter - 68, // 113: code.transaction.v2.ServerParameter.fee_payment:type_name -> code.transaction.v2.FeePaymentServerParameter - 99, // 114: code.transaction.v2.NoncedTransactionMetadata.nonce:type_name -> code.common.v1.SolanaAccountId - 106, // 115: code.transaction.v2.NoncedTransactionMetadata.blockhash:type_name -> code.common.v1.Blockhash - 99, // 116: code.transaction.v2.TemporaryPrivacyTransferServerParameter.treasury:type_name -> code.common.v1.SolanaAccountId - 107, // 117: code.transaction.v2.TemporaryPrivacyTransferServerParameter.recent_root:type_name -> code.common.v1.Hash - 99, // 118: code.transaction.v2.TemporaryPrivacyExchangeServerParameter.treasury:type_name -> code.common.v1.SolanaAccountId - 107, // 119: code.transaction.v2.TemporaryPrivacyExchangeServerParameter.recent_root:type_name -> code.common.v1.Hash - 99, // 120: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment:type_name -> code.common.v1.SolanaAccountId - 107, // 121: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment_transcript:type_name -> code.common.v1.Hash - 99, // 122: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment_destination:type_name -> code.common.v1.SolanaAccountId - 107, // 123: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.merkle_root:type_name -> code.common.v1.Hash - 107, // 124: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.merkle_proof:type_name -> code.common.v1.Hash - 99, // 125: code.transaction.v2.FeePaymentServerParameter.code_destination:type_name -> code.common.v1.SolanaAccountId - 70, // 126: code.transaction.v2.ErrorDetails.reason_string:type_name -> code.transaction.v2.ReasonStringErrorDetails - 71, // 127: code.transaction.v2.ErrorDetails.invalid_signature:type_name -> code.transaction.v2.InvalidSignatureErrorDetails - 72, // 128: code.transaction.v2.ErrorDetails.denied:type_name -> code.transaction.v2.DeniedErrorDetails - 108, // 129: code.transaction.v2.InvalidSignatureErrorDetails.expected_transaction:type_name -> code.common.v1.Transaction - 100, // 130: code.transaction.v2.InvalidSignatureErrorDetails.provided_signature:type_name -> code.common.v1.Signature + 101, // 101: code.transaction.v2.FeePaymentAction.authority:type_name -> code.common.v1.SolanaAccountId + 101, // 102: code.transaction.v2.FeePaymentAction.source:type_name -> code.common.v1.SolanaAccountId + 101, // 103: code.transaction.v2.FeePaymentAction.destination:type_name -> code.common.v1.SolanaAccountId + 60, // 104: code.transaction.v2.ServerParameter.nonces:type_name -> code.transaction.v2.NoncedTransactionMetadata + 61, // 105: code.transaction.v2.ServerParameter.open_account:type_name -> code.transaction.v2.OpenAccountServerParameter + 62, // 106: code.transaction.v2.ServerParameter.close_empty_account:type_name -> code.transaction.v2.CloseEmptyAccountServerParameter + 63, // 107: code.transaction.v2.ServerParameter.close_dormant_account:type_name -> code.transaction.v2.CloseDormantAccountServerParameter + 64, // 108: code.transaction.v2.ServerParameter.no_privacy_transfer:type_name -> code.transaction.v2.NoPrivacyTransferServerParameter + 65, // 109: code.transaction.v2.ServerParameter.no_privacy_withdraw:type_name -> code.transaction.v2.NoPrivacyWithdrawServerParameter + 66, // 110: code.transaction.v2.ServerParameter.temporary_privacy_transfer:type_name -> code.transaction.v2.TemporaryPrivacyTransferServerParameter + 67, // 111: code.transaction.v2.ServerParameter.temporary_privacy_exchange:type_name -> code.transaction.v2.TemporaryPrivacyExchangeServerParameter + 68, // 112: code.transaction.v2.ServerParameter.permanent_privacy_upgrade:type_name -> code.transaction.v2.PermanentPrivacyUpgradeServerParameter + 69, // 113: code.transaction.v2.ServerParameter.fee_payment:type_name -> code.transaction.v2.FeePaymentServerParameter + 101, // 114: code.transaction.v2.NoncedTransactionMetadata.nonce:type_name -> code.common.v1.SolanaAccountId + 108, // 115: code.transaction.v2.NoncedTransactionMetadata.blockhash:type_name -> code.common.v1.Blockhash + 101, // 116: code.transaction.v2.TemporaryPrivacyTransferServerParameter.treasury:type_name -> code.common.v1.SolanaAccountId + 109, // 117: code.transaction.v2.TemporaryPrivacyTransferServerParameter.recent_root:type_name -> code.common.v1.Hash + 101, // 118: code.transaction.v2.TemporaryPrivacyExchangeServerParameter.treasury:type_name -> code.common.v1.SolanaAccountId + 109, // 119: code.transaction.v2.TemporaryPrivacyExchangeServerParameter.recent_root:type_name -> code.common.v1.Hash + 101, // 120: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment:type_name -> code.common.v1.SolanaAccountId + 109, // 121: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment_transcript:type_name -> code.common.v1.Hash + 101, // 122: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.new_commitment_destination:type_name -> code.common.v1.SolanaAccountId + 109, // 123: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.merkle_root:type_name -> code.common.v1.Hash + 109, // 124: code.transaction.v2.PermanentPrivacyUpgradeServerParameter.merkle_proof:type_name -> code.common.v1.Hash + 101, // 125: code.transaction.v2.FeePaymentServerParameter.code_destination:type_name -> code.common.v1.SolanaAccountId + 71, // 126: code.transaction.v2.ErrorDetails.reason_string:type_name -> code.transaction.v2.ReasonStringErrorDetails + 72, // 127: code.transaction.v2.ErrorDetails.invalid_signature:type_name -> code.transaction.v2.InvalidSignatureErrorDetails + 73, // 128: code.transaction.v2.ErrorDetails.denied:type_name -> code.transaction.v2.DeniedErrorDetails + 110, // 129: code.transaction.v2.InvalidSignatureErrorDetails.expected_transaction:type_name -> code.common.v1.Transaction + 102, // 130: code.transaction.v2.InvalidSignatureErrorDetails.provided_signature:type_name -> code.common.v1.Signature 16, // 131: code.transaction.v2.DeniedErrorDetails.code:type_name -> code.transaction.v2.DeniedErrorDetails.Code - 98, // 132: code.transaction.v2.UpgradeableIntent.id:type_name -> code.common.v1.IntentId - 97, // 133: code.transaction.v2.UpgradeableIntent.actions:type_name -> code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction - 83, // 134: code.transaction.v2.PaymentHistoryItem.cursor:type_name -> code.transaction.v2.Cursor - 75, // 135: code.transaction.v2.PaymentHistoryItem.exchange_data:type_name -> code.transaction.v2.ExchangeData + 100, // 132: code.transaction.v2.UpgradeableIntent.id:type_name -> code.common.v1.IntentId + 99, // 133: code.transaction.v2.UpgradeableIntent.actions:type_name -> code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction + 85, // 134: code.transaction.v2.PaymentHistoryItem.cursor:type_name -> code.transaction.v2.Cursor + 76, // 135: code.transaction.v2.PaymentHistoryItem.exchange_data:type_name -> code.transaction.v2.ExchangeData 17, // 136: code.transaction.v2.PaymentHistoryItem.payment_type:type_name -> code.transaction.v2.PaymentHistoryItem.PaymentType - 101, // 137: code.transaction.v2.PaymentHistoryItem.timestamp:type_name -> google.protobuf.Timestamp + 103, // 137: code.transaction.v2.PaymentHistoryItem.timestamp:type_name -> google.protobuf.Timestamp 0, // 138: code.transaction.v2.PaymentHistoryItem.airdrop_type:type_name -> code.transaction.v2.AirdropType - 98, // 139: code.transaction.v2.PaymentHistoryItem.intent_id:type_name -> code.common.v1.IntentId - 99, // 140: code.transaction.v2.AdditionalFeePayment.destination:type_name -> code.common.v1.SolanaAccountId + 100, // 139: code.transaction.v2.PaymentHistoryItem.intent_id:type_name -> code.common.v1.IntentId + 101, // 140: code.transaction.v2.AdditionalFeePayment.destination:type_name -> code.common.v1.SolanaAccountId 18, // 141: code.transaction.v2.TippedUser.platform:type_name -> code.transaction.v2.TippedUser.Platform - 98, // 142: code.transaction.v2.SubmitIntentRequest.SubmitActions.id:type_name -> code.common.v1.IntentId - 99, // 143: code.transaction.v2.SubmitIntentRequest.SubmitActions.owner:type_name -> code.common.v1.SolanaAccountId - 39, // 144: code.transaction.v2.SubmitIntentRequest.SubmitActions.metadata:type_name -> code.transaction.v2.Metadata - 48, // 145: code.transaction.v2.SubmitIntentRequest.SubmitActions.actions:type_name -> code.transaction.v2.Action - 100, // 146: code.transaction.v2.SubmitIntentRequest.SubmitActions.signature:type_name -> code.common.v1.Signature - 109, // 147: code.transaction.v2.SubmitIntentRequest.SubmitActions.device_token:type_name -> code.common.v1.DeviceToken - 100, // 148: code.transaction.v2.SubmitIntentRequest.SubmitSignatures.signatures:type_name -> code.common.v1.Signature - 58, // 149: code.transaction.v2.SubmitIntentResponse.ServerParameters.server_parameters:type_name -> code.transaction.v2.ServerParameter - 1, // 150: code.transaction.v2.SubmitIntentResponse.Success.code:type_name -> code.transaction.v2.SubmitIntentResponse.Success.Code - 2, // 151: code.transaction.v2.SubmitIntentResponse.Error.code:type_name -> code.transaction.v2.SubmitIntentResponse.Error.Code - 69, // 152: code.transaction.v2.SubmitIntentResponse.Error.error_details:type_name -> code.transaction.v2.ErrorDetails - 78, // 153: code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.SendLimit - 80, // 154: code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.MicroPaymentLimit - 81, // 155: code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.BuyModuleLimit - 99, // 156: code.transaction.v2.SwapRequest.Initiate.owner:type_name -> code.common.v1.SolanaAccountId - 99, // 157: code.transaction.v2.SwapRequest.Initiate.swap_authority:type_name -> code.common.v1.SolanaAccountId - 100, // 158: code.transaction.v2.SwapRequest.Initiate.signature:type_name -> code.common.v1.Signature - 100, // 159: code.transaction.v2.SwapRequest.SubmitSignature.signature:type_name -> code.common.v1.Signature - 99, // 160: code.transaction.v2.SwapResponse.ServerParameters.payer:type_name -> code.common.v1.SolanaAccountId - 106, // 161: code.transaction.v2.SwapResponse.ServerParameters.recent_blockhash:type_name -> code.common.v1.Blockhash - 99, // 162: code.transaction.v2.SwapResponse.ServerParameters.swap_program:type_name -> code.common.v1.SolanaAccountId - 110, // 163: code.transaction.v2.SwapResponse.ServerParameters.swap_ixn_accounts:type_name -> code.common.v1.InstructionAccount - 99, // 164: code.transaction.v2.SwapResponse.ServerParameters.nonce:type_name -> code.common.v1.SolanaAccountId - 12, // 165: code.transaction.v2.SwapResponse.Success.code:type_name -> code.transaction.v2.SwapResponse.Success.Code - 13, // 166: code.transaction.v2.SwapResponse.Error.code:type_name -> code.transaction.v2.SwapResponse.Error.Code - 69, // 167: code.transaction.v2.SwapResponse.Error.error_details:type_name -> code.transaction.v2.ErrorDetails - 108, // 168: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.transaction_blob:type_name -> code.common.v1.Transaction - 100, // 169: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.client_signature:type_name -> code.common.v1.Signature - 105, // 170: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.source_account_type:type_name -> code.common.v1.AccountType - 99, // 171: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.original_destination:type_name -> code.common.v1.SolanaAccountId - 99, // 172: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.treasury:type_name -> code.common.v1.SolanaAccountId - 107, // 173: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.recent_root:type_name -> code.common.v1.Hash - 19, // 174: code.transaction.v2.Transaction.SubmitIntent:input_type -> code.transaction.v2.SubmitIntentRequest - 21, // 175: code.transaction.v2.Transaction.GetIntentMetadata:input_type -> code.transaction.v2.GetIntentMetadataRequest - 23, // 176: code.transaction.v2.Transaction.GetPrivacyUpgradeStatus:input_type -> code.transaction.v2.GetPrivacyUpgradeStatusRequest - 25, // 177: code.transaction.v2.Transaction.GetPrioritizedIntentsForPrivacyUpgrade:input_type -> code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest - 27, // 178: code.transaction.v2.Transaction.GetLimits:input_type -> code.transaction.v2.GetLimitsRequest - 29, // 179: code.transaction.v2.Transaction.GetPaymentHistory:input_type -> code.transaction.v2.GetPaymentHistoryRequest - 31, // 180: code.transaction.v2.Transaction.CanWithdrawToAccount:input_type -> code.transaction.v2.CanWithdrawToAccountRequest - 33, // 181: code.transaction.v2.Transaction.Airdrop:input_type -> code.transaction.v2.AirdropRequest - 35, // 182: code.transaction.v2.Transaction.Swap:input_type -> code.transaction.v2.SwapRequest - 37, // 183: code.transaction.v2.Transaction.DeclareFiatOnrampPurchaseAttempt:input_type -> code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest - 20, // 184: code.transaction.v2.Transaction.SubmitIntent:output_type -> code.transaction.v2.SubmitIntentResponse - 22, // 185: code.transaction.v2.Transaction.GetIntentMetadata:output_type -> code.transaction.v2.GetIntentMetadataResponse - 24, // 186: code.transaction.v2.Transaction.GetPrivacyUpgradeStatus:output_type -> code.transaction.v2.GetPrivacyUpgradeStatusResponse - 26, // 187: code.transaction.v2.Transaction.GetPrioritizedIntentsForPrivacyUpgrade:output_type -> code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse - 28, // 188: code.transaction.v2.Transaction.GetLimits:output_type -> code.transaction.v2.GetLimitsResponse - 30, // 189: code.transaction.v2.Transaction.GetPaymentHistory:output_type -> code.transaction.v2.GetPaymentHistoryResponse - 32, // 190: code.transaction.v2.Transaction.CanWithdrawToAccount:output_type -> code.transaction.v2.CanWithdrawToAccountResponse - 34, // 191: code.transaction.v2.Transaction.Airdrop:output_type -> code.transaction.v2.AirdropResponse - 36, // 192: code.transaction.v2.Transaction.Swap:output_type -> code.transaction.v2.SwapResponse - 38, // 193: code.transaction.v2.Transaction.DeclareFiatOnrampPurchaseAttempt:output_type -> code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse - 184, // [184:194] is the sub-list for method output_type - 174, // [174:184] is the sub-list for method input_type - 174, // [174:174] is the sub-list for extension type_name - 174, // [174:174] is the sub-list for extension extendee - 0, // [0:174] is the sub-list for field type_name + 19, // 142: code.transaction.v2.FriendedUser.platform:type_name -> code.transaction.v2.FriendedUser.Platform + 100, // 143: code.transaction.v2.SubmitIntentRequest.SubmitActions.id:type_name -> code.common.v1.IntentId + 101, // 144: code.transaction.v2.SubmitIntentRequest.SubmitActions.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 145: code.transaction.v2.SubmitIntentRequest.SubmitActions.metadata:type_name -> code.transaction.v2.Metadata + 49, // 146: code.transaction.v2.SubmitIntentRequest.SubmitActions.actions:type_name -> code.transaction.v2.Action + 102, // 147: code.transaction.v2.SubmitIntentRequest.SubmitActions.signature:type_name -> code.common.v1.Signature + 111, // 148: code.transaction.v2.SubmitIntentRequest.SubmitActions.device_token:type_name -> code.common.v1.DeviceToken + 102, // 149: code.transaction.v2.SubmitIntentRequest.SubmitSignatures.signatures:type_name -> code.common.v1.Signature + 59, // 150: code.transaction.v2.SubmitIntentResponse.ServerParameters.server_parameters:type_name -> code.transaction.v2.ServerParameter + 1, // 151: code.transaction.v2.SubmitIntentResponse.Success.code:type_name -> code.transaction.v2.SubmitIntentResponse.Success.Code + 2, // 152: code.transaction.v2.SubmitIntentResponse.Error.code:type_name -> code.transaction.v2.SubmitIntentResponse.Error.Code + 70, // 153: code.transaction.v2.SubmitIntentResponse.Error.error_details:type_name -> code.transaction.v2.ErrorDetails + 79, // 154: code.transaction.v2.GetLimitsResponse.SendLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.SendLimit + 81, // 155: code.transaction.v2.GetLimitsResponse.MicroPaymentLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.MicroPaymentLimit + 82, // 156: code.transaction.v2.GetLimitsResponse.BuyModuleLimitsByCurrencyEntry.value:type_name -> code.transaction.v2.BuyModuleLimit + 101, // 157: code.transaction.v2.SwapRequest.Initiate.owner:type_name -> code.common.v1.SolanaAccountId + 101, // 158: code.transaction.v2.SwapRequest.Initiate.swap_authority:type_name -> code.common.v1.SolanaAccountId + 102, // 159: code.transaction.v2.SwapRequest.Initiate.signature:type_name -> code.common.v1.Signature + 102, // 160: code.transaction.v2.SwapRequest.SubmitSignature.signature:type_name -> code.common.v1.Signature + 101, // 161: code.transaction.v2.SwapResponse.ServerParameters.payer:type_name -> code.common.v1.SolanaAccountId + 108, // 162: code.transaction.v2.SwapResponse.ServerParameters.recent_blockhash:type_name -> code.common.v1.Blockhash + 101, // 163: code.transaction.v2.SwapResponse.ServerParameters.swap_program:type_name -> code.common.v1.SolanaAccountId + 112, // 164: code.transaction.v2.SwapResponse.ServerParameters.swap_ixn_accounts:type_name -> code.common.v1.InstructionAccount + 101, // 165: code.transaction.v2.SwapResponse.ServerParameters.nonce:type_name -> code.common.v1.SolanaAccountId + 12, // 166: code.transaction.v2.SwapResponse.Success.code:type_name -> code.transaction.v2.SwapResponse.Success.Code + 13, // 167: code.transaction.v2.SwapResponse.Error.code:type_name -> code.transaction.v2.SwapResponse.Error.Code + 70, // 168: code.transaction.v2.SwapResponse.Error.error_details:type_name -> code.transaction.v2.ErrorDetails + 110, // 169: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.transaction_blob:type_name -> code.common.v1.Transaction + 102, // 170: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.client_signature:type_name -> code.common.v1.Signature + 107, // 171: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.source_account_type:type_name -> code.common.v1.AccountType + 101, // 172: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.original_destination:type_name -> code.common.v1.SolanaAccountId + 101, // 173: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.treasury:type_name -> code.common.v1.SolanaAccountId + 109, // 174: code.transaction.v2.UpgradeableIntent.UpgradeablePrivateAction.recent_root:type_name -> code.common.v1.Hash + 20, // 175: code.transaction.v2.Transaction.SubmitIntent:input_type -> code.transaction.v2.SubmitIntentRequest + 22, // 176: code.transaction.v2.Transaction.GetIntentMetadata:input_type -> code.transaction.v2.GetIntentMetadataRequest + 24, // 177: code.transaction.v2.Transaction.GetPrivacyUpgradeStatus:input_type -> code.transaction.v2.GetPrivacyUpgradeStatusRequest + 26, // 178: code.transaction.v2.Transaction.GetPrioritizedIntentsForPrivacyUpgrade:input_type -> code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeRequest + 28, // 179: code.transaction.v2.Transaction.GetLimits:input_type -> code.transaction.v2.GetLimitsRequest + 30, // 180: code.transaction.v2.Transaction.GetPaymentHistory:input_type -> code.transaction.v2.GetPaymentHistoryRequest + 32, // 181: code.transaction.v2.Transaction.CanWithdrawToAccount:input_type -> code.transaction.v2.CanWithdrawToAccountRequest + 34, // 182: code.transaction.v2.Transaction.Airdrop:input_type -> code.transaction.v2.AirdropRequest + 36, // 183: code.transaction.v2.Transaction.Swap:input_type -> code.transaction.v2.SwapRequest + 38, // 184: code.transaction.v2.Transaction.DeclareFiatOnrampPurchaseAttempt:input_type -> code.transaction.v2.DeclareFiatOnrampPurchaseAttemptRequest + 21, // 185: code.transaction.v2.Transaction.SubmitIntent:output_type -> code.transaction.v2.SubmitIntentResponse + 23, // 186: code.transaction.v2.Transaction.GetIntentMetadata:output_type -> code.transaction.v2.GetIntentMetadataResponse + 25, // 187: code.transaction.v2.Transaction.GetPrivacyUpgradeStatus:output_type -> code.transaction.v2.GetPrivacyUpgradeStatusResponse + 27, // 188: code.transaction.v2.Transaction.GetPrioritizedIntentsForPrivacyUpgrade:output_type -> code.transaction.v2.GetPrioritizedIntentsForPrivacyUpgradeResponse + 29, // 189: code.transaction.v2.Transaction.GetLimits:output_type -> code.transaction.v2.GetLimitsResponse + 31, // 190: code.transaction.v2.Transaction.GetPaymentHistory:output_type -> code.transaction.v2.GetPaymentHistoryResponse + 33, // 191: code.transaction.v2.Transaction.CanWithdrawToAccount:output_type -> code.transaction.v2.CanWithdrawToAccountResponse + 35, // 192: code.transaction.v2.Transaction.Airdrop:output_type -> code.transaction.v2.AirdropResponse + 37, // 193: code.transaction.v2.Transaction.Swap:output_type -> code.transaction.v2.SwapResponse + 39, // 194: code.transaction.v2.Transaction.DeclareFiatOnrampPurchaseAttempt:output_type -> code.transaction.v2.DeclareFiatOnrampPurchaseAttemptResponse + 185, // [185:195] is the sub-list for method output_type + 175, // [175:185] is the sub-list for method input_type + 175, // [175:175] is the sub-list for extension type_name + 175, // [175:175] is the sub-list for extension extendee + 0, // [0:175] is the sub-list for field type_name } func init() { file_transaction_v2_transaction_service_proto_init() } @@ -9144,7 +9259,7 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cursor); i { + switch v := v.(*FriendedUser); i { case 0: return &v.state case 1: @@ -9156,7 +9271,7 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitIntentRequest_SubmitActions); i { + switch v := v.(*Cursor); i { case 0: return &v.state case 1: @@ -9168,7 +9283,7 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitIntentRequest_SubmitSignatures); i { + switch v := v.(*SubmitIntentRequest_SubmitActions); i { case 0: return &v.state case 1: @@ -9180,7 +9295,7 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitIntentResponse_ServerParameters); i { + switch v := v.(*SubmitIntentRequest_SubmitSignatures); i { case 0: return &v.state case 1: @@ -9192,7 +9307,7 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitIntentResponse_Success); i { + switch v := v.(*SubmitIntentResponse_ServerParameters); i { case 0: return &v.state case 1: @@ -9204,6 +9319,18 @@ func file_transaction_v2_transaction_service_proto_init() { } } file_transaction_v2_transaction_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitIntentResponse_Success); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transaction_v2_transaction_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitIntentResponse_Error); i { case 0: return &v.state @@ -9215,7 +9342,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapRequest_Initiate); i { case 0: return &v.state @@ -9227,7 +9354,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapRequest_SubmitSignature); i { case 0: return &v.state @@ -9239,7 +9366,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapResponse_ServerParameters); i { case 0: return &v.state @@ -9251,7 +9378,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapResponse_Success); i { case 0: return &v.state @@ -9263,7 +9390,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapResponse_Error); i { case 0: return &v.state @@ -9275,7 +9402,7 @@ func file_transaction_v2_transaction_service_proto_init() { return nil } } - file_transaction_v2_transaction_service_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_transaction_v2_transaction_service_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpgradeableIntent_UpgradeablePrivateAction); i { case 0: return &v.state @@ -9348,8 +9475,8 @@ func file_transaction_v2_transaction_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_transaction_v2_transaction_service_proto_rawDesc, - NumEnums: 19, - NumMessages: 79, + NumEnums: 20, + NumMessages: 80, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/transaction/v2/transaction_service.pb.validate.go b/generated/go/transaction/v2/transaction_service.pb.validate.go index 9f1caeb..49c1d24 100644 --- a/generated/go/transaction/v2/transaction_service.pb.validate.go +++ b/generated/go/transaction/v2/transaction_service.pb.validate.go @@ -6502,6 +6502,89 @@ var _TippedUser_Platform_InLookup = map[TippedUser_Platform]struct{}{ 1: {}, } +// Validate checks the field values on FriendedUser with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *FriendedUser) Validate() error { + if m == nil { + return nil + } + + if _, ok := _FriendedUser_Platform_InLookup[m.GetPlatform()]; !ok { + return FriendedUserValidationError{ + field: "Platform", + reason: "value must be in list [1]", + } + } + + if l := utf8.RuneCountInString(m.GetUsername()); l < 1 || l > 15 { + return FriendedUserValidationError{ + field: "Username", + reason: "value length must be between 1 and 15 runes, inclusive", + } + } + + return nil +} + +// FriendedUserValidationError is the validation error returned by +// FriendedUser.Validate if the designated constraints aren't met. +type FriendedUserValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FriendedUserValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FriendedUserValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FriendedUserValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FriendedUserValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FriendedUserValidationError) ErrorName() string { return "FriendedUserValidationError" } + +// Error satisfies the builtin error interface +func (e FriendedUserValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFriendedUser.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FriendedUserValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FriendedUserValidationError{} + +var _FriendedUser_Platform_InLookup = map[FriendedUser_Platform]struct{}{ + 1: {}, +} + // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Cursor) Validate() error { diff --git a/generated/protobuf-es/transaction/v2/transaction_service_pb.ts b/generated/protobuf-es/transaction/v2/transaction_service_pb.ts index 1279506..2e73822 100644 --- a/generated/protobuf-es/transaction/v2/transaction_service_pb.ts +++ b/generated/protobuf-es/transaction/v2/transaction_service_pb.ts @@ -5083,6 +5083,69 @@ proto3.util.setEnumType(TippedUser_Platform, "code.transaction.v2.TippedUser.Pla { no: 1, name: "TWITTER" }, ]); +/** + * @generated from message code.transaction.v2.FriendedUser + */ +export class FriendedUser extends Message { + /** + * @generated from field: code.transaction.v2.FriendedUser.Platform platform = 1; + */ + platform = FriendedUser_Platform.UNKNOWN; + + /** + * @generated from field: string username = 2; + */ + username = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.transaction.v2.FriendedUser"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "platform", kind: "enum", T: proto3.getEnumType(FriendedUser_Platform) }, + { no: 2, name: "username", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FriendedUser { + return new FriendedUser().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FriendedUser { + return new FriendedUser().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FriendedUser { + return new FriendedUser().fromJsonString(jsonString, options); + } + + static equals(a: FriendedUser | PlainMessage | undefined, b: FriendedUser | PlainMessage | undefined): boolean { + return proto3.util.equals(FriendedUser, a, b); + } +} + +/** + * @generated from enum code.transaction.v2.FriendedUser.Platform + */ +export enum FriendedUser_Platform { + /** + * @generated from enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + + /** + * @generated from enum value: TWITTER = 1; + */ + TWITTER = 1, +} +// Retrieve enum metadata with: proto3.getEnumType(FriendedUser_Platform) +proto3.util.setEnumType(FriendedUser_Platform, "code.transaction.v2.FriendedUser.Platform", [ + { no: 0, name: "UNKNOWN" }, + { no: 1, name: "TWITTER" }, +]); + /** * @generated from message code.transaction.v2.Cursor */ diff --git a/proto/transaction/v2/transaction_service.proto b/proto/transaction/v2/transaction_service.proto index 6342138..387b33c 100644 --- a/proto/transaction/v2/transaction_service.proto +++ b/proto/transaction/v2/transaction_service.proto @@ -1432,6 +1432,21 @@ message TippedUser { }]; } +message FriendedUser { + Platform platform = 1 [(validate.rules).enum = { + in: [1] // TWITTER + }]; + enum Platform { + UNKNOWN = 0; + TWITTER = 1; + } + + string username = 2 [(validate.rules).string = { + min_len: 1 + max_len: 15 + }]; +} + message Cursor { bytes value = 1 [(validate.rules).bytes = { min_len: 8 From 9ca6a04149e5bed794d85c76b33a85be9bacb1f3 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 18:43:57 -0400 Subject: [PATCH 06/15] chat/v2: require providing identity for starting chat --- generated/go/chat/v2/chat_service.pb.go | 1164 +++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 17 + .../protobuf-es/chat/v2/chat_service_pb.ts | 10 +- proto/chat/v2/chat_service.proto | 4 +- 4 files changed, 617 insertions(+), 578 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 080f1f7..87f6ad7 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -1582,6 +1582,7 @@ type StartChatRequest struct { Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + Self *ChatMemberIdentity `protobuf:"bytes,3,opt,name=self,proto3" json:"self,omitempty"` // Types that are assignable to Parameters: // // *StartChatRequest_TwoWayChat @@ -1634,6 +1635,13 @@ func (x *StartChatRequest) GetSignature() *v1.Signature { return nil } +func (x *StartChatRequest) GetSelf() *ChatMemberIdentity { + if x != nil { + return x.Self + } + return nil +} + func (m *StartChatRequest) GetParameters() isStartChatRequest_Parameters { if m != nil { return m.Parameters @@ -1653,7 +1661,7 @@ type isStartChatRequest_Parameters interface { } type StartChatRequest_TwoWayChat struct { - TwoWayChat *StartTwoWayChatParameters `protobuf:"bytes,3,opt,name=two_way_chat,json=twoWayChat,proto3,oneof"` // GroupChatParameters group_chat = 4; + TwoWayChat *StartTwoWayChatParameters `protobuf:"bytes,4,opt,name=two_way_chat,json=twoWayChat,proto3,oneof"` // GroupChatParameters group_chat = 4; } func (*StartChatRequest_TwoWayChat) isStartChatRequest_Parameters() {} @@ -3921,7 +3929,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xbe, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, @@ -3931,171 +3939,145 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, 0x79, - 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, - 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, + 0x61, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, + 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, + 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, + 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, + 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x03, 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, + 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, - 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x40, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, - 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, + 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x10, 0x04, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, - 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, - 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x04, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, - 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, - 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, - 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, - 0x04, 0x22, 0xeb, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, - 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, - 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, - 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, - 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, - 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, - 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, - 0x03, 0x22, 0xcc, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x10, 0x04, 0x22, 0xeb, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, + 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, + 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, @@ -4104,334 +4086,365 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, - 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, - 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, - 0x42, 0x45, 0x10, 0x03, 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, - 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdb, - 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, - 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, - 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, - 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, - 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, - 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, - 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, - 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, - 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, - 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, - 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb3, 0x01, - 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, - 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, - 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, - 0x01, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, - 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, - 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, - 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, - 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, - 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, - 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, - 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, - 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, - 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, - 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, - 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, - 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, - 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, - 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, - 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, - 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, - 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, - 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, - 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, - 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, - 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, - 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, - 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, - 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, - 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, - 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, + 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, + 0x45, 0x10, 0x03, 0x22, 0xcc, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, + 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, + 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, - 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, - 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, - 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, - 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, - 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, - 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, - 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, + 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, + 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, + 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, + 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, + 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, + 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, + 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, + 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, + 0xb3, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, + 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, + 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, + 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, + 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, + 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, + 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, + 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, + 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, + 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, + 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, + 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, + 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, + 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, + 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, + 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, + 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, + 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, + 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, + 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, + 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, + 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, + 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, + 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, + 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, + 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, + 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, + 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, + 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, + 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, - 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, - 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, - 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, - 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, - 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, - 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, - 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, - 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, - 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, + 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, + 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4547,102 +4560,103 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 23, // 27: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError 57, // 28: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId 58, // 29: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 27, // 30: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters - 57, // 31: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId - 62, // 32: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId - 8, // 33: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 43, // 34: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 59, // 35: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 36: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 48, // 37: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 57, // 38: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 39: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 40: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 44, // 41: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 42: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId - 47, // 43: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 57, // 44: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 45: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 46: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 59, // 47: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 48: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 49: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity - 57, // 50: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 51: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 11, // 52: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 44, // 53: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 54: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 55: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 56: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 57: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 58: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 59, // 59: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 60: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 61: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 62: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 63: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 59, // 64: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 65: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 66: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 67: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature - 14, // 68: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result - 59, // 69: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId - 0, // 70: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType - 45, // 71: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 55, // 72: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 41, // 73: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 42, // 74: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 48, // 75: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 63, // 76: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 55, // 77: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 42, // 78: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 79: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 47, // 80: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 81: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 82: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType - 41, // 83: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 42, // 84: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 49, // 85: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 50, // 86: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 51, // 87: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 52, // 88: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 53, // 89: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 54, // 90: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 15, // 91: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 64, // 92: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 65, // 93: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 62, // 94: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 58, // 95: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 57, // 96: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 62, // 97: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 42, // 98: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 99: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity - 42, // 100: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId - 16, // 101: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 18, // 102: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 24, // 103: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 26, // 104: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 29, // 105: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 31, // 106: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 33, // 107: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 35, // 108: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 37, // 109: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 39, // 110: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 17, // 111: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 19, // 112: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 25, // 113: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 28, // 114: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 30, // 115: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 32, // 116: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 34, // 117: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 36, // 118: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 38, // 119: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 40, // 120: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 111, // [111:121] is the sub-list for method output_type - 101, // [101:111] is the sub-list for method input_type - 101, // [101:101] is the sub-list for extension type_name - 101, // [101:101] is the sub-list for extension extendee - 0, // [0:101] is the sub-list for field type_name + 46, // 30: code.chat.v2.StartChatRequest.self:type_name -> code.chat.v2.ChatMemberIdentity + 27, // 31: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters + 57, // 32: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId + 62, // 33: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 34: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 43, // 35: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 59, // 36: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 37: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 48, // 38: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 57, // 39: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 40: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 41: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 44, // 42: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 43: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId + 47, // 44: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 57, // 45: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 46: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 47: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 59, // 48: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 49: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 50: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 57, // 51: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 52: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 11, // 53: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 44, // 54: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 55: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 56: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 57: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 58: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 59: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 59, // 60: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 61: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 62: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 63: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 64: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 59, // 65: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 66: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 67: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 68: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature + 14, // 69: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result + 59, // 70: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId + 0, // 71: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType + 45, // 72: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 55, // 73: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 41, // 74: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 42, // 75: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 48, // 76: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 63, // 77: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 55, // 78: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 42, // 79: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 80: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 47, // 81: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 82: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 83: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 41, // 84: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 42, // 85: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 49, // 86: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 50, // 87: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 51, // 88: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 52, // 89: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 53, // 90: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 54, // 91: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 15, // 92: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 64, // 93: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 65, // 94: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 62, // 95: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 58, // 96: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 57, // 97: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 62, // 98: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 42, // 99: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 100: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 42, // 101: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId + 16, // 102: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 18, // 103: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 24, // 104: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 26, // 105: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 29, // 106: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 31, // 107: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 33, // 108: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 35, // 109: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 37, // 110: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 39, // 111: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 17, // 112: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 19, // 113: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 25, // 114: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 28, // 115: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 30, // 116: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 32, // 117: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 34, // 118: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 36, // 119: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 38, // 120: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 40, // 121: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 112, // [112:122] is the sub-list for method output_type + 102, // [102:112] is the sub-list for method input_type + 102, // [102:102] is the sub-list for extension type_name + 102, // [102:102] is the sub-list for extension extendee + 0, // [0:102] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 88e96af..a9904e9 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1145,6 +1145,23 @@ func (m *StartChatRequest) Validate() error { } } + if m.GetSelf() == nil { + return StartChatRequestValidationError{ + field: "Self", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSelf()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "Self", + reason: "embedded message failed validation", + cause: err, + } + } + } + switch m.Parameters.(type) { case *StartChatRequest_TwoWayChat: diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index f4f4f53..e48ef9d 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -729,6 +729,11 @@ export class StartChatRequest extends Message { */ signature?: Signature; + /** + * @generated from field: code.chat.v2.ChatMemberIdentity self = 3; + */ + self?: ChatMemberIdentity; + /** * @generated from oneof code.chat.v2.StartChatRequest.parameters */ @@ -736,7 +741,7 @@ export class StartChatRequest extends Message { /** * GroupChatParameters group_chat = 4; * - * @generated from field: code.chat.v2.StartTwoWayChatParameters two_way_chat = 3; + * @generated from field: code.chat.v2.StartTwoWayChatParameters two_way_chat = 4; */ value: StartTwoWayChatParameters; case: "twoWayChat"; @@ -752,7 +757,8 @@ export class StartChatRequest extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, { no: 2, name: "signature", kind: "message", T: Signature }, - { no: 3, name: "two_way_chat", kind: "message", T: StartTwoWayChatParameters, oneof: "parameters" }, + { no: 3, name: "self", kind: "message", T: ChatMemberIdentity }, + { no: 4, name: "two_way_chat", kind: "message", T: StartTwoWayChatParameters, oneof: "parameters" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartChatRequest { diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 2bfad6c..42ca58a 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -200,10 +200,12 @@ message StartChatRequest { common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + ChatMemberIdentity self = 3 [(validate.rules).message.required = true]; + oneof parameters { option (validate.required) = true; - StartTwoWayChatParameters two_way_chat = 3; + StartTwoWayChatParameters two_way_chat = 4; // GroupChatParameters group_chat = 4; } } From 73c60b4d22763fbdf42ea4e34f0f30e5997c3e72 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 3 Sep 2024 18:55:11 -0400 Subject: [PATCH 07/15] chat/v2: temporary hack to circumvent the need for intent. --- generated/go/chat/v2/chat_service.pb.go | 1116 +++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 17 + .../protobuf-es/chat/v2/chat_service_pb.ts | 10 + proto/chat/v2/chat_service.proto | 5 + 4 files changed, 598 insertions(+), 550 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 87f6ad7..16b9d3a 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -1689,6 +1689,10 @@ type StartTwoWayChatParameters struct { // This is most likely to occur when initiating a chat with a user for the first // time. IntentId *v1.IntentId `protobuf:"bytes,2,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` + // The identity of the other user. + // + // Note: This can/should be removed with proper intent plumbing. + Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` } func (x *StartTwoWayChatParameters) Reset() { @@ -1737,6 +1741,13 @@ func (x *StartTwoWayChatParameters) GetIntentId() *v1.IntentId { return nil } +func (x *StartTwoWayChatParameters) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + type StartChatResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3949,7 +3960,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, + 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe8, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, @@ -3959,88 +3970,160 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, - 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, - 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, - 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, - 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, - 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x04, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, + 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, + 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0xdd, 0x02, 0x0a, + 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, + 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, + 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, + 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, + 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x99, + 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, + 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, + 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, + 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xeb, 0x02, + 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, + 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, + 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, + 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, + 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x10, 0x04, 0x22, 0xeb, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, + 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, + 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xcc, 0x02, + 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, @@ -4049,11 +4132,40 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, + 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, + 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, + 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, @@ -4062,389 +4174,292 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, + 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, - 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, - 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, - 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, - 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, - 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, - 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, - 0x45, 0x10, 0x03, 0x22, 0xcc, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, + 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, + 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, - 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, - 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, - 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, + 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, + 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, + 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, - 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, - 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, + 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, + 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, + 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, + 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x12, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, + 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, + 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, + 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, + 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, + 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, + 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, + 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, + 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, + 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, + 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, + 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, + 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, + 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, + 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, + 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, + 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, + 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, + 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, - 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, + 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, + 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, - 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, - 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, - 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, - 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, - 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, - 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, - 0xb3, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, - 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, - 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, - 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, - 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, - 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, - 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, - 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, - 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, - 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, - 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, - 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, - 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, - 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, - 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, - 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, - 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, - 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, - 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, - 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, - 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, - 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, - 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, - 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, - 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, - 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, - 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, - 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, - 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, - 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, - 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, - 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, - 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, - 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, - 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, - 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, - 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, - 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, - 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, - 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, - 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, - 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, + 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, + 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, + 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, + 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, + 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, + 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, + 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4564,99 +4579,100 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 27, // 31: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters 57, // 32: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId 62, // 33: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId - 8, // 34: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 43, // 35: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 59, // 36: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 37: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 48, // 38: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 57, // 39: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 40: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 41: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 44, // 42: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 43: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId - 47, // 44: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 57, // 45: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 46: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 47: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 59, // 48: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 49: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 50: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity - 57, // 51: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 52: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 11, // 53: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 44, // 54: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 55: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 56: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 57: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 58: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 59: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 59, // 60: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 61: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 62: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 63: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 64: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 59, // 65: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 66: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 67: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 68: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature - 14, // 69: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result - 59, // 70: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId - 0, // 71: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType - 45, // 72: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 55, // 73: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 41, // 74: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 42, // 75: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 48, // 76: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 63, // 77: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 55, // 78: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 42, // 79: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 80: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 47, // 81: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 82: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 83: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType - 41, // 84: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 42, // 85: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 49, // 86: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 50, // 87: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 51, // 88: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 52, // 89: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 53, // 90: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 54, // 91: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 15, // 92: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 64, // 93: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 65, // 94: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 62, // 95: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 58, // 96: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 57, // 97: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 62, // 98: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 42, // 99: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 100: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity - 42, // 101: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId - 16, // 102: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 18, // 103: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 24, // 104: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 26, // 105: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 29, // 106: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 31, // 107: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 33, // 108: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 35, // 109: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 37, // 110: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 39, // 111: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 17, // 112: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 19, // 113: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 25, // 114: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 28, // 115: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 30, // 116: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 32, // 117: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 34, // 118: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 36, // 119: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 38, // 120: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 40, // 121: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 112, // [112:122] is the sub-list for method output_type - 102, // [102:112] is the sub-list for method input_type - 102, // [102:102] is the sub-list for extension type_name - 102, // [102:102] is the sub-list for extension extendee - 0, // [0:102] is the sub-list for field type_name + 46, // 34: code.chat.v2.StartTwoWayChatParameters.identity:type_name -> code.chat.v2.ChatMemberIdentity + 8, // 35: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 43, // 36: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 59, // 37: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 38: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 48, // 39: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 57, // 40: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 41: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 42: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 44, // 43: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 44: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId + 47, // 45: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 57, // 46: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 47: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 48: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 59, // 49: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 50: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 51: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 57, // 52: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 53: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 11, // 54: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 44, // 55: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage + 59, // 56: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 57: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 58: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 59: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 60: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 59, // 61: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 62: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 63: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 64: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 65: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 59, // 66: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 67: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 57, // 68: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId + 58, // 69: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature + 14, // 70: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result + 59, // 71: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId + 0, // 72: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType + 45, // 73: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 55, // 74: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 41, // 75: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 42, // 76: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 48, // 77: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 63, // 78: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 55, // 79: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 42, // 80: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 81: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 47, // 82: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 83: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 84: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 41, // 85: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 42, // 86: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 49, // 87: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 50, // 88: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 51, // 89: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 52, // 90: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 53, // 91: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 54, // 92: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 15, // 93: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 64, // 94: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 65, // 95: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 62, // 96: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 58, // 97: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 57, // 98: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 62, // 99: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 42, // 100: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 101: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 42, // 102: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId + 16, // 103: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 18, // 104: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 24, // 105: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 26, // 106: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 29, // 107: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 31, // 108: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 33, // 109: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 35, // 110: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 37, // 111: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 39, // 112: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 17, // 113: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 19, // 114: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 25, // 115: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 28, // 116: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 30, // 117: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 32, // 118: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 34, // 119: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 36, // 120: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 38, // 121: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 40, // 122: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 113, // [113:123] is the sub-list for method output_type + 103, // [103:113] is the sub-list for method input_type + 103, // [103:103] is the sub-list for extension type_name + 103, // [103:103] is the sub-list for extension extendee + 0, // [0:103] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index a9904e9..8e81264 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1276,6 +1276,23 @@ func (m *StartTwoWayChatParameters) Validate() error { } } + if m.GetIdentity() == nil { + return StartTwoWayChatParametersValidationError{ + field: "Identity", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartTwoWayChatParametersValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index e48ef9d..f936875 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -811,6 +811,15 @@ export class StartTwoWayChatParameters extends Message) { super(); proto3.util.initPartial(data, this); @@ -821,6 +830,7 @@ export class StartTwoWayChatParameters extends Message [ { no: 1, name: "other_user", kind: "message", T: SolanaAccountId }, { no: 2, name: "intent_id", kind: "message", T: IntentId }, + { no: 3, name: "identity", kind: "message", T: ChatMemberIdentity }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartTwoWayChatParameters { diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 42ca58a..5953809 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -230,6 +230,11 @@ message StartTwoWayChatParameters { // This is most likely to occur when initiating a chat with a user for the first // time. common.v1.IntentId intent_id = 2; + + // The identity of the other user. + // + // Note: This can/should be removed with proper intent plumbing. + ChatMemberIdentity identity = 3 [(validate.rules).message.required = true]; } message StartChatResponse { From 43bbfc12ca91728aa2231bafded2efeea9689dbe Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 17 Sep 2024 15:11:22 -0400 Subject: [PATCH 08/15] user: always return the ChatId for communicating with a twitter user. --- generated/go/user/v1/identity_service.pb.go | 165 ++++++++++-------- .../user/v1/identity_service.pb.validate.go | 10 ++ .../user/v1/identity_service_pb.ts | 14 +- proto/user/v1/identity_service.proto | 7 + 4 files changed, 122 insertions(+), 74 deletions(-) diff --git a/generated/go/user/v1/identity_service.pb.go b/generated/go/user/v1/identity_service.pb.go index 5e33d73..5f28edf 100644 --- a/generated/go/user/v1/identity_service.pb.go +++ b/generated/go/user/v1/identity_service.pb.go @@ -1697,6 +1697,12 @@ type TwitterUser struct { FriendshipCost *v2.ExchangeData `protobuf:"bytes,7,opt,name=friendship_cost,json=friendshipCost,proto3" json:"friendship_cost,omitempty"` // Indicates the user is a friend of the caller. IsFriend bool `protobuf:"varint,10,opt,name=is_friend,json=isFriend,proto3" json:"is_friend,omitempty"` + // The ChatId used to communicate with this friend. + // + // This will always be set for authenticated users. + // If is_friend=false, this ChatId should be used when crafting + // the intent. + FriendChatId *v1.ChatId `protobuf:"bytes,11,opt,name=friend_chat_id,json=friendChatId,proto3" json:"friend_chat_id,omitempty"` } func (x *TwitterUser) Reset() { @@ -1787,6 +1793,13 @@ func (x *TwitterUser) GetIsFriend() bool { return false } +func (x *TwitterUser) GetFriendChatId() *v1.ChatId { + if x != nil { + return x.FriendChatId + } + return nil +} + var File_user_v1_identity_service_proto protoreflect.FileDescriptor var file_user_v1_identity_service_proto_rawDesc = []byte{ @@ -2050,7 +2063,7 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x10, 0x01, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x0d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0xfb, 0x03, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0xb9, 0x04, 0x0a, 0x0b, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0b, 0x74, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, @@ -2078,61 +2091,65 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, - 0x4f, 0x56, 0x45, 0x52, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, + 0x08, 0x69, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x66, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x66, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x42, + 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4f, 0x56, + 0x45, 0x52, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, - 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, - 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, - 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, - 0x2d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x55, 0x6e, + 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, + 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x2d, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, + 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, + 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, - 0x50, 0x42, 0x55, 0x73, 0x65, 0x72, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, + 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, + 0x55, 0x73, 0x65, 0x72, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2186,6 +2203,7 @@ var file_user_v1_identity_service_proto_goTypes = []interface{}{ (*v1.IntentId)(nil), // 33: code.common.v1.IntentId (*v1.UserId)(nil), // 34: code.common.v1.UserId (*v2.ExchangeData)(nil), // 35: code.transaction.v2.ExchangeData + (*v1.ChatId)(nil), // 36: code.common.v1.ChatId } var file_user_v1_identity_service_proto_depIdxs = []int32{ 26, // 0: code.user.v1.LinkAccountRequest.owner_account_id:type_name -> code.common.v1.SolanaAccountId @@ -2232,25 +2250,26 @@ var file_user_v1_identity_service_proto_depIdxs = []int32{ 26, // 41: code.user.v1.TwitterUser.tip_address:type_name -> code.common.v1.SolanaAccountId 7, // 42: code.user.v1.TwitterUser.verified_type:type_name -> code.user.v1.TwitterUser.VerifiedType 35, // 43: code.user.v1.TwitterUser.friendship_cost:type_name -> code.transaction.v2.ExchangeData - 8, // 44: code.user.v1.Identity.LinkAccount:input_type -> code.user.v1.LinkAccountRequest - 10, // 45: code.user.v1.Identity.UnlinkAccount:input_type -> code.user.v1.UnlinkAccountRequest - 12, // 46: code.user.v1.Identity.GetUser:input_type -> code.user.v1.GetUserRequest - 14, // 47: code.user.v1.Identity.UpdatePreferences:input_type -> code.user.v1.UpdatePreferencesRequest - 16, // 48: code.user.v1.Identity.LoginToThirdPartyApp:input_type -> code.user.v1.LoginToThirdPartyAppRequest - 18, // 49: code.user.v1.Identity.GetLoginForThirdPartyApp:input_type -> code.user.v1.GetLoginForThirdPartyAppRequest - 20, // 50: code.user.v1.Identity.GetTwitterUser:input_type -> code.user.v1.GetTwitterUserRequest - 9, // 51: code.user.v1.Identity.LinkAccount:output_type -> code.user.v1.LinkAccountResponse - 11, // 52: code.user.v1.Identity.UnlinkAccount:output_type -> code.user.v1.UnlinkAccountResponse - 13, // 53: code.user.v1.Identity.GetUser:output_type -> code.user.v1.GetUserResponse - 15, // 54: code.user.v1.Identity.UpdatePreferences:output_type -> code.user.v1.UpdatePreferencesResponse - 17, // 55: code.user.v1.Identity.LoginToThirdPartyApp:output_type -> code.user.v1.LoginToThirdPartyAppResponse - 19, // 56: code.user.v1.Identity.GetLoginForThirdPartyApp:output_type -> code.user.v1.GetLoginForThirdPartyAppResponse - 21, // 57: code.user.v1.Identity.GetTwitterUser:output_type -> code.user.v1.GetTwitterUserResponse - 51, // [51:58] is the sub-list for method output_type - 44, // [44:51] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 36, // 44: code.user.v1.TwitterUser.friend_chat_id:type_name -> code.common.v1.ChatId + 8, // 45: code.user.v1.Identity.LinkAccount:input_type -> code.user.v1.LinkAccountRequest + 10, // 46: code.user.v1.Identity.UnlinkAccount:input_type -> code.user.v1.UnlinkAccountRequest + 12, // 47: code.user.v1.Identity.GetUser:input_type -> code.user.v1.GetUserRequest + 14, // 48: code.user.v1.Identity.UpdatePreferences:input_type -> code.user.v1.UpdatePreferencesRequest + 16, // 49: code.user.v1.Identity.LoginToThirdPartyApp:input_type -> code.user.v1.LoginToThirdPartyAppRequest + 18, // 50: code.user.v1.Identity.GetLoginForThirdPartyApp:input_type -> code.user.v1.GetLoginForThirdPartyAppRequest + 20, // 51: code.user.v1.Identity.GetTwitterUser:input_type -> code.user.v1.GetTwitterUserRequest + 9, // 52: code.user.v1.Identity.LinkAccount:output_type -> code.user.v1.LinkAccountResponse + 11, // 53: code.user.v1.Identity.UnlinkAccount:output_type -> code.user.v1.UnlinkAccountResponse + 13, // 54: code.user.v1.Identity.GetUser:output_type -> code.user.v1.GetUserResponse + 15, // 55: code.user.v1.Identity.UpdatePreferences:output_type -> code.user.v1.UpdatePreferencesResponse + 17, // 56: code.user.v1.Identity.LoginToThirdPartyApp:output_type -> code.user.v1.LoginToThirdPartyAppResponse + 19, // 57: code.user.v1.Identity.GetLoginForThirdPartyApp:output_type -> code.user.v1.GetLoginForThirdPartyAppResponse + 21, // 58: code.user.v1.Identity.GetTwitterUser:output_type -> code.user.v1.GetTwitterUserResponse + 52, // [52:59] is the sub-list for method output_type + 45, // [45:52] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_user_v1_identity_service_proto_init() } diff --git a/generated/go/user/v1/identity_service.pb.validate.go b/generated/go/user/v1/identity_service.pb.validate.go index 4301e79..4c9cf9d 100644 --- a/generated/go/user/v1/identity_service.pb.validate.go +++ b/generated/go/user/v1/identity_service.pb.validate.go @@ -1795,6 +1795,16 @@ func (m *TwitterUser) Validate() error { // no validation rules for IsFriend + if v, ok := interface{}(m.GetFriendChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TwitterUserValidationError{ + field: "FriendChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff --git a/generated/protobuf-es/user/v1/identity_service_pb.ts b/generated/protobuf-es/user/v1/identity_service_pb.ts index 2eef1ca..34815d8 100644 --- a/generated/protobuf-es/user/v1/identity_service_pb.ts +++ b/generated/protobuf-es/user/v1/identity_service_pb.ts @@ -5,7 +5,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto3 } from "@bufbuild/protobuf"; -import { DataContainerId, IntentId, Locale, PhoneNumber, Signature, SolanaAccountId, UserId } from "../../common/v1/model_pb"; +import { ChatId, DataContainerId, IntentId, Locale, PhoneNumber, Signature, SolanaAccountId, UserId } from "../../common/v1/model_pb"; import { PhoneLinkingToken } from "../../phone/v1/phone_verification_service_pb"; import { AirdropType, ExchangeData } from "../../transaction/v2/transaction_service_pb"; @@ -1251,6 +1251,17 @@ export class TwitterUser extends Message { */ isFriend = false; + /** + * The ChatId used to communicate with this friend. + * + * This will always be set for authenticated users. + * If is_friend=false, this ChatId should be used when crafting + * the intent. + * + * @generated from field: code.common.v1.ChatId friend_chat_id = 11; + */ + friendChatId?: ChatId; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1267,6 +1278,7 @@ export class TwitterUser extends Message { { no: 6, name: "follower_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, { no: 7, name: "friendship_cost", kind: "message", T: ExchangeData }, { no: 10, name: "is_friend", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 11, name: "friend_chat_id", kind: "message", T: ChatId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): TwitterUser { diff --git a/proto/user/v1/identity_service.proto b/proto/user/v1/identity_service.proto index 2eb36ae..38e1e69 100644 --- a/proto/user/v1/identity_service.proto +++ b/proto/user/v1/identity_service.proto @@ -386,4 +386,11 @@ message TwitterUser { // Indicates the user is a friend of the caller. bool is_friend = 10; + + // The ChatId used to communicate with this friend. + // + // This will always be set for authenticated users. + // If is_friend=false, this ChatId should be used when crafting + // the intent. + common.v1.ChatId friend_chat_id = 11; } From 82a26e4a01085e4a0cda325b66d3101f1fa89bd7 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Tue, 17 Sep 2024 15:21:50 -0400 Subject: [PATCH 09/15] user: return ExchangeDataWithoutRate, as we don't care about the rate --- generated/go/user/v1/identity_service.pb.go | 135 +++++++++--------- .../user/v1/identity_service_pb.ts | 8 +- proto/user/v1/identity_service.proto | 2 +- 3 files changed, 73 insertions(+), 72 deletions(-) diff --git a/generated/go/user/v1/identity_service.pb.go b/generated/go/user/v1/identity_service.pb.go index 5f28edf..6c0b831 100644 --- a/generated/go/user/v1/identity_service.pb.go +++ b/generated/go/user/v1/identity_service.pb.go @@ -1694,7 +1694,7 @@ type TwitterUser struct { // // This should not be cached for an extended period, as exchange rate / value // may change at any time. - FriendshipCost *v2.ExchangeData `protobuf:"bytes,7,opt,name=friendship_cost,json=friendshipCost,proto3" json:"friendship_cost,omitempty"` + FriendshipCost *v2.ExchangeDataWithoutRate `protobuf:"bytes,7,opt,name=friendship_cost,json=friendshipCost,proto3" json:"friendship_cost,omitempty"` // Indicates the user is a friend of the caller. IsFriend bool `protobuf:"varint,10,opt,name=is_friend,json=isFriend,proto3" json:"is_friend,omitempty"` // The ChatId used to communicate with this friend. @@ -1779,7 +1779,7 @@ func (x *TwitterUser) GetFollowerCount() uint32 { return 0 } -func (x *TwitterUser) GetFriendshipCost() *v2.ExchangeData { +func (x *TwitterUser) GetFriendshipCost() *v2.ExchangeDataWithoutRate { if x != nil { return x.FriendshipCost } @@ -2063,7 +2063,7 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x10, 0x01, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x0d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0xb9, 0x04, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0xc4, 0x04, 0x0a, 0x0b, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0b, 0x74, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, @@ -2085,71 +2085,72 @@ var file_user_v1_identity_service_proto_rawDesc = []byte{ 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x4a, 0x0a, 0x0f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x63, - 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x55, 0x0a, 0x0f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x63, + 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x66, 0x72, - 0x69, 0x65, 0x6e, 0x64, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x66, 0x72, 0x69, - 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x42, - 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4f, 0x56, - 0x45, 0x52, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x55, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, - 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, + 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, + 0x68, 0x69, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x42, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, + 0x53, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4f, 0x56, 0x45, 0x52, 0x4e, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x03, 0x32, 0xad, 0x05, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, + 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, + 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x79, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x2d, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, - 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, + 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, + 0x79, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x18, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x46, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, + 0x6f, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x77, + 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, + 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, - 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, - 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x75, 0x73, - 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, - 0x55, 0x73, 0x65, 0x72, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x5a, + 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, + 0x3b, 0x75, 0x73, 0x65, 0x72, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x55, 0x73, 0x65, 0x72, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2202,7 +2203,7 @@ var file_user_v1_identity_service_proto_goTypes = []interface{}{ (*v1.Locale)(nil), // 32: code.common.v1.Locale (*v1.IntentId)(nil), // 33: code.common.v1.IntentId (*v1.UserId)(nil), // 34: code.common.v1.UserId - (*v2.ExchangeData)(nil), // 35: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 35: code.transaction.v2.ExchangeDataWithoutRate (*v1.ChatId)(nil), // 36: code.common.v1.ChatId } var file_user_v1_identity_service_proto_depIdxs = []int32{ @@ -2249,7 +2250,7 @@ var file_user_v1_identity_service_proto_depIdxs = []int32{ 30, // 40: code.user.v1.View.phone_number:type_name -> code.common.v1.PhoneNumber 26, // 41: code.user.v1.TwitterUser.tip_address:type_name -> code.common.v1.SolanaAccountId 7, // 42: code.user.v1.TwitterUser.verified_type:type_name -> code.user.v1.TwitterUser.VerifiedType - 35, // 43: code.user.v1.TwitterUser.friendship_cost:type_name -> code.transaction.v2.ExchangeData + 35, // 43: code.user.v1.TwitterUser.friendship_cost:type_name -> code.transaction.v2.ExchangeDataWithoutRate 36, // 44: code.user.v1.TwitterUser.friend_chat_id:type_name -> code.common.v1.ChatId 8, // 45: code.user.v1.Identity.LinkAccount:input_type -> code.user.v1.LinkAccountRequest 10, // 46: code.user.v1.Identity.UnlinkAccount:input_type -> code.user.v1.UnlinkAccountRequest diff --git a/generated/protobuf-es/user/v1/identity_service_pb.ts b/generated/protobuf-es/user/v1/identity_service_pb.ts index 34815d8..96b183e 100644 --- a/generated/protobuf-es/user/v1/identity_service_pb.ts +++ b/generated/protobuf-es/user/v1/identity_service_pb.ts @@ -7,7 +7,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialM import { Message, proto3 } from "@bufbuild/protobuf"; import { ChatId, DataContainerId, IntentId, Locale, PhoneNumber, Signature, SolanaAccountId, UserId } from "../../common/v1/model_pb"; import { PhoneLinkingToken } from "../../phone/v1/phone_verification_service_pb"; -import { AirdropType, ExchangeData } from "../../transaction/v2/transaction_service_pb"; +import { AirdropType, ExchangeDataWithoutRate } from "../../transaction/v2/transaction_service_pb"; /** * @generated from message code.user.v1.LinkAccountRequest @@ -1240,9 +1240,9 @@ export class TwitterUser extends Message { * This should not be cached for an extended period, as exchange rate / value * may change at any time. * - * @generated from field: code.transaction.v2.ExchangeData friendship_cost = 7; + * @generated from field: code.transaction.v2.ExchangeDataWithoutRate friendship_cost = 7; */ - friendshipCost?: ExchangeData; + friendshipCost?: ExchangeDataWithoutRate; /** * Indicates the user is a friend of the caller. @@ -1276,7 +1276,7 @@ export class TwitterUser extends Message { { no: 4, name: "profile_pic_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "verified_type", kind: "enum", T: proto3.getEnumType(TwitterUser_VerifiedType) }, { no: 6, name: "follower_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, - { no: 7, name: "friendship_cost", kind: "message", T: ExchangeData }, + { no: 7, name: "friendship_cost", kind: "message", T: ExchangeDataWithoutRate }, { no: 10, name: "is_friend", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, { no: 11, name: "friend_chat_id", kind: "message", T: ChatId }, ]); diff --git a/proto/user/v1/identity_service.proto b/proto/user/v1/identity_service.proto index 38e1e69..eff58f1 100644 --- a/proto/user/v1/identity_service.proto +++ b/proto/user/v1/identity_service.proto @@ -378,7 +378,7 @@ message TwitterUser { // // This should not be cached for an extended period, as exchange rate / value // may change at any time. - transaction.v2.ExchangeData friendship_cost = 7; + transaction.v2.ExchangeDataWithoutRate friendship_cost = 7; // =========================================================== // The rest of the fields require authentication to be present. From d5567bcb2c3c0102a6f79023255f816efb4acf4f Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Wed, 18 Sep 2024 09:51:49 -0400 Subject: [PATCH 10/15] common: relax ChatId space requirements. We may not use sha256 for every single ChatId. --- proto/common/v1/model.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/common/v1/model.proto b/proto/common/v1/model.proto index 0c14f9f..d455206 100644 --- a/proto/common/v1/model.proto +++ b/proto/common/v1/model.proto @@ -96,7 +96,7 @@ message ChatId { // Sufficient space is left for a consistent hash value, though other types // of values may be used. bytes value = 1 [(validate.rules).bytes = { - min_len: 32 + min_len: 16 max_len: 32 }]; } From b04180279f5f758db4ece8d854f800e1861ab008 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Wed, 18 Sep 2024 11:32:28 -0400 Subject: [PATCH 11/15] chat: remove min req on profile pic url --- generated/go/chat/v2/chat_service.pb.go | 396 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 4 +- proto/chat/v2/chat_service.proto | 1 - 3 files changed, 200 insertions(+), 201 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 16b9d3a..f4b895a 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -4251,7 +4251,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x12, 0x43, 0x68, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb1, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, @@ -4259,207 +4259,207 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0f, 0x70, 0x72, 0x6f, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, - 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, - 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0d, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, + 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, + 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, + 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, + 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, + 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, - 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, - 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, - 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, - 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, - 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, - 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, - 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, - 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, - 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, - 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, - 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, - 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, - 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, - 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, - 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, - 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, - 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, - 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, - 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, - 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, - 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, - 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, - 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, - 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, - 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, - 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, - 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, - 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, + 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, + 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, + 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, + 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, + 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, + 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, + 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, + 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, + 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, + 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, + 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, + 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, + 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, + 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, + 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, + 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, + 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, + 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, + 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, + 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, - 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, - 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, - 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, - 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, + 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, + 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, + 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, + 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, + 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 8e81264..9841666 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -3276,10 +3276,10 @@ func (m *ChatMemberIdentity) Validate() error { } } - if l := utf8.RuneCountInString(m.GetProfilePicUrl()); l < 1 || l > 255 { + if utf8.RuneCountInString(m.GetProfilePicUrl()) > 255 { return ChatMemberIdentityValidationError{ field: "ProfilePicUrl", - reason: "value length must be between 1 and 255 runes, inclusive", + reason: "value length must be at most 255 runes", } } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 5953809..e98c71e 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -554,7 +554,6 @@ message ChatMemberIdentity { // If present, the URL of the users profile pic. string profile_pic_url = 3 [(validate.rules).string = { - min_len: 1 max_len: 255 // Arbitrary limit }]; } From 0d6798fdd5b8c8457fbc50a3f181199d86203001 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Mon, 30 Sep 2024 12:13:50 -0400 Subject: [PATCH 12/15] chat: overhaul + cleanup of chat service protos. As we no longer look to fully replace v1, we can make some simplifying internal changes with how the system works. While most of that is on server, some of the response codes and layouts (i.e. around identity) shift. Those changes are reflected here. --- generated/go/chat/v2/chat_service.pb.go | 2812 ++++++----------- .../go/chat/v2/chat_service.pb.validate.go | 1206 ++----- generated/go/chat/v2/chat_service_grpc.pb.go | 90 +- generated/go/common/v1/model.pb.go | 2 +- generated/go/common/v1/model.pb.validate.go | 4 +- .../chat/v2/chat_service_connect.ts | 31 +- .../protobuf-es/chat/v2/chat_service_pb.ts | 1002 ++---- proto/chat/v2/chat_service.proto | 306 +- 8 files changed, 1548 insertions(+), 3905 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index f4b895a..7d3282d 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -28,21 +28,18 @@ type ChatType int32 const ( ChatType_UNKNOWN_CHAT_TYPE ChatType = 0 - ChatType_NOTIFICATION ChatType = 1 - ChatType_TWO_WAY ChatType = 2 // GROUP = 3; + ChatType_TWO_WAY ChatType = 1 // GROUP = 3; ) // Enum value maps for ChatType. var ( ChatType_name = map[int32]string{ 0: "UNKNOWN_CHAT_TYPE", - 1: "NOTIFICATION", - 2: "TWO_WAY", + 1: "TWO_WAY", } ChatType_value = map[string]int32{ "UNKNOWN_CHAT_TYPE": 0, - "NOTIFICATION": 1, - "TWO_WAY": 2, + "TWO_WAY": 1, } ) @@ -220,19 +217,16 @@ func (GetChatsRequest_Direction) EnumDescriptor() ([]byte, []int) { type GetChatsResponse_Result int32 const ( - GetChatsResponse_OK GetChatsResponse_Result = 0 - GetChatsResponse_NOT_FOUND GetChatsResponse_Result = 1 + GetChatsResponse_OK GetChatsResponse_Result = 0 ) // Enum value maps for GetChatsResponse_Result. var ( GetChatsResponse_Result_name = map[int32]string{ 0: "OK", - 1: "NOT_FOUND", } GetChatsResponse_Result_value = map[string]int32{ - "OK": 0, - "NOT_FOUND": 1, + "OK": 0, } ) @@ -312,10 +306,8 @@ func (GetMessagesRequest_Direction) EnumDescriptor() ([]byte, []int) { type GetMessagesResponse_Result int32 const ( - GetMessagesResponse_OK GetMessagesResponse_Result = 0 - GetMessagesResponse_DENIED GetMessagesResponse_Result = 1 - GetMessagesResponse_CHAT_NOT_FOUND GetMessagesResponse_Result = 2 - GetMessagesResponse_MESSAGE_NOT_FOUND GetMessagesResponse_Result = 3 + GetMessagesResponse_OK GetMessagesResponse_Result = 0 + GetMessagesResponse_DENIED GetMessagesResponse_Result = 1 ) // Enum value maps for GetMessagesResponse_Result. @@ -323,14 +315,10 @@ var ( GetMessagesResponse_Result_name = map[int32]string{ 0: "OK", 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "MESSAGE_NOT_FOUND", } GetMessagesResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "MESSAGE_NOT_FOUND": 3, + "OK": 0, + "DENIED": 1, } ) @@ -364,19 +352,16 @@ func (GetMessagesResponse_Result) EnumDescriptor() ([]byte, []int) { type ChatStreamEventError_Code int32 const ( - ChatStreamEventError_DENIED ChatStreamEventError_Code = 0 - ChatStreamEventError_CHAT_NOT_FOUND ChatStreamEventError_Code = 1 + ChatStreamEventError_DENIED ChatStreamEventError_Code = 0 ) // Enum value maps for ChatStreamEventError_Code. var ( ChatStreamEventError_Code_name = map[int32]string{ 0: "DENIED", - 1: "CHAT_NOT_FOUND", } ChatStreamEventError_Code_value = map[string]int32{ - "DENIED": 0, - "CHAT_NOT_FOUND": 1, + "DENIED": 0, } ) @@ -419,6 +404,10 @@ const ( // before the service will permit the creation of the chat. This can happen in // cases where the block chain is particularly slow (beyond our RPC timeouts). StartChatResponse_PENDING StartChatResponse_Result = 3 + // MISSING_IDENTITY indicates that there is no identity for the user (creator). + StartChatResponse_MISSING_IDENTITY StartChatResponse_Result = 4 + // USER_NOT_FOUND indicates that (one of) the target user's was not found. + StartChatResponse_USER_NOT_FOUND StartChatResponse_Result = 5 ) // Enum value maps for StartChatResponse_Result. @@ -428,12 +417,16 @@ var ( 1: "DENIED", 2: "INVALID_PARAMETER", 3: "PENDING", + 4: "MISSING_IDENTITY", + 5: "USER_NOT_FOUND", } StartChatResponse_Result_value = map[string]int32{ "OK": 0, "DENIED": 1, "INVALID_PARAMETER": 2, "PENDING": 3, + "MISSING_IDENTITY": 4, + "USER_NOT_FOUND": 5, } ) @@ -469,9 +462,7 @@ type SendMessageResponse_Result int32 const ( SendMessageResponse_OK SendMessageResponse_Result = 0 SendMessageResponse_DENIED SendMessageResponse_Result = 1 - SendMessageResponse_CHAT_NOT_FOUND SendMessageResponse_Result = 2 - SendMessageResponse_INVALID_CHAT_TYPE SendMessageResponse_Result = 3 - SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 4 + SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 2 ) // Enum value maps for SendMessageResponse_Result. @@ -479,16 +470,12 @@ var ( SendMessageResponse_Result_name = map[int32]string{ 0: "OK", 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "INVALID_CHAT_TYPE", - 4: "INVALID_CONTENT_TYPE", + 2: "INVALID_CONTENT_TYPE", } SendMessageResponse_Result_value = map[string]int32{ "OK": 0, "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "INVALID_CHAT_TYPE": 3, - "INVALID_CONTENT_TYPE": 4, + "INVALID_CONTENT_TYPE": 2, } ) @@ -522,11 +509,9 @@ func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { type AdvancePointerResponse_Result int32 const ( - AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 - AdvancePointerResponse_DENIED AdvancePointerResponse_Result = 1 - AdvancePointerResponse_CHAT_NOT_FOUND AdvancePointerResponse_Result = 2 - AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 3 - AdvancePointerResponse_INVALID_POINTER_TYPE AdvancePointerResponse_Result = 4 + AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 + AdvancePointerResponse_DENIED AdvancePointerResponse_Result = 1 + AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 2 ) // Enum value maps for AdvancePointerResponse_Result. @@ -534,16 +519,12 @@ var ( AdvancePointerResponse_Result_name = map[int32]string{ 0: "OK", 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "MESSAGE_NOT_FOUND", - 4: "INVALID_POINTER_TYPE", + 2: "MESSAGE_NOT_FOUND", } AdvancePointerResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "MESSAGE_NOT_FOUND": 3, - "INVALID_POINTER_TYPE": 4, + "OK": 0, + "DENIED": 1, + "MESSAGE_NOT_FOUND": 2, } ) @@ -574,65 +555,12 @@ func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} } -type RevealIdentityResponse_Result int32 - -const ( - RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 - RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 - RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 - RevealIdentityResponse_DIFFERENT_IDENTITY_REVEALED RevealIdentityResponse_Result = 3 -) - -// Enum value maps for RevealIdentityResponse_Result. -var ( - RevealIdentityResponse_Result_name = map[int32]string{ - 0: "OK", - 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "DIFFERENT_IDENTITY_REVEALED", - } - RevealIdentityResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "DIFFERENT_IDENTITY_REVEALED": 3, - } -) - -func (x RevealIdentityResponse_Result) Enum() *RevealIdentityResponse_Result { - p := new(RevealIdentityResponse_Result) - *p = x - return p -} - -func (x RevealIdentityResponse_Result) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RevealIdentityResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() -} - -func (RevealIdentityResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[11] -} - -func (x RevealIdentityResponse_Result) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RevealIdentityResponse_Result.Descriptor instead. -func (RevealIdentityResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} -} - type SetMuteStateResponse_Result int32 const ( - SetMuteStateResponse_OK SetMuteStateResponse_Result = 0 - SetMuteStateResponse_DENIED SetMuteStateResponse_Result = 1 - SetMuteStateResponse_CHAT_NOT_FOUND SetMuteStateResponse_Result = 2 - SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 3 + SetMuteStateResponse_OK SetMuteStateResponse_Result = 0 + SetMuteStateResponse_DENIED SetMuteStateResponse_Result = 1 + SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 2 ) // Enum value maps for SetMuteStateResponse_Result. @@ -640,14 +568,12 @@ var ( SetMuteStateResponse_Result_name = map[int32]string{ 0: "OK", 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "CANT_MUTE", + 2: "CANT_MUTE", } SetMuteStateResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "CANT_MUTE": 3, + "OK": 0, + "DENIED": 1, + "CANT_MUTE": 2, } ) @@ -662,11 +588,11 @@ func (x SetMuteStateResponse_Result) String() string { } func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() } func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[12] + return &file_chat_v2_chat_service_proto_enumTypes[11] } func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { @@ -675,67 +601,14 @@ func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} -} - -type SetSubscriptionStateResponse_Result int32 - -const ( - SetSubscriptionStateResponse_OK SetSubscriptionStateResponse_Result = 0 - SetSubscriptionStateResponse_DENIED SetSubscriptionStateResponse_Result = 1 - SetSubscriptionStateResponse_CHAT_NOT_FOUND SetSubscriptionStateResponse_Result = 2 - SetSubscriptionStateResponse_CANT_UNSUBSCRIBE SetSubscriptionStateResponse_Result = 3 -) - -// Enum value maps for SetSubscriptionStateResponse_Result. -var ( - SetSubscriptionStateResponse_Result_name = map[int32]string{ - 0: "OK", - 1: "DENIED", - 2: "CHAT_NOT_FOUND", - 3: "CANT_UNSUBSCRIBE", - } - SetSubscriptionStateResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "CANT_UNSUBSCRIBE": 3, - } -) - -func (x SetSubscriptionStateResponse_Result) Enum() *SetSubscriptionStateResponse_Result { - p := new(SetSubscriptionStateResponse_Result) - *p = x - return p -} - -func (x SetSubscriptionStateResponse_Result) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() -} - -func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[13] -} - -func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. -func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} } type NotifyIsTypingResponse_Result int32 const ( - NotifyIsTypingResponse_OK NotifyIsTypingResponse_Result = 0 - NotifyIsTypingResponse_DENIED NotifyIsTypingResponse_Result = 1 - NotifyIsTypingResponse_CHAT_NOT_FOUND NotifyIsTypingResponse_Result = 2 + NotifyIsTypingResponse_OK NotifyIsTypingResponse_Result = 0 + NotifyIsTypingResponse_DENIED NotifyIsTypingResponse_Result = 1 ) // Enum value maps for NotifyIsTypingResponse_Result. @@ -743,12 +616,10 @@ var ( NotifyIsTypingResponse_Result_name = map[int32]string{ 0: "OK", 1: "DENIED", - 2: "CHAT_NOT_FOUND", } NotifyIsTypingResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, + "OK": 0, + "DENIED": 1, } ) @@ -763,11 +634,11 @@ func (x NotifyIsTypingResponse_Result) String() string { } func (NotifyIsTypingResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[14].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() } func (NotifyIsTypingResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[14] + return &file_chat_v2_chat_service_proto_enumTypes[12] } func (x NotifyIsTypingResponse_Result) Number() protoreflect.EnumNumber { @@ -776,7 +647,7 @@ func (x NotifyIsTypingResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use NotifyIsTypingResponse_Result.Descriptor instead. func (NotifyIsTypingResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} } type ExchangeDataContent_Verb int32 @@ -839,11 +710,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[15].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[15] + return &file_chat_v2_chat_service_proto_enumTypes[13] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -852,7 +723,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31, 0} } type GetChatsRequest struct { @@ -940,7 +811,7 @@ type GetChatsResponse struct { unknownFields protoimpl.UnknownFields Result GetChatsResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetChatsResponse_Result" json:"result,omitempty"` - Chats []*ChatMetadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` + Chats []*Metadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` } func (x *GetChatsResponse) Reset() { @@ -982,7 +853,7 @@ func (x *GetChatsResponse) GetResult() GetChatsResponse_Result { return GetChatsResponse_OK } -func (x *GetChatsResponse) GetChats() []*ChatMetadata { +func (x *GetChatsResponse) GetChats() []*Metadata { if x != nil { return x.Chats } @@ -995,12 +866,11 @@ type GetMessagesRequest struct { unknownFields protoimpl.UnknownFields ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` - PageSize uint32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor *Cursor `protobuf:"bytes,6,opt,name=cursor,proto3" json:"cursor,omitempty"` - Direction GetMessagesRequest_Direction `protobuf:"varint,7,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetMessagesRequest_Direction `protobuf:"varint,6,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` } func (x *GetMessagesRequest) Reset() { @@ -1042,13 +912,6 @@ func (x *GetMessagesRequest) GetChatId() *v1.ChatId { return nil } -func (x *GetMessagesRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - func (x *GetMessagesRequest) GetOwner() *v1.SolanaAccountId { if x != nil { return x.Owner @@ -1090,7 +953,7 @@ type GetMessagesResponse struct { unknownFields protoimpl.UnknownFields Result GetMessagesResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetMessagesResponse_Result" json:"result,omitempty"` - Messages []*ChatMessage `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` + Messages []*Message `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` } func (x *GetMessagesResponse) Reset() { @@ -1132,7 +995,7 @@ func (x *GetMessagesResponse) GetResult() GetMessagesResponse_Result { return GetMessagesResponse_OK } -func (x *GetMessagesResponse) GetMessages() []*ChatMessage { +func (x *GetMessagesResponse) GetMessages() []*Message { if x != nil { return x.Messages } @@ -1145,9 +1008,8 @@ type OpenChatEventStream struct { unknownFields protoimpl.UnknownFields ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *OpenChatEventStream) Reset() { @@ -1189,13 +1051,6 @@ func (x *OpenChatEventStream) GetChatId() *v1.ChatId { return nil } -func (x *OpenChatEventStream) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { if x != nil { return x.Owner @@ -1262,7 +1117,7 @@ func (m *ChatStreamEvent) GetType() isChatStreamEvent_Type { return nil } -func (x *ChatStreamEvent) GetMessage() *ChatMessage { +func (x *ChatStreamEvent) GetMessage() *Message { if x, ok := x.GetType().(*ChatStreamEvent_Message); ok { return x.Message } @@ -1288,7 +1143,7 @@ type isChatStreamEvent_Type interface { } type ChatStreamEvent_Message struct { - Message *ChatMessage `protobuf:"bytes,1,opt,name=message,proto3,oneof"` + Message *Message `protobuf:"bytes,1,opt,name=message,proto3,oneof"` } type ChatStreamEvent_Pointer struct { @@ -1582,7 +1437,6 @@ type StartChatRequest struct { Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - Self *ChatMemberIdentity `protobuf:"bytes,3,opt,name=self,proto3" json:"self,omitempty"` // Types that are assignable to Parameters: // // *StartChatRequest_TwoWayChat @@ -1635,13 +1489,6 @@ func (x *StartChatRequest) GetSignature() *v1.Signature { return nil } -func (x *StartChatRequest) GetSelf() *ChatMemberIdentity { - if x != nil { - return x.Self - } - return nil -} - func (m *StartChatRequest) GetParameters() isStartChatRequest_Parameters { if m != nil { return m.Parameters @@ -1661,7 +1508,7 @@ type isStartChatRequest_Parameters interface { } type StartChatRequest_TwoWayChat struct { - TwoWayChat *StartTwoWayChatParameters `protobuf:"bytes,4,opt,name=two_way_chat,json=twoWayChat,proto3,oneof"` // GroupChatParameters group_chat = 4; + TwoWayChat *StartTwoWayChatParameters `protobuf:"bytes,3,opt,name=two_way_chat,json=twoWayChat,proto3,oneof"` } func (*StartChatRequest_TwoWayChat) isStartChatRequest_Parameters() {} @@ -1689,10 +1536,6 @@ type StartTwoWayChatParameters struct { // This is most likely to occur when initiating a chat with a user for the first // time. IntentId *v1.IntentId `protobuf:"bytes,2,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` - // The identity of the other user. - // - // Note: This can/should be removed with proper intent plumbing. - Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` } func (x *StartTwoWayChatParameters) Reset() { @@ -1741,13 +1584,6 @@ func (x *StartTwoWayChatParameters) GetIntentId() *v1.IntentId { return nil } -func (x *StartTwoWayChatParameters) GetIdentity() *ChatMemberIdentity { - if x != nil { - return x.Identity - } - return nil -} - type StartChatResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1755,7 +1591,7 @@ type StartChatResponse struct { Result StartChatResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.StartChatResponse_Result" json:"result,omitempty"` // The chat to use if the RPC was successful. - Chat *ChatMetadata `protobuf:"bytes,2,opt,name=chat,proto3" json:"chat,omitempty"` + Chat *Metadata `protobuf:"bytes,2,opt,name=chat,proto3" json:"chat,omitempty"` } func (x *StartChatResponse) Reset() { @@ -1797,7 +1633,7 @@ func (x *StartChatResponse) GetResult() StartChatResponse_Result { return StartChatResponse_OK } -func (x *StartChatResponse) GetChat() *ChatMetadata { +func (x *StartChatResponse) GetChat() *Metadata { if x != nil { return x.Chat } @@ -1809,14 +1645,13 @@ type SendMessageRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` // Allowed content types that can be sent by client: // - TextContent // - ThankYouContent - Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + Content []*Content `protobuf:"bytes,2,rep,name=content,proto3" json:"content,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *SendMessageRequest) Reset() { @@ -1858,13 +1693,6 @@ func (x *SendMessageRequest) GetChatId() *v1.ChatId { return nil } -func (x *SendMessageRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - func (x *SendMessageRequest) GetContent() []*Content { if x != nil { return x.Content @@ -1894,7 +1722,7 @@ type SendMessageResponse struct { Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SendMessageResponse_Result" json:"result,omitempty"` // The chat message that was sent if the RPC was succesful, which includes // server-side metadata like the generated message ID and official timestamp - Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } func (x *SendMessageResponse) Reset() { @@ -1936,7 +1764,7 @@ func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { return SendMessageResponse_OK } -func (x *SendMessageResponse) GetMessage() *ChatMessage { +func (x *SendMessageResponse) GetMessage() *Message { if x != nil { return x.Message } @@ -2061,20 +1889,19 @@ func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { return AdvancePointerResponse_OK } -type RevealIdentityRequest struct { +type SetMuteStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + IsMuted bool `protobuf:"varint,2,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` } -func (x *RevealIdentityRequest) Reset() { - *x = RevealIdentityRequest{} +func (x *SetMuteStateRequest) Reset() { + *x = SetMuteStateRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2082,13 +1909,13 @@ func (x *RevealIdentityRequest) Reset() { } } -func (x *RevealIdentityRequest) String() string { +func (x *SetMuteStateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RevealIdentityRequest) ProtoMessage() {} +func (*SetMuteStateRequest) ProtoMessage() {} -func (x *RevealIdentityRequest) ProtoReflect() protoreflect.Message { +func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2100,58 +1927,49 @@ func (x *RevealIdentityRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RevealIdentityRequest.ProtoReflect.Descriptor instead. -func (*RevealIdentityRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. +func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} } -func (x *RevealIdentityRequest) GetChatId() *v1.ChatId { +func (x *SetMuteStateRequest) GetChatId() *v1.ChatId { if x != nil { return x.ChatId } return nil } -func (x *RevealIdentityRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - -func (x *RevealIdentityRequest) GetIdentity() *ChatMemberIdentity { +func (x *SetMuteStateRequest) GetIsMuted() bool { if x != nil { - return x.Identity + return x.IsMuted } - return nil + return false } -func (x *RevealIdentityRequest) GetOwner() *v1.SolanaAccountId { +func (x *SetMuteStateRequest) GetOwner() *v1.SolanaAccountId { if x != nil { return x.Owner } return nil } -func (x *RevealIdentityRequest) GetSignature() *v1.Signature { +func (x *SetMuteStateRequest) GetSignature() *v1.Signature { if x != nil { return x.Signature } return nil } -type RevealIdentityResponse struct { +type SetMuteStateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Result RevealIdentityResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.RevealIdentityResponse_Result" json:"result,omitempty"` - // The chat message that was sent if the RPC was successful - Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Result SetMuteStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetMuteStateResponse_Result" json:"result,omitempty"` } -func (x *RevealIdentityResponse) Reset() { - *x = RevealIdentityResponse{} +func (x *SetMuteStateResponse) Reset() { + *x = SetMuteStateResponse{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2159,13 +1977,13 @@ func (x *RevealIdentityResponse) Reset() { } } -func (x *RevealIdentityResponse) String() string { +func (x *SetMuteStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RevealIdentityResponse) ProtoMessage() {} +func (*SetMuteStateResponse) ProtoMessage() {} -func (x *RevealIdentityResponse) ProtoReflect() protoreflect.Message { +func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2177,39 +1995,31 @@ func (x *RevealIdentityResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RevealIdentityResponse.ProtoReflect.Descriptor instead. -func (*RevealIdentityResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. +func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} } -func (x *RevealIdentityResponse) GetResult() RevealIdentityResponse_Result { +func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { if x != nil { return x.Result } - return RevealIdentityResponse_OK -} - -func (x *RevealIdentityResponse) GetMessage() *ChatMessage { - if x != nil { - return x.Message - } - return nil + return SetMuteStateResponse_OK } -type SetMuteStateRequest struct { +type NotifyIsTypingRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - IsMuted bool `protobuf:"varint,3,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + IsTyping bool `protobuf:"varint,2,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` } -func (x *SetMuteStateRequest) Reset() { - *x = SetMuteStateRequest{} +func (x *NotifyIsTypingRequest) Reset() { + *x = NotifyIsTypingRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2217,13 +2027,13 @@ func (x *SetMuteStateRequest) Reset() { } } -func (x *SetMuteStateRequest) String() string { +func (x *NotifyIsTypingRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetMuteStateRequest) ProtoMessage() {} +func (*NotifyIsTypingRequest) ProtoMessage() {} -func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { +func (x *NotifyIsTypingRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2235,56 +2045,49 @@ func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. -func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyIsTypingRequest.ProtoReflect.Descriptor instead. +func (*NotifyIsTypingRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} } -func (x *SetMuteStateRequest) GetChatId() *v1.ChatId { +func (x *NotifyIsTypingRequest) GetChatId() *v1.ChatId { if x != nil { return x.ChatId } return nil } -func (x *SetMuteStateRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - -func (x *SetMuteStateRequest) GetIsMuted() bool { +func (x *NotifyIsTypingRequest) GetIsTyping() bool { if x != nil { - return x.IsMuted + return x.IsTyping } return false } -func (x *SetMuteStateRequest) GetOwner() *v1.SolanaAccountId { +func (x *NotifyIsTypingRequest) GetOwner() *v1.SolanaAccountId { if x != nil { return x.Owner } return nil } -func (x *SetMuteStateRequest) GetSignature() *v1.Signature { +func (x *NotifyIsTypingRequest) GetSignature() *v1.Signature { if x != nil { return x.Signature } return nil } -type SetMuteStateResponse struct { +type NotifyIsTypingResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Result SetMuteStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetMuteStateResponse_Result" json:"result,omitempty"` + Result NotifyIsTypingResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.NotifyIsTypingResponse_Result" json:"result,omitempty"` } -func (x *SetMuteStateResponse) Reset() { - *x = SetMuteStateResponse{} +func (x *NotifyIsTypingResponse) Reset() { + *x = NotifyIsTypingResponse{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2292,13 +2095,13 @@ func (x *SetMuteStateResponse) Reset() { } } -func (x *SetMuteStateResponse) String() string { +func (x *NotifyIsTypingResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetMuteStateResponse) ProtoMessage() {} +func (*NotifyIsTypingResponse) ProtoMessage() {} -func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { +func (x *NotifyIsTypingResponse) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2310,32 +2113,30 @@ func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. -func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyIsTypingResponse.ProtoReflect.Descriptor instead. +func (*NotifyIsTypingResponse) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} } -func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { +func (x *NotifyIsTypingResponse) GetResult() NotifyIsTypingResponse_Result { if x != nil { return x.Result } - return SetMuteStateResponse_OK + return NotifyIsTypingResponse_OK } -type SetSubscriptionStateRequest struct { +type MessageId struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - IsSubscribed bool `protobuf:"varint,3,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + // A lexicographically sortable ID that can be used to sort source of + // chat history. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *SetSubscriptionStateRequest) Reset() { - *x = SetSubscriptionStateRequest{} +func (x *MessageId) Reset() { + *x = MessageId{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2343,13 +2144,13 @@ func (x *SetSubscriptionStateRequest) Reset() { } } -func (x *SetSubscriptionStateRequest) String() string { +func (x *MessageId) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetSubscriptionStateRequest) ProtoMessage() {} +func (*MessageId) ProtoMessage() {} -func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { +func (x *MessageId) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2361,56 +2162,29 @@ func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. -func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use MessageId.ProtoReflect.Descriptor instead. +func (*MessageId) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} } -func (x *SetSubscriptionStateRequest) GetChatId() *v1.ChatId { - if x != nil { - return x.ChatId - } - return nil -} - -func (x *SetSubscriptionStateRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - -func (x *SetSubscriptionStateRequest) GetIsSubscribed() bool { - if x != nil { - return x.IsSubscribed - } - return false -} - -func (x *SetSubscriptionStateRequest) GetOwner() *v1.SolanaAccountId { - if x != nil { - return x.Owner - } - return nil -} - -func (x *SetSubscriptionStateRequest) GetSignature() *v1.Signature { +func (x *MessageId) GetValue() []byte { if x != nil { - return x.Signature + return x.Value } return nil } -type SetSubscriptionStateResponse struct { +type MemberId struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Result SetSubscriptionStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetSubscriptionStateResponse_Result" json:"result,omitempty"` + // The publically available 'deposit' address of the user. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *SetSubscriptionStateResponse) Reset() { - *x = SetSubscriptionStateResponse{} +func (x *MemberId) Reset() { + *x = MemberId{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2418,13 +2192,13 @@ func (x *SetSubscriptionStateResponse) Reset() { } } -func (x *SetSubscriptionStateResponse) String() string { +func (x *MemberId) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetSubscriptionStateResponse) ProtoMessage() {} +func (*MemberId) ProtoMessage() {} -func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { +func (x *MemberId) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2436,32 +2210,46 @@ func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. -func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use MemberId.ProtoReflect.Descriptor instead. +func (*MemberId) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} } -func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { +func (x *MemberId) GetValue() []byte { if x != nil { - return x.Result + return x.Value } - return SetSubscriptionStateResponse_OK + return nil } -type NotifyIsTypingRequest struct { +// A chat +// +// todo: Support is_verified in a clean way +type Metadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - IsTyping bool `protobuf:"varint,3,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // The type of chat + Type ChatType `protobuf:"varint,2,opt,name=type,proto3,enum=code.chat.v2.ChatType" json:"type,omitempty"` + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor *Cursor `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"` + // The chat title, which is _only_ set by server if an explicit title + // was set. Otherwise, clients should fill in an appropriate chat title. + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + // The members in this chat. + Members []*Member `protobuf:"bytes,5,rep,name=members,proto3" json:"members,omitempty"` + // Whether or not the chat is muted (from the perspective of the caller). + IsMuted bool `protobuf:"varint,6,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + // Whether or not the chat is mutable (from the persective of the caller). + Muteable bool `protobuf:"varint,7,opt,name=muteable,proto3" json:"muteable,omitempty"` + // Number of (estimated) unread message (from the perspective of the caller). + NumUnread uint32 `protobuf:"varint,8,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` } -func (x *NotifyIsTypingRequest) Reset() { - *x = NotifyIsTypingRequest{} +func (x *Metadata) Reset() { + *x = Metadata{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2469,13 +2257,13 @@ func (x *NotifyIsTypingRequest) Reset() { } } -func (x *NotifyIsTypingRequest) String() string { +func (x *Metadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NotifyIsTypingRequest) ProtoMessage() {} +func (*Metadata) ProtoMessage() {} -func (x *NotifyIsTypingRequest) ProtoReflect() protoreflect.Message { +func (x *Metadata) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2487,315 +2275,78 @@ func (x *NotifyIsTypingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NotifyIsTypingRequest.ProtoReflect.Descriptor instead. -func (*NotifyIsTypingRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. +func (*Metadata) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} } -func (x *NotifyIsTypingRequest) GetChatId() *v1.ChatId { +func (x *Metadata) GetChatId() *v1.ChatId { if x != nil { return x.ChatId } return nil } -func (x *NotifyIsTypingRequest) GetMemberId() *ChatMemberId { - if x != nil { - return x.MemberId - } - return nil -} - -func (x *NotifyIsTypingRequest) GetIsTyping() bool { - if x != nil { - return x.IsTyping - } - return false -} - -func (x *NotifyIsTypingRequest) GetOwner() *v1.SolanaAccountId { - if x != nil { - return x.Owner - } - return nil -} - -func (x *NotifyIsTypingRequest) GetSignature() *v1.Signature { - if x != nil { - return x.Signature - } - return nil -} - -type NotifyIsTypingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result NotifyIsTypingResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.NotifyIsTypingResponse_Result" json:"result,omitempty"` -} - -func (x *NotifyIsTypingResponse) Reset() { - *x = NotifyIsTypingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyIsTypingResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyIsTypingResponse) ProtoMessage() {} - -func (x *NotifyIsTypingResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NotifyIsTypingResponse.ProtoReflect.Descriptor instead. -func (*NotifyIsTypingResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} -} - -func (x *NotifyIsTypingResponse) GetResult() NotifyIsTypingResponse_Result { +func (x *Metadata) GetType() ChatType { if x != nil { - return x.Result - } - return NotifyIsTypingResponse_OK -} - -type ChatMessageId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Guaranteed to be a time-based UUID. This should be used to construct a - // consistently ordered message history based on time using a simple byte - // comparison. - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *ChatMessageId) Reset() { - *x = ChatMessageId{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatMessageId) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatMessageId) ProtoMessage() {} - -func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. -func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} -} - -func (x *ChatMessageId) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -type ChatMemberId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Globally random UUID - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *ChatMemberId) Reset() { - *x = ChatMemberId{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatMemberId) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatMemberId) ProtoMessage() {} - -func (x *ChatMemberId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. -func (*ChatMemberId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} -} - -func (x *ChatMemberId) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -// A chat -// -// todo: Support is_verified in a clean way -type ChatMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Globally unique ID for this chat - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - // The type of chat - Type ChatType `protobuf:"varint,2,opt,name=type,proto3,enum=code.chat.v2.ChatType" json:"type,omitempty"` - // The chat title, which will be localized by server when applicable - Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` - // The members in this chat - // - // For NOTIFICATION chats, this list has exactly 1 item - // For TWO_WAY chats, this list has exactly 2 items - // - // todo: If we support group chats, then we'll likely return the first page - // - // or a prioritized list. The remaining members would be fetched via - // a new RPC. - Members []*ChatMember `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` - // Can the user mute this chat? - CanMute bool `protobuf:"varint,5,opt,name=can_mute,json=canMute,proto3" json:"can_mute,omitempty"` - // Can the user unsubscribe from this chat? - CanUnsubscribe bool `protobuf:"varint,6,opt,name=can_unsubscribe,json=canUnsubscribe,proto3" json:"can_unsubscribe,omitempty"` - // Cursor value for this chat for reference in subsequent GetChatsRequest - Cursor *Cursor `protobuf:"bytes,7,opt,name=cursor,proto3" json:"cursor,omitempty"` -} - -func (x *ChatMetadata) Reset() { - *x = ChatMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatMetadata) ProtoMessage() {} - -func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + return x.Type } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. -func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} + return ChatType_UNKNOWN_CHAT_TYPE } -func (x *ChatMetadata) GetChatId() *v1.ChatId { +func (x *Metadata) GetCursor() *Cursor { if x != nil { - return x.ChatId + return x.Cursor } return nil } -func (x *ChatMetadata) GetType() ChatType { - if x != nil { - return x.Type - } - return ChatType_UNKNOWN_CHAT_TYPE -} - -func (x *ChatMetadata) GetTitle() string { +func (x *Metadata) GetTitle() string { if x != nil { return x.Title } return "" } -func (x *ChatMetadata) GetMembers() []*ChatMember { +func (x *Metadata) GetMembers() []*Member { if x != nil { return x.Members } return nil } -func (x *ChatMetadata) GetCanMute() bool { +func (x *Metadata) GetIsMuted() bool { if x != nil { - return x.CanMute + return x.IsMuted } return false } -func (x *ChatMetadata) GetCanUnsubscribe() bool { +func (x *Metadata) GetMuteable() bool { if x != nil { - return x.CanUnsubscribe + return x.Muteable } return false } -func (x *ChatMetadata) GetCursor() *Cursor { +func (x *Metadata) GetNumUnread() uint32 { if x != nil { - return x.Cursor + return x.NumUnread } - return nil + return 0 } // A message in a chat -type ChatMessage struct { +type Message struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Globally unique ID for this message - MessageId *ChatMessageId `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + MessageId *MessageId `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` // The chat member that sent the message. For NOTIFICATION chats, this field // is omitted since the chat has exactly 1 member. - SenderId *ChatMemberId `protobuf:"bytes,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` + SenderId *MemberId `protobuf:"bytes,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` // Ordered message content. A message may have more than one piece of content. Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` // Timestamp this message was generated at. This value is also encoded in @@ -2805,23 +2356,23 @@ type ChatMessage struct { Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` } -func (x *ChatMessage) Reset() { - *x = ChatMessage{} +func (x *Message) Reset() { + *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ChatMessage) String() string { +func (x *Message) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatMessage) ProtoMessage() {} +func (*Message) ProtoMessage() {} -func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] +func (x *Message) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2832,40 +2383,40 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. -func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} +// Deprecated: Use Message.ProtoReflect.Descriptor instead. +func (*Message) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} } -func (x *ChatMessage) GetMessageId() *ChatMessageId { +func (x *Message) GetMessageId() *MessageId { if x != nil { return x.MessageId } return nil } -func (x *ChatMessage) GetSenderId() *ChatMemberId { +func (x *Message) GetSenderId() *MemberId { if x != nil { return x.SenderId } return nil } -func (x *ChatMessage) GetContent() []*Content { +func (x *Message) GetContent() []*Content { if x != nil { return x.Content } return nil } -func (x *ChatMessage) GetTs() *timestamppb.Timestamp { +func (x *Message) GetTs() *timestamppb.Timestamp { if x != nil { return x.Ts } return nil } -func (x *ChatMessage) GetCursor() *Cursor { +func (x *Message) GetCursor() *Cursor { if x != nil { return x.Cursor } @@ -2873,53 +2424,45 @@ func (x *ChatMessage) GetCursor() *Cursor { } // A user in a chat -type ChatMember struct { +type Member struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Globally unique ID for this chat member - MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - // Is this chat member yourself? This enables client to identify which member_id - // is themselves. - IsSelf bool `protobuf:"varint,2,opt,name=is_self,json=isSelf,proto3" json:"is_self,omitempty"` + // Public AccountId (for is self...is derived via deposit address) + MemberId *MemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` // The chat member's identity if it has been revealed. - Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` - // Chat message state for this member. This list will have DELIVERED and READ - // pointers, if they exist. SENT pointers should be inferred by persistence - // on server. - Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` - // Estimated number of unread messages for the chat member in this chat // - // Only valid when is_self = true - NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` - // Has the chat member muted this chat? + // Multiple identities here? Well really only needs twitter/other handles + // Repeated PlatformHandles (where code doesn't matter)? + Identity *MemberIdentity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // Chat message state for this member. // - // Only valid when is_self = true - IsMuted bool `protobuf:"varint,6,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` - // Is the chat member subscribed to this chat? + // If set, the list may contain DELIVERED and READ pointers. SENT pointers + // are only shared between the sender and server, to indicate persistence. // - // Only valid when is_self = true - IsSubscribed bool `protobuf:"varint,7,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` + // The server may wish to omit all pointers in various types of group chats + // or as relief valves. + Pointers []*Pointer `protobuf:"bytes,3,rep,name=pointers,proto3" json:"pointers,omitempty"` } -func (x *ChatMember) Reset() { - *x = ChatMember{} +func (x *Member) Reset() { + *x = Member{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ChatMember) String() string { +func (x *Member) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatMember) ProtoMessage() {} +func (*Member) ProtoMessage() {} -func (x *ChatMember) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] +func (x *Member) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2930,91 +2473,65 @@ func (x *ChatMember) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatMember.ProtoReflect.Descriptor instead. -func (*ChatMember) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} +// Deprecated: Use Member.ProtoReflect.Descriptor instead. +func (*Member) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} } -func (x *ChatMember) GetMemberId() *ChatMemberId { +func (x *Member) GetMemberId() *MemberId { if x != nil { return x.MemberId } return nil } -func (x *ChatMember) GetIsSelf() bool { - if x != nil { - return x.IsSelf - } - return false -} - -func (x *ChatMember) GetIdentity() *ChatMemberIdentity { +func (x *Member) GetIdentity() *MemberIdentity { if x != nil { return x.Identity } return nil } -func (x *ChatMember) GetPointers() []*Pointer { +func (x *Member) GetPointers() []*Pointer { if x != nil { return x.Pointers } return nil } -func (x *ChatMember) GetNumUnread() uint32 { - if x != nil { - return x.NumUnread - } - return 0 -} - -func (x *ChatMember) GetIsMuted() bool { - if x != nil { - return x.IsMuted - } - return false -} - -func (x *ChatMember) GetIsSubscribed() bool { - if x != nil { - return x.IsSubscribed - } - return false -} - // Identity to an external social platform that can be linked to a Code account -type ChatMemberIdentity struct { +type MemberIdentity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The external social platform linked to this chat member Platform Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.chat.v2.Platform" json:"platform,omitempty"` - // The chat member's username on the external social platform + // The chat member's username on the external social platform. Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // If present, the display name of the user. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // If present, the URL of the users profile pic. - ProfilePicUrl string `protobuf:"bytes,3,opt,name=profile_pic_url,json=profilePicUrl,proto3" json:"profile_pic_url,omitempty"` + ProfilePicUrl string `protobuf:"bytes,4,opt,name=profile_pic_url,json=profilePicUrl,proto3" json:"profile_pic_url,omitempty"` } -func (x *ChatMemberIdentity) Reset() { - *x = ChatMemberIdentity{} +func (x *MemberIdentity) Reset() { + *x = MemberIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ChatMemberIdentity) String() string { +func (x *MemberIdentity) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatMemberIdentity) ProtoMessage() {} +func (*MemberIdentity) ProtoMessage() {} -func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] +func (x *MemberIdentity) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3025,26 +2542,33 @@ func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatMemberIdentity.ProtoReflect.Descriptor instead. -func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} +// Deprecated: Use MemberIdentity.ProtoReflect.Descriptor instead. +func (*MemberIdentity) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} } -func (x *ChatMemberIdentity) GetPlatform() Platform { +func (x *MemberIdentity) GetPlatform() Platform { if x != nil { return x.Platform } return Platform_UNKNOWN_PLATFORM } -func (x *ChatMemberIdentity) GetUsername() string { +func (x *MemberIdentity) GetUsername() string { if x != nil { return x.Username } return "" } -func (x *ChatMemberIdentity) GetProfilePicUrl() string { +func (x *MemberIdentity) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *MemberIdentity) GetProfilePicUrl() string { if x != nil { return x.ProfilePicUrl } @@ -3064,15 +2588,15 @@ type Pointer struct { Type PointerType `protobuf:"varint,1,opt,name=type,proto3,enum=code.chat.v2.PointerType" json:"type,omitempty"` // Everything at or before this message ID is considered to have the state // inferred by the type of pointer. - Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Value *MessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // The chat member associated with this pointer state - MemberId *ChatMemberId `protobuf:"bytes,3,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + MemberId *MemberId `protobuf:"bytes,3,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` } func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3085,7 +2609,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3098,7 +2622,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} } func (x *Pointer) GetType() PointerType { @@ -3108,14 +2632,14 @@ func (x *Pointer) GetType() PointerType { return PointerType_UNKNOWN_POINTER_TYPE } -func (x *Pointer) GetValue() *ChatMessageId { +func (x *Pointer) GetValue() *MessageId { if x != nil { return x.Value } return nil } -func (x *Pointer) GetMemberId() *ChatMemberId { +func (x *Pointer) GetMemberId() *MemberId { if x != nil { return x.MemberId } @@ -3134,15 +2658,13 @@ type Content struct { // *Content_Localized // *Content_ExchangeData // *Content_NaclBox - // *Content_ThankYou - // *Content_IdentityRevealed Type isContent_Type `protobuf_oneof:"type"` } func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3155,7 +2677,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3168,7 +2690,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} } func (m *Content) GetType() isContent_Type { @@ -3206,20 +2728,6 @@ func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { return nil } -func (x *Content) GetThankYou() *ThankYouContent { - if x, ok := x.GetType().(*Content_ThankYou); ok { - return x.ThankYou - } - return nil -} - -func (x *Content) GetIdentityRevealed() *IdentityRevealedContent { - if x, ok := x.GetType().(*Content_IdentityRevealed); ok { - return x.IdentityRevealed - } - return nil -} - type isContent_Type interface { isContent_Type() } @@ -3240,14 +2748,6 @@ type Content_NaclBox struct { NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,4,opt,name=nacl_box,json=naclBox,proto3,oneof"` } -type Content_ThankYou struct { - ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` -} - -type Content_IdentityRevealed struct { - IdentityRevealed *IdentityRevealedContent `protobuf:"bytes,6,opt,name=identity_revealed,json=identityRevealed,proto3,oneof"` -} - func (*Content_Text) isContent_Type() {} func (*Content_Localized) isContent_Type() {} @@ -3256,10 +2756,6 @@ func (*Content_ExchangeData) isContent_Type() {} func (*Content_NaclBox) isContent_Type() {} -func (*Content_ThankYou) isContent_Type() {} - -func (*Content_IdentityRevealed) isContent_Type() {} - // Raw text content type TextContent struct { state protoimpl.MessageState @@ -3272,7 +2768,7 @@ type TextContent struct { func (x *TextContent) Reset() { *x = TextContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3285,7 +2781,7 @@ func (x *TextContent) String() string { func (*TextContent) ProtoMessage() {} func (x *TextContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3298,7 +2794,7 @@ func (x *TextContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TextContent.ProtoReflect.Descriptor instead. func (*TextContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } func (x *TextContent) GetText() string { @@ -3321,7 +2817,7 @@ type LocalizedContent struct { func (x *LocalizedContent) Reset() { *x = LocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3334,7 +2830,7 @@ func (x *LocalizedContent) String() string { func (*LocalizedContent) ProtoMessage() {} func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3347,7 +2843,7 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } func (x *LocalizedContent) GetKeyOrText() string { @@ -3389,7 +2885,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[35] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3402,7 +2898,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[35] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3415,7 +2911,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -3462,190 +2958,75 @@ func (x *ExchangeDataContent) GetIntent() *v1.IntentId { func (x *ExchangeDataContent) GetSignature() *v1.Signature { if x, ok := x.GetReference().(*ExchangeDataContent_Signature); ok { - return x.Signature - } - return nil -} - -type isExchangeDataContent_ExchangeData interface { - isExchangeDataContent_ExchangeData() -} - -type ExchangeDataContent_Exact struct { - Exact *v2.ExchangeData `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` -} - -type ExchangeDataContent_Partial struct { - Partial *v2.ExchangeDataWithoutRate `protobuf:"bytes,3,opt,name=partial,proto3,oneof"` -} - -func (*ExchangeDataContent_Exact) isExchangeDataContent_ExchangeData() {} - -func (*ExchangeDataContent_Partial) isExchangeDataContent_ExchangeData() {} - -type isExchangeDataContent_Reference interface { - isExchangeDataContent_Reference() -} - -type ExchangeDataContent_Intent struct { - Intent *v1.IntentId `protobuf:"bytes,4,opt,name=intent,proto3,oneof"` -} - -type ExchangeDataContent_Signature struct { - Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3,oneof"` -} - -func (*ExchangeDataContent_Intent) isExchangeDataContent_Reference() {} - -func (*ExchangeDataContent_Signature) isExchangeDataContent_Reference() {} - -// Encrypted piece of content using NaCl box encryption -type NaclBoxEncryptedContent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The sender's public key that is used to derive the shared private key for - // decryption for message content. - PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` - // Globally random nonce that is unique to this encrypted piece of content - Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` - // The encrypted piece of message content - EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` -} - -func (x *NaclBoxEncryptedContent) Reset() { - *x = NaclBoxEncryptedContent{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NaclBoxEncryptedContent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NaclBoxEncryptedContent) ProtoMessage() {} - -func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. -func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{36} -} - -func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { - if x != nil { - return x.PeerPublicKey - } - return nil -} - -func (x *NaclBoxEncryptedContent) GetNonce() []byte { - if x != nil { - return x.Nonce - } - return nil -} - -func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { - if x != nil { - return x.EncryptedPayload + return x.Signature } return nil } -// Thank you content that is used to thank Code users for tips -type ThankYouContent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The tip intent that is being thanked. - TipIntent *v1.IntentId `protobuf:"bytes,1,opt,name=tip_intent,json=tipIntent,proto3" json:"tip_intent,omitempty"` +type isExchangeDataContent_ExchangeData interface { + isExchangeDataContent_ExchangeData() } -func (x *ThankYouContent) Reset() { - *x = ThankYouContent{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type ExchangeDataContent_Exact struct { + Exact *v2.ExchangeData `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` } -func (x *ThankYouContent) String() string { - return protoimpl.X.MessageStringOf(x) +type ExchangeDataContent_Partial struct { + Partial *v2.ExchangeDataWithoutRate `protobuf:"bytes,3,opt,name=partial,proto3,oneof"` } -func (*ThankYouContent) ProtoMessage() {} +func (*ExchangeDataContent_Exact) isExchangeDataContent_ExchangeData() {} -func (x *ThankYouContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +func (*ExchangeDataContent_Partial) isExchangeDataContent_ExchangeData() {} + +type isExchangeDataContent_Reference interface { + isExchangeDataContent_Reference() } -// Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. -func (*ThankYouContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{37} +type ExchangeDataContent_Intent struct { + Intent *v1.IntentId `protobuf:"bytes,4,opt,name=intent,proto3,oneof"` } -func (x *ThankYouContent) GetTipIntent() *v1.IntentId { - if x != nil { - return x.TipIntent - } - return nil +type ExchangeDataContent_Signature struct { + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3,oneof"` } -// Identity revealed content that is inserted into chat whenever a chat member -// reveals their identity -type IdentityRevealedContent struct { +func (*ExchangeDataContent_Intent) isExchangeDataContent_Reference() {} + +func (*ExchangeDataContent_Signature) isExchangeDataContent_Reference() {} + +// Encrypted piece of content using NaCl box encryption +type NaclBoxEncryptedContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The chat member who revealed their identity - MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - // The identity that was revealed - Identity *ChatMemberIdentity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // The sender's public key that is used to derive the shared private key for + // decryption for message content. + PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` + // Globally random nonce that is unique to this encrypted piece of content + Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + // The encrypted piece of message content + EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` } -func (x *IdentityRevealedContent) Reset() { - *x = IdentityRevealedContent{} +func (x *NaclBoxEncryptedContent) Reset() { + *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[38] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IdentityRevealedContent) String() string { +func (x *NaclBoxEncryptedContent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IdentityRevealedContent) ProtoMessage() {} +func (*NaclBoxEncryptedContent) ProtoMessage() {} -func (x *IdentityRevealedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[38] +func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3656,21 +3037,28 @@ func (x *IdentityRevealedContent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IdentityRevealedContent.ProtoReflect.Descriptor instead. -func (*IdentityRevealedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{38} +// Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. +func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} } -func (x *IdentityRevealedContent) GetMemberId() *ChatMemberId { +func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { if x != nil { - return x.MemberId + return x.PeerPublicKey } return nil } -func (x *IdentityRevealedContent) GetIdentity() *ChatMemberIdentity { +func (x *NaclBoxEncryptedContent) GetNonce() []byte { if x != nil { - return x.Identity + return x.Nonce + } + return nil +} + +func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { + if x != nil { + return x.EncryptedPayload } return nil } @@ -3689,7 +3077,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[39] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3702,7 +3090,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[39] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3715,7 +3103,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{39} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} } func (x *Cursor) GetValue() []byte { @@ -3730,7 +3118,7 @@ type IsTyping struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + MemberId *MemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` // is_typing indicates whether or not the user is typing. // If false, the user has explicitly stopped typing. IsTyping bool `protobuf:"varint,2,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` @@ -3739,7 +3127,7 @@ type IsTyping struct { func (x *IsTyping) Reset() { *x = IsTyping{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[40] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3752,7 +3140,7 @@ func (x *IsTyping) String() string { func (*IsTyping) ProtoMessage() {} func (x *IsTyping) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[40] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3765,10 +3153,10 @@ func (x *IsTyping) ProtoReflect() protoreflect.Message { // Deprecated: Use IsTyping.ProtoReflect.Descriptor instead. func (*IsTyping) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{40} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} } -func (x *IsTyping) GetMemberId() *ChatMemberId { +func (x *IsTyping) GetMemberId() *MemberId { if x != nil { return x.MemberId } @@ -3816,85 +3204,72 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xb2, + 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, - 0x74, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x01, 0x22, 0xde, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, - 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, - 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, - 0x53, 0x43, 0x10, 0x01, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x43, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x22, 0x9f, 0x02, 0x0a, - 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc1, - 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x22, 0x10, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x22, 0x99, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xb6, 0x01, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0xda, 0x01, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, + 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, @@ -3909,557 +3284,412 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x22, 0x67, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x26, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, - 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0xa0, 0x01, - 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, - 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, - 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xd5, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xbe, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, - 0x61, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, - 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe8, 0x01, 0x0a, 0x19, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, + 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, + 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, + 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xd5, 0x01, 0x0a, + 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, + 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x68, 0x61, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, + 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, + 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, + 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, + 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, - 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, - 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x22, 0xdd, 0x02, 0x0a, - 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x63, 0x68, + 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x6a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, + 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, + 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x49, 0x53, 0x53, + 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x04, 0x12, 0x12, + 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x05, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, + 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, + 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, - 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, - 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, - 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x99, - 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, - 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, - 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xeb, 0x02, - 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x92, 0x01, 0x0a, + 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, + 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, + 0x02, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, + 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x53, 0x65, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, + 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, + 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, + 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, + 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0x2e, 0x0a, 0x09, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe5, 0x02, 0x0a, 0x08, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, - 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, - 0x44, 0x10, 0x03, 0x22, 0xba, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x72, 0x05, 0x10, 0x00, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x3c, + 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, + 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, + 0x61, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x42, + 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, + 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, + 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, + 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, + 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, + 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, + 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, + 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, + 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, + 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, + 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, + 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, + 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, - 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, - 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xcc, 0x02, - 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, + 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, + 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, + 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, + 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, + 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, + 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, + 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, - 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, - 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, - 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, - 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, - 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, - 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, - 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, - 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, - 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, - 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, + 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, + 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, + 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, - 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, - 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, - 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, - 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xb1, 0x01, 0x0a, 0x12, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0d, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc8, 0x01, - 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, - 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, - 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, - 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, - 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, - 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, - 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, - 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, - 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, - 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, - 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, - 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, - 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, - 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, - 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, - 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, - 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, - 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, - 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x08, 0x49, - 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, - 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, - 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, - 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, - 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, - 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, - 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, - 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, - 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, - 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, - 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, - 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, - 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, - 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, + 0x2e, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, + 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, + 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xbf, 0x05, 0x0a, 0x04, 0x43, + 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4474,205 +3704,169 @@ func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { return file_chat_v2_chat_service_proto_rawDescData } -var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 16) -var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 41) +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 14) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 35) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ - (ChatType)(0), // 0: code.chat.v2.ChatType - (Platform)(0), // 1: code.chat.v2.Platform - (PointerType)(0), // 2: code.chat.v2.PointerType - (GetChatsRequest_Direction)(0), // 3: code.chat.v2.GetChatsRequest.Direction - (GetChatsResponse_Result)(0), // 4: code.chat.v2.GetChatsResponse.Result - (GetMessagesRequest_Direction)(0), // 5: code.chat.v2.GetMessagesRequest.Direction - (GetMessagesResponse_Result)(0), // 6: code.chat.v2.GetMessagesResponse.Result - (ChatStreamEventError_Code)(0), // 7: code.chat.v2.ChatStreamEventError.Code - (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result - (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result - (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result - (RevealIdentityResponse_Result)(0), // 11: code.chat.v2.RevealIdentityResponse.Result - (SetMuteStateResponse_Result)(0), // 12: code.chat.v2.SetMuteStateResponse.Result - (SetSubscriptionStateResponse_Result)(0), // 13: code.chat.v2.SetSubscriptionStateResponse.Result - (NotifyIsTypingResponse_Result)(0), // 14: code.chat.v2.NotifyIsTypingResponse.Result - (ExchangeDataContent_Verb)(0), // 15: code.chat.v2.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 16: code.chat.v2.GetChatsRequest - (*GetChatsResponse)(nil), // 17: code.chat.v2.GetChatsResponse - (*GetMessagesRequest)(nil), // 18: code.chat.v2.GetMessagesRequest - (*GetMessagesResponse)(nil), // 19: code.chat.v2.GetMessagesResponse - (*OpenChatEventStream)(nil), // 20: code.chat.v2.OpenChatEventStream - (*ChatStreamEvent)(nil), // 21: code.chat.v2.ChatStreamEvent - (*ChatStreamEventBatch)(nil), // 22: code.chat.v2.ChatStreamEventBatch - (*ChatStreamEventError)(nil), // 23: code.chat.v2.ChatStreamEventError - (*StreamChatEventsRequest)(nil), // 24: code.chat.v2.StreamChatEventsRequest - (*StreamChatEventsResponse)(nil), // 25: code.chat.v2.StreamChatEventsResponse - (*StartChatRequest)(nil), // 26: code.chat.v2.StartChatRequest - (*StartTwoWayChatParameters)(nil), // 27: code.chat.v2.StartTwoWayChatParameters - (*StartChatResponse)(nil), // 28: code.chat.v2.StartChatResponse - (*SendMessageRequest)(nil), // 29: code.chat.v2.SendMessageRequest - (*SendMessageResponse)(nil), // 30: code.chat.v2.SendMessageResponse - (*AdvancePointerRequest)(nil), // 31: code.chat.v2.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 32: code.chat.v2.AdvancePointerResponse - (*RevealIdentityRequest)(nil), // 33: code.chat.v2.RevealIdentityRequest - (*RevealIdentityResponse)(nil), // 34: code.chat.v2.RevealIdentityResponse - (*SetMuteStateRequest)(nil), // 35: code.chat.v2.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 36: code.chat.v2.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 37: code.chat.v2.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 38: code.chat.v2.SetSubscriptionStateResponse - (*NotifyIsTypingRequest)(nil), // 39: code.chat.v2.NotifyIsTypingRequest - (*NotifyIsTypingResponse)(nil), // 40: code.chat.v2.NotifyIsTypingResponse - (*ChatMessageId)(nil), // 41: code.chat.v2.ChatMessageId - (*ChatMemberId)(nil), // 42: code.chat.v2.ChatMemberId - (*ChatMetadata)(nil), // 43: code.chat.v2.ChatMetadata - (*ChatMessage)(nil), // 44: code.chat.v2.ChatMessage - (*ChatMember)(nil), // 45: code.chat.v2.ChatMember - (*ChatMemberIdentity)(nil), // 46: code.chat.v2.ChatMemberIdentity - (*Pointer)(nil), // 47: code.chat.v2.Pointer - (*Content)(nil), // 48: code.chat.v2.Content - (*TextContent)(nil), // 49: code.chat.v2.TextContent - (*LocalizedContent)(nil), // 50: code.chat.v2.LocalizedContent - (*ExchangeDataContent)(nil), // 51: code.chat.v2.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 52: code.chat.v2.NaclBoxEncryptedContent - (*ThankYouContent)(nil), // 53: code.chat.v2.ThankYouContent - (*IdentityRevealedContent)(nil), // 54: code.chat.v2.IdentityRevealedContent - (*Cursor)(nil), // 55: code.chat.v2.Cursor - (*IsTyping)(nil), // 56: code.chat.v2.IsTyping - (*v1.SolanaAccountId)(nil), // 57: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 58: code.common.v1.Signature - (*v1.ChatId)(nil), // 59: code.common.v1.ChatId - (*v1.ClientPong)(nil), // 60: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 61: code.common.v1.ServerPing - (*v1.IntentId)(nil), // 62: code.common.v1.IntentId - (*timestamppb.Timestamp)(nil), // 63: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 64: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 65: code.transaction.v2.ExchangeDataWithoutRate + (ChatType)(0), // 0: code.chat.v2.ChatType + (Platform)(0), // 1: code.chat.v2.Platform + (PointerType)(0), // 2: code.chat.v2.PointerType + (GetChatsRequest_Direction)(0), // 3: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 4: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 5: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 6: code.chat.v2.GetMessagesResponse.Result + (ChatStreamEventError_Code)(0), // 7: code.chat.v2.ChatStreamEventError.Code + (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result + (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result + (SetMuteStateResponse_Result)(0), // 11: code.chat.v2.SetMuteStateResponse.Result + (NotifyIsTypingResponse_Result)(0), // 12: code.chat.v2.NotifyIsTypingResponse.Result + (ExchangeDataContent_Verb)(0), // 13: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 14: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 15: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 16: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 17: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 18: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 19: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 20: code.chat.v2.ChatStreamEventBatch + (*ChatStreamEventError)(nil), // 21: code.chat.v2.ChatStreamEventError + (*StreamChatEventsRequest)(nil), // 22: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 23: code.chat.v2.StreamChatEventsResponse + (*StartChatRequest)(nil), // 24: code.chat.v2.StartChatRequest + (*StartTwoWayChatParameters)(nil), // 25: code.chat.v2.StartTwoWayChatParameters + (*StartChatResponse)(nil), // 26: code.chat.v2.StartChatResponse + (*SendMessageRequest)(nil), // 27: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 28: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 29: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 30: code.chat.v2.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 31: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 32: code.chat.v2.SetMuteStateResponse + (*NotifyIsTypingRequest)(nil), // 33: code.chat.v2.NotifyIsTypingRequest + (*NotifyIsTypingResponse)(nil), // 34: code.chat.v2.NotifyIsTypingResponse + (*MessageId)(nil), // 35: code.chat.v2.MessageId + (*MemberId)(nil), // 36: code.chat.v2.MemberId + (*Metadata)(nil), // 37: code.chat.v2.Metadata + (*Message)(nil), // 38: code.chat.v2.Message + (*Member)(nil), // 39: code.chat.v2.Member + (*MemberIdentity)(nil), // 40: code.chat.v2.MemberIdentity + (*Pointer)(nil), // 41: code.chat.v2.Pointer + (*Content)(nil), // 42: code.chat.v2.Content + (*TextContent)(nil), // 43: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 44: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 45: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 46: code.chat.v2.NaclBoxEncryptedContent + (*Cursor)(nil), // 47: code.chat.v2.Cursor + (*IsTyping)(nil), // 48: code.chat.v2.IsTyping + (*v1.SolanaAccountId)(nil), // 49: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 50: code.common.v1.Signature + (*v1.ChatId)(nil), // 51: code.common.v1.ChatId + (*v1.ClientPong)(nil), // 52: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 53: code.common.v1.ServerPing + (*v1.IntentId)(nil), // 54: code.common.v1.IntentId + (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 56: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 57: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 57, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 55, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor - 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction - 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 43, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata - 59, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 55, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor - 5, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction - 6, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 44, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage - 59, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.common.v1.ChatId - 42, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 44, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage - 47, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 56, // 20: code.chat.v2.ChatStreamEvent.is_typing:type_name -> code.chat.v2.IsTyping - 21, // 21: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 7, // 22: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code - 20, // 23: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 60, // 24: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 22, // 25: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 61, // 26: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 23, // 27: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError - 57, // 28: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 29: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 46, // 30: code.chat.v2.StartChatRequest.self:type_name -> code.chat.v2.ChatMemberIdentity - 27, // 31: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters - 57, // 32: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId - 62, // 33: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId - 46, // 34: code.chat.v2.StartTwoWayChatParameters.identity:type_name -> code.chat.v2.ChatMemberIdentity - 8, // 35: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 43, // 36: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 59, // 37: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 38: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 48, // 39: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 57, // 40: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 41: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 42: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 44, // 43: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 44: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId - 47, // 45: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 57, // 46: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 47: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 48: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 59, // 49: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 50: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 51: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity - 57, // 52: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 53: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 11, // 54: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 44, // 55: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage - 59, // 56: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 57: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 58: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 59: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 60: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 59, // 61: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 62: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 63: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 64: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 65: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 59, // 66: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 67: code.chat.v2.NotifyIsTypingRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 57, // 68: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId - 58, // 69: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature - 14, // 70: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result - 59, // 71: code.chat.v2.ChatMetadata.chat_id:type_name -> code.common.v1.ChatId - 0, // 72: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType - 45, // 73: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 55, // 74: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 41, // 75: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 42, // 76: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 48, // 77: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 63, // 78: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 55, // 79: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 42, // 80: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 81: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 47, // 82: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 83: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 84: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType - 41, // 85: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 42, // 86: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 49, // 87: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 50, // 88: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 51, // 89: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 52, // 90: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 53, // 91: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 54, // 92: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 15, // 93: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 64, // 94: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 65, // 95: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 62, // 96: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 58, // 97: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 57, // 98: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 62, // 99: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 42, // 100: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 101: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity - 42, // 102: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.ChatMemberId - 16, // 103: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 18, // 104: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 24, // 105: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 26, // 106: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 29, // 107: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 31, // 108: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 33, // 109: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 35, // 110: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 37, // 111: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 39, // 112: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 17, // 113: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 19, // 114: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 25, // 115: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 28, // 116: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 30, // 117: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 32, // 118: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 34, // 119: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 36, // 120: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 38, // 121: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 40, // 122: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 113, // [113:123] is the sub-list for method output_type - 103, // [103:113] is the sub-list for method input_type - 103, // [103:103] is the sub-list for extension type_name - 103, // [103:103] is the sub-list for extension extendee - 0, // [0:103] is the sub-list for field type_name + 49, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 47, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 37, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.Metadata + 51, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.common.v1.ChatId + 49, // 7: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 8: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 47, // 9: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 5, // 10: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 6, // 11: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 38, // 12: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.Message + 51, // 13: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.common.v1.ChatId + 49, // 14: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 15: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 38, // 16: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.Message + 41, // 17: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 48, // 18: code.chat.v2.ChatStreamEvent.is_typing:type_name -> code.chat.v2.IsTyping + 19, // 19: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 7, // 20: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 18, // 21: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 52, // 22: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 20, // 23: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 53, // 24: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 21, // 25: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 49, // 26: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 27: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 25, // 28: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters + 49, // 29: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId + 54, // 30: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 37, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.Metadata + 51, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId + 42, // 34: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 49, // 35: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 36: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 37: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 38, // 38: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.Message + 51, // 39: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId + 41, // 40: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 49, // 41: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 42: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 43: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 51, // 44: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId + 49, // 45: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 46: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 11, // 47: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 51, // 48: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId + 49, // 49: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId + 50, // 50: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature + 12, // 51: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result + 51, // 52: code.chat.v2.Metadata.chat_id:type_name -> code.common.v1.ChatId + 0, // 53: code.chat.v2.Metadata.type:type_name -> code.chat.v2.ChatType + 47, // 54: code.chat.v2.Metadata.cursor:type_name -> code.chat.v2.Cursor + 39, // 55: code.chat.v2.Metadata.members:type_name -> code.chat.v2.Member + 35, // 56: code.chat.v2.Message.message_id:type_name -> code.chat.v2.MessageId + 36, // 57: code.chat.v2.Message.sender_id:type_name -> code.chat.v2.MemberId + 42, // 58: code.chat.v2.Message.content:type_name -> code.chat.v2.Content + 55, // 59: code.chat.v2.Message.ts:type_name -> google.protobuf.Timestamp + 47, // 60: code.chat.v2.Message.cursor:type_name -> code.chat.v2.Cursor + 36, // 61: code.chat.v2.Member.member_id:type_name -> code.chat.v2.MemberId + 40, // 62: code.chat.v2.Member.identity:type_name -> code.chat.v2.MemberIdentity + 41, // 63: code.chat.v2.Member.pointers:type_name -> code.chat.v2.Pointer + 1, // 64: code.chat.v2.MemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 65: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 35, // 66: code.chat.v2.Pointer.value:type_name -> code.chat.v2.MessageId + 36, // 67: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.MemberId + 43, // 68: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 44, // 69: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 45, // 70: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 46, // 71: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 13, // 72: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 56, // 73: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 57, // 74: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 54, // 75: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 50, // 76: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 49, // 77: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 36, // 78: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.MemberId + 14, // 79: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 16, // 80: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 22, // 81: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 24, // 82: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 27, // 83: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 29, // 84: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 31, // 85: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 33, // 86: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 15, // 87: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 17, // 88: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 23, // 89: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 26, // 90: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 28, // 91: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 30, // 92: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 32, // 93: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 34, // 94: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 87, // [87:95] is the sub-list for method output_type + 79, // [79:87] is the sub-list for method input_type + 79, // [79:79] is the sub-list for extension type_name + 79, // [79:79] is the sub-list for extension extendee + 0, // [0:79] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -4886,7 +4080,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevealIdentityRequest); i { + switch v := v.(*SetMuteStateRequest); i { case 0: return &v.state case 1: @@ -4898,7 +4092,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevealIdentityResponse); i { + switch v := v.(*SetMuteStateResponse); i { case 0: return &v.state case 1: @@ -4910,7 +4104,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateRequest); i { + switch v := v.(*NotifyIsTypingRequest); i { case 0: return &v.state case 1: @@ -4922,7 +4116,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateResponse); i { + switch v := v.(*NotifyIsTypingResponse); i { case 0: return &v.state case 1: @@ -4934,7 +4128,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateRequest); i { + switch v := v.(*MessageId); i { case 0: return &v.state case 1: @@ -4946,7 +4140,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateResponse); i { + switch v := v.(*MemberId); i { case 0: return &v.state case 1: @@ -4958,7 +4152,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyIsTypingRequest); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -4970,7 +4164,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyIsTypingResponse); i { + switch v := v.(*Message); i { case 0: return &v.state case 1: @@ -4982,7 +4176,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*Member); i { case 0: return &v.state case 1: @@ -4994,7 +4188,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberId); i { + switch v := v.(*MemberIdentity); i { case 0: return &v.state case 1: @@ -5006,54 +4200,6 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMember); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pointer); i { case 0: return &v.state @@ -5065,7 +4211,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Content); i { case 0: return &v.state @@ -5077,7 +4223,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TextContent); i { case 0: return &v.state @@ -5089,7 +4235,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalizedContent); i { case 0: return &v.state @@ -5101,7 +4247,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeDataContent); i { case 0: return &v.state @@ -5113,7 +4259,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NaclBoxEncryptedContent); i { case 0: return &v.state @@ -5125,31 +4271,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThankYouContent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityRevealedContent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_chat_v2_chat_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -5161,7 +4283,7 @@ func file_chat_v2_chat_service_proto_init() { return nil } } - file_chat_v2_chat_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IsTyping); i { case 0: return &v.state @@ -5191,15 +4313,13 @@ func file_chat_v2_chat_service_proto_init() { file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ (*StartChatRequest_TwoWayChat)(nil), } - file_chat_v2_chat_service_proto_msgTypes[32].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[28].OneofWrappers = []interface{}{ (*Content_Text)(nil), (*Content_Localized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), - (*Content_ThankYou)(nil), - (*Content_IdentityRevealed)(nil), } - file_chat_v2_chat_service_proto_msgTypes[35].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[31].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), (*ExchangeDataContent_Intent)(nil), @@ -5210,8 +4330,8 @@ func file_chat_v2_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, - NumEnums: 16, - NumMessages: 41, + NumEnums: 14, + NumMessages: 35, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 9841666..5eaf0c4 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -265,23 +265,6 @@ func (m *GetMessagesRequest) Validate() error { } } - if m.GetMemberId() == nil { - return GetMessagesRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetMessagesRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - if m.GetOwner() == nil { return GetMessagesRequestValidationError{ field: "Owner", @@ -510,23 +493,6 @@ func (m *OpenChatEventStream) Validate() error { } } - if m.GetMemberId() == nil { - return OpenChatEventStreamValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OpenChatEventStreamValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - if m.GetOwner() == nil { return OpenChatEventStreamValidationError{ field: "Owner", @@ -1145,23 +1111,6 @@ func (m *StartChatRequest) Validate() error { } } - if m.GetSelf() == nil { - return StartChatRequestValidationError{ - field: "Self", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetSelf()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StartChatRequestValidationError{ - field: "Self", - reason: "embedded message failed validation", - cause: err, - } - } - } - switch m.Parameters.(type) { case *StartChatRequest_TwoWayChat: @@ -1276,23 +1225,6 @@ func (m *StartTwoWayChatParameters) Validate() error { } } - if m.GetIdentity() == nil { - return StartTwoWayChatParametersValidationError{ - field: "Identity", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StartTwoWayChatParametersValidationError{ - field: "Identity", - reason: "embedded message failed validation", - cause: err, - } - } - } - return nil } @@ -1456,23 +1388,6 @@ func (m *SendMessageRequest) Validate() error { } } - if m.GetMemberId() == nil { - return SendMessageRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SendMessageRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - if len(m.GetContent()) != 1 { return SendMessageRequestValidationError{ field: "Content", @@ -1871,16 +1786,16 @@ var _ interface { ErrorName() string } = AdvancePointerResponseValidationError{} -// Validate checks the field values on RevealIdentityRequest with the rules +// Validate checks the field values on SetMuteStateRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *RevealIdentityRequest) Validate() error { +func (m *SetMuteStateRequest) Validate() error { if m == nil { return nil } if m.GetChatId() == nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "ChatId", reason: "value is required", } @@ -1888,7 +1803,7 @@ func (m *RevealIdentityRequest) Validate() error { if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "ChatId", reason: "embedded message failed validation", cause: err, @@ -1896,42 +1811,10 @@ func (m *RevealIdentityRequest) Validate() error { } } - if m.GetMemberId() == nil { - return RevealIdentityRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RevealIdentityRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetIdentity() == nil { - return RevealIdentityRequestValidationError{ - field: "Identity", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RevealIdentityRequestValidationError{ - field: "Identity", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for IsMuted if m.GetOwner() == nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "Owner", reason: "value is required", } @@ -1939,7 +1822,7 @@ func (m *RevealIdentityRequest) Validate() error { if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "Owner", reason: "embedded message failed validation", cause: err, @@ -1948,7 +1831,7 @@ func (m *RevealIdentityRequest) Validate() error { } if m.GetSignature() == nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "Signature", reason: "value is required", } @@ -1956,7 +1839,7 @@ func (m *RevealIdentityRequest) Validate() error { if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return RevealIdentityRequestValidationError{ + return SetMuteStateRequestValidationError{ field: "Signature", reason: "embedded message failed validation", cause: err, @@ -1967,9 +1850,9 @@ func (m *RevealIdentityRequest) Validate() error { return nil } -// RevealIdentityRequestValidationError is the validation error returned by -// RevealIdentityRequest.Validate if the designated constraints aren't met. -type RevealIdentityRequestValidationError struct { +// SetMuteStateRequestValidationError is the validation error returned by +// SetMuteStateRequest.Validate if the designated constraints aren't met. +type SetMuteStateRequestValidationError struct { field string reason string cause error @@ -1977,24 +1860,24 @@ type RevealIdentityRequestValidationError struct { } // Field function returns field value. -func (e RevealIdentityRequestValidationError) Field() string { return e.field } +func (e SetMuteStateRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e RevealIdentityRequestValidationError) Reason() string { return e.reason } +func (e SetMuteStateRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e RevealIdentityRequestValidationError) Cause() error { return e.cause } +func (e SetMuteStateRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e RevealIdentityRequestValidationError) Key() bool { return e.key } +func (e SetMuteStateRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e RevealIdentityRequestValidationError) ErrorName() string { - return "RevealIdentityRequestValidationError" +func (e SetMuteStateRequestValidationError) ErrorName() string { + return "SetMuteStateRequestValidationError" } // Error satisfies the builtin error interface -func (e RevealIdentityRequestValidationError) Error() string { +func (e SetMuteStateRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2006,14 +1889,14 @@ func (e RevealIdentityRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRevealIdentityRequest.%s: %s%s", + "invalid %sSetMuteStateRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = RevealIdentityRequestValidationError{} +var _ error = SetMuteStateRequestValidationError{} var _ interface { Field() string @@ -2021,34 +1904,24 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = RevealIdentityRequestValidationError{} +} = SetMuteStateRequestValidationError{} -// Validate checks the field values on RevealIdentityResponse with the rules +// Validate checks the field values on SetMuteStateResponse with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *RevealIdentityResponse) Validate() error { +func (m *SetMuteStateResponse) Validate() error { if m == nil { return nil } // no validation rules for Result - if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RevealIdentityResponseValidationError{ - field: "Message", - reason: "embedded message failed validation", - cause: err, - } - } - } - return nil } -// RevealIdentityResponseValidationError is the validation error returned by -// RevealIdentityResponse.Validate if the designated constraints aren't met. -type RevealIdentityResponseValidationError struct { +// SetMuteStateResponseValidationError is the validation error returned by +// SetMuteStateResponse.Validate if the designated constraints aren't met. +type SetMuteStateResponseValidationError struct { field string reason string cause error @@ -2056,24 +1929,24 @@ type RevealIdentityResponseValidationError struct { } // Field function returns field value. -func (e RevealIdentityResponseValidationError) Field() string { return e.field } +func (e SetMuteStateResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e RevealIdentityResponseValidationError) Reason() string { return e.reason } +func (e SetMuteStateResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e RevealIdentityResponseValidationError) Cause() error { return e.cause } +func (e SetMuteStateResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e RevealIdentityResponseValidationError) Key() bool { return e.key } +func (e SetMuteStateResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e RevealIdentityResponseValidationError) ErrorName() string { - return "RevealIdentityResponseValidationError" +func (e SetMuteStateResponseValidationError) ErrorName() string { + return "SetMuteStateResponseValidationError" } // Error satisfies the builtin error interface -func (e RevealIdentityResponseValidationError) Error() string { +func (e SetMuteStateResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2085,14 +1958,14 @@ func (e RevealIdentityResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRevealIdentityResponse.%s: %s%s", + "invalid %sSetMuteStateResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = RevealIdentityResponseValidationError{} +var _ error = SetMuteStateResponseValidationError{} var _ interface { Field() string @@ -2100,18 +1973,18 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = RevealIdentityResponseValidationError{} +} = SetMuteStateResponseValidationError{} -// Validate checks the field values on SetMuteStateRequest with the rules +// Validate checks the field values on NotifyIsTypingRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *SetMuteStateRequest) Validate() error { +func (m *NotifyIsTypingRequest) Validate() error { if m == nil { return nil } if m.GetChatId() == nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "ChatId", reason: "value is required", } @@ -2119,7 +1992,7 @@ func (m *SetMuteStateRequest) Validate() error { if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "ChatId", reason: "embedded message failed validation", cause: err, @@ -2127,27 +2000,10 @@ func (m *SetMuteStateRequest) Validate() error { } } - if m.GetMemberId() == nil { - return SetMuteStateRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SetMuteStateRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for IsMuted + // no validation rules for IsTyping if m.GetOwner() == nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "Owner", reason: "value is required", } @@ -2155,7 +2011,7 @@ func (m *SetMuteStateRequest) Validate() error { if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "Owner", reason: "embedded message failed validation", cause: err, @@ -2164,7 +2020,7 @@ func (m *SetMuteStateRequest) Validate() error { } if m.GetSignature() == nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "Signature", reason: "value is required", } @@ -2172,7 +2028,7 @@ func (m *SetMuteStateRequest) Validate() error { if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return SetMuteStateRequestValidationError{ + return NotifyIsTypingRequestValidationError{ field: "Signature", reason: "embedded message failed validation", cause: err, @@ -2183,9 +2039,9 @@ func (m *SetMuteStateRequest) Validate() error { return nil } -// SetMuteStateRequestValidationError is the validation error returned by -// SetMuteStateRequest.Validate if the designated constraints aren't met. -type SetMuteStateRequestValidationError struct { +// NotifyIsTypingRequestValidationError is the validation error returned by +// NotifyIsTypingRequest.Validate if the designated constraints aren't met. +type NotifyIsTypingRequestValidationError struct { field string reason string cause error @@ -2193,24 +2049,24 @@ type SetMuteStateRequestValidationError struct { } // Field function returns field value. -func (e SetMuteStateRequestValidationError) Field() string { return e.field } +func (e NotifyIsTypingRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e SetMuteStateRequestValidationError) Reason() string { return e.reason } +func (e NotifyIsTypingRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e SetMuteStateRequestValidationError) Cause() error { return e.cause } +func (e NotifyIsTypingRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e SetMuteStateRequestValidationError) Key() bool { return e.key } +func (e NotifyIsTypingRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e SetMuteStateRequestValidationError) ErrorName() string { - return "SetMuteStateRequestValidationError" +func (e NotifyIsTypingRequestValidationError) ErrorName() string { + return "NotifyIsTypingRequestValidationError" } // Error satisfies the builtin error interface -func (e SetMuteStateRequestValidationError) Error() string { +func (e NotifyIsTypingRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2222,14 +2078,14 @@ func (e SetMuteStateRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sSetMuteStateRequest.%s: %s%s", + "invalid %sNotifyIsTypingRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = SetMuteStateRequestValidationError{} +var _ error = NotifyIsTypingRequestValidationError{} var _ interface { Field() string @@ -2237,12 +2093,12 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = SetMuteStateRequestValidationError{} +} = NotifyIsTypingRequestValidationError{} -// Validate checks the field values on SetMuteStateResponse with the rules +// Validate checks the field values on NotifyIsTypingResponse with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *SetMuteStateResponse) Validate() error { +func (m *NotifyIsTypingResponse) Validate() error { if m == nil { return nil } @@ -2252,9 +2108,9 @@ func (m *SetMuteStateResponse) Validate() error { return nil } -// SetMuteStateResponseValidationError is the validation error returned by -// SetMuteStateResponse.Validate if the designated constraints aren't met. -type SetMuteStateResponseValidationError struct { +// NotifyIsTypingResponseValidationError is the validation error returned by +// NotifyIsTypingResponse.Validate if the designated constraints aren't met. +type NotifyIsTypingResponseValidationError struct { field string reason string cause error @@ -2262,24 +2118,24 @@ type SetMuteStateResponseValidationError struct { } // Field function returns field value. -func (e SetMuteStateResponseValidationError) Field() string { return e.field } +func (e NotifyIsTypingResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e SetMuteStateResponseValidationError) Reason() string { return e.reason } +func (e NotifyIsTypingResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e SetMuteStateResponseValidationError) Cause() error { return e.cause } +func (e NotifyIsTypingResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e SetMuteStateResponseValidationError) Key() bool { return e.key } +func (e NotifyIsTypingResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e SetMuteStateResponseValidationError) ErrorName() string { - return "SetMuteStateResponseValidationError" +func (e NotifyIsTypingResponseValidationError) ErrorName() string { + return "NotifyIsTypingResponseValidationError" } // Error satisfies the builtin error interface -func (e SetMuteStateResponseValidationError) Error() string { +func (e NotifyIsTypingResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2291,14 +2147,14 @@ func (e SetMuteStateResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sSetMuteStateResponse.%s: %s%s", + "invalid %sNotifyIsTypingResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = SetMuteStateResponseValidationError{} +var _ error = NotifyIsTypingResponseValidationError{} var _ interface { Field() string @@ -2306,443 +2162,28 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = SetMuteStateResponseValidationError{} +} = NotifyIsTypingResponseValidationError{} -// Validate checks the field values on SetSubscriptionStateRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *SetSubscriptionStateRequest) Validate() error { +// Validate checks the field values on MessageId with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *MessageId) Validate() error { if m == nil { return nil } - if m.GetChatId() == nil { - return SetSubscriptionStateRequestValidationError{ - field: "ChatId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SetSubscriptionStateRequestValidationError{ - field: "ChatId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetMemberId() == nil { - return SetSubscriptionStateRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SetSubscriptionStateRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for IsSubscribed - - if m.GetOwner() == nil { - return SetSubscriptionStateRequestValidationError{ - field: "Owner", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SetSubscriptionStateRequestValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetSignature() == nil { - return SetSubscriptionStateRequestValidationError{ - field: "Signature", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SetSubscriptionStateRequestValidationError{ - field: "Signature", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// SetSubscriptionStateRequestValidationError is the validation error returned -// by SetSubscriptionStateRequest.Validate if the designated constraints -// aren't met. -type SetSubscriptionStateRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SetSubscriptionStateRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SetSubscriptionStateRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SetSubscriptionStateRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SetSubscriptionStateRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SetSubscriptionStateRequestValidationError) ErrorName() string { - return "SetSubscriptionStateRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SetSubscriptionStateRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSetSubscriptionStateRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SetSubscriptionStateRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SetSubscriptionStateRequestValidationError{} - -// Validate checks the field values on SetSubscriptionStateResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *SetSubscriptionStateResponse) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Result - - return nil -} - -// SetSubscriptionStateResponseValidationError is the validation error returned -// by SetSubscriptionStateResponse.Validate if the designated constraints -// aren't met. -type SetSubscriptionStateResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SetSubscriptionStateResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SetSubscriptionStateResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SetSubscriptionStateResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SetSubscriptionStateResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SetSubscriptionStateResponseValidationError) ErrorName() string { - return "SetSubscriptionStateResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e SetSubscriptionStateResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSetSubscriptionStateResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SetSubscriptionStateResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SetSubscriptionStateResponseValidationError{} - -// Validate checks the field values on NotifyIsTypingRequest with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *NotifyIsTypingRequest) Validate() error { - if m == nil { - return nil - } - - if m.GetChatId() == nil { - return NotifyIsTypingRequestValidationError{ - field: "ChatId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return NotifyIsTypingRequestValidationError{ - field: "ChatId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetMemberId() == nil { - return NotifyIsTypingRequestValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return NotifyIsTypingRequestValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for IsTyping - - if m.GetOwner() == nil { - return NotifyIsTypingRequestValidationError{ - field: "Owner", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return NotifyIsTypingRequestValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetSignature() == nil { - return NotifyIsTypingRequestValidationError{ - field: "Signature", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return NotifyIsTypingRequestValidationError{ - field: "Signature", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// NotifyIsTypingRequestValidationError is the validation error returned by -// NotifyIsTypingRequest.Validate if the designated constraints aren't met. -type NotifyIsTypingRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e NotifyIsTypingRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e NotifyIsTypingRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e NotifyIsTypingRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e NotifyIsTypingRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e NotifyIsTypingRequestValidationError) ErrorName() string { - return "NotifyIsTypingRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e NotifyIsTypingRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sNotifyIsTypingRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = NotifyIsTypingRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = NotifyIsTypingRequestValidationError{} - -// Validate checks the field values on NotifyIsTypingResponse with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *NotifyIsTypingResponse) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Result - - return nil -} - -// NotifyIsTypingResponseValidationError is the validation error returned by -// NotifyIsTypingResponse.Validate if the designated constraints aren't met. -type NotifyIsTypingResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e NotifyIsTypingResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e NotifyIsTypingResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e NotifyIsTypingResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e NotifyIsTypingResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e NotifyIsTypingResponseValidationError) ErrorName() string { - return "NotifyIsTypingResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e NotifyIsTypingResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sNotifyIsTypingResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = NotifyIsTypingResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = NotifyIsTypingResponseValidationError{} - -// Validate checks the field values on ChatMessageId with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *ChatMessageId) Validate() error { - if m == nil { - return nil - } - - if len(m.GetValue()) != 16 { - return ChatMessageIdValidationError{ - field: "Value", - reason: "value length must be 16 bytes", + if len(m.GetValue()) != 16 { + return MessageIdValidationError{ + field: "Value", + reason: "value length must be 16 bytes", } } return nil } -// ChatMessageIdValidationError is the validation error returned by -// ChatMessageId.Validate if the designated constraints aren't met. -type ChatMessageIdValidationError struct { +// MessageIdValidationError is the validation error returned by +// MessageId.Validate if the designated constraints aren't met. +type MessageIdValidationError struct { field string reason string cause error @@ -2750,22 +2191,22 @@ type ChatMessageIdValidationError struct { } // Field function returns field value. -func (e ChatMessageIdValidationError) Field() string { return e.field } +func (e MessageIdValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMessageIdValidationError) Reason() string { return e.reason } +func (e MessageIdValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMessageIdValidationError) Cause() error { return e.cause } +func (e MessageIdValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMessageIdValidationError) Key() bool { return e.key } +func (e MessageIdValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMessageIdValidationError) ErrorName() string { return "ChatMessageIdValidationError" } +func (e MessageIdValidationError) ErrorName() string { return "MessageIdValidationError" } // Error satisfies the builtin error interface -func (e ChatMessageIdValidationError) Error() string { +func (e MessageIdValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2777,14 +2218,14 @@ func (e ChatMessageIdValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMessageId.%s: %s%s", + "invalid %sMessageId.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMessageIdValidationError{} +var _ error = MessageIdValidationError{} var _ interface { Field() string @@ -2792,29 +2233,28 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMessageIdValidationError{} +} = MessageIdValidationError{} -// Validate checks the field values on ChatMemberId with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *ChatMemberId) Validate() error { +// Validate checks the field values on MemberId with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *MemberId) Validate() error { if m == nil { return nil } - if len(m.GetValue()) != 16 { - return ChatMemberIdValidationError{ + if len(m.GetValue()) != 32 { + return MemberIdValidationError{ field: "Value", - reason: "value length must be 16 bytes", + reason: "value length must be 32 bytes", } } return nil } -// ChatMemberIdValidationError is the validation error returned by -// ChatMemberId.Validate if the designated constraints aren't met. -type ChatMemberIdValidationError struct { +// MemberIdValidationError is the validation error returned by +// MemberId.Validate if the designated constraints aren't met. +type MemberIdValidationError struct { field string reason string cause error @@ -2822,22 +2262,22 @@ type ChatMemberIdValidationError struct { } // Field function returns field value. -func (e ChatMemberIdValidationError) Field() string { return e.field } +func (e MemberIdValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMemberIdValidationError) Reason() string { return e.reason } +func (e MemberIdValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMemberIdValidationError) Cause() error { return e.cause } +func (e MemberIdValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMemberIdValidationError) Key() bool { return e.key } +func (e MemberIdValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMemberIdValidationError) ErrorName() string { return "ChatMemberIdValidationError" } +func (e MemberIdValidationError) ErrorName() string { return "MemberIdValidationError" } // Error satisfies the builtin error interface -func (e ChatMemberIdValidationError) Error() string { +func (e MemberIdValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2849,14 +2289,14 @@ func (e ChatMemberIdValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMemberId.%s: %s%s", + "invalid %sMemberId.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMemberIdValidationError{} +var _ error = MemberIdValidationError{} var _ interface { Field() string @@ -2864,18 +2304,17 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMemberIdValidationError{} +} = MemberIdValidationError{} -// Validate checks the field values on ChatMetadata with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *ChatMetadata) Validate() error { +// Validate checks the field values on Metadata with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Metadata) Validate() error { if m == nil { return nil } if m.GetChatId() == nil { - return ChatMetadataValidationError{ + return MetadataValidationError{ field: "ChatId", reason: "value is required", } @@ -2883,7 +2322,7 @@ func (m *ChatMetadata) Validate() error { if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMetadataValidationError{ + return MetadataValidationError{ field: "ChatId", reason: "embedded message failed validation", cause: err, @@ -2891,22 +2330,32 @@ func (m *ChatMetadata) Validate() error { } } - if _, ok := _ChatMetadata_Type_NotInLookup[m.GetType()]; ok { - return ChatMetadataValidationError{ + if _, ok := _Metadata_Type_NotInLookup[m.GetType()]; ok { + return MetadataValidationError{ field: "Type", reason: "value must not be in list [0]", } } - if l := utf8.RuneCountInString(m.GetTitle()); l < 1 || l > 1024 { - return ChatMetadataValidationError{ + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if l := utf8.RuneCountInString(m.GetTitle()); l < 0 || l > 1024 { + return MetadataValidationError{ field: "Title", - reason: "value length must be between 1 and 1024 runes, inclusive", + reason: "value length must be between 0 and 1024 runes, inclusive", } } if l := len(m.GetMembers()); l < 1 || l > 2 { - return ChatMetadataValidationError{ + return MetadataValidationError{ field: "Members", reason: "value must contain between 1 and 2 items, inclusive", } @@ -2917,7 +2366,7 @@ func (m *ChatMetadata) Validate() error { if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMetadataValidationError{ + return MetadataValidationError{ field: fmt.Sprintf("Members[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -2927,26 +2376,18 @@ func (m *ChatMetadata) Validate() error { } - // no validation rules for CanMute + // no validation rules for IsMuted - // no validation rules for CanUnsubscribe + // no validation rules for Muteable - if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChatMetadataValidationError{ - field: "Cursor", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for NumUnread return nil } -// ChatMetadataValidationError is the validation error returned by -// ChatMetadata.Validate if the designated constraints aren't met. -type ChatMetadataValidationError struct { +// MetadataValidationError is the validation error returned by +// Metadata.Validate if the designated constraints aren't met. +type MetadataValidationError struct { field string reason string cause error @@ -2954,22 +2395,22 @@ type ChatMetadataValidationError struct { } // Field function returns field value. -func (e ChatMetadataValidationError) Field() string { return e.field } +func (e MetadataValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMetadataValidationError) Reason() string { return e.reason } +func (e MetadataValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMetadataValidationError) Cause() error { return e.cause } +func (e MetadataValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMetadataValidationError) Key() bool { return e.key } +func (e MetadataValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMetadataValidationError) ErrorName() string { return "ChatMetadataValidationError" } +func (e MetadataValidationError) ErrorName() string { return "MetadataValidationError" } // Error satisfies the builtin error interface -func (e ChatMetadataValidationError) Error() string { +func (e MetadataValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2981,14 +2422,14 @@ func (e ChatMetadataValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMetadata.%s: %s%s", + "invalid %sMetadata.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMetadataValidationError{} +var _ error = MetadataValidationError{} var _ interface { Field() string @@ -2996,22 +2437,21 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMetadataValidationError{} +} = MetadataValidationError{} -var _ChatMetadata_Type_NotInLookup = map[ChatType]struct{}{ +var _Metadata_Type_NotInLookup = map[ChatType]struct{}{ 0: {}, } -// Validate checks the field values on ChatMessage with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *ChatMessage) Validate() error { +// Validate checks the field values on Message with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Message) Validate() error { if m == nil { return nil } if m.GetMessageId() == nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: "MessageId", reason: "value is required", } @@ -3019,7 +2459,7 @@ func (m *ChatMessage) Validate() error { if v, ok := interface{}(m.GetMessageId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: "MessageId", reason: "embedded message failed validation", cause: err, @@ -3029,7 +2469,7 @@ func (m *ChatMessage) Validate() error { if v, ok := interface{}(m.GetSenderId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: "SenderId", reason: "embedded message failed validation", cause: err, @@ -3038,7 +2478,7 @@ func (m *ChatMessage) Validate() error { } if l := len(m.GetContent()); l < 1 || l > 2 { - return ChatMessageValidationError{ + return MessageValidationError{ field: "Content", reason: "value must contain between 1 and 2 items, inclusive", } @@ -3049,7 +2489,7 @@ func (m *ChatMessage) Validate() error { if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: fmt.Sprintf("Content[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -3060,7 +2500,7 @@ func (m *ChatMessage) Validate() error { } if m.GetTs() == nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: "Ts", reason: "value is required", } @@ -3068,7 +2508,7 @@ func (m *ChatMessage) Validate() error { if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMessageValidationError{ + return MessageValidationError{ field: "Cursor", reason: "embedded message failed validation", cause: err, @@ -3079,9 +2519,9 @@ func (m *ChatMessage) Validate() error { return nil } -// ChatMessageValidationError is the validation error returned by -// ChatMessage.Validate if the designated constraints aren't met. -type ChatMessageValidationError struct { +// MessageValidationError is the validation error returned by Message.Validate +// if the designated constraints aren't met. +type MessageValidationError struct { field string reason string cause error @@ -3089,22 +2529,22 @@ type ChatMessageValidationError struct { } // Field function returns field value. -func (e ChatMessageValidationError) Field() string { return e.field } +func (e MessageValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMessageValidationError) Reason() string { return e.reason } +func (e MessageValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMessageValidationError) Cause() error { return e.cause } +func (e MessageValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMessageValidationError) Key() bool { return e.key } +func (e MessageValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMessageValidationError) ErrorName() string { return "ChatMessageValidationError" } +func (e MessageValidationError) ErrorName() string { return "MessageValidationError" } // Error satisfies the builtin error interface -func (e ChatMessageValidationError) Error() string { +func (e MessageValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3116,14 +2556,14 @@ func (e ChatMessageValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMessage.%s: %s%s", + "invalid %sMessage.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMessageValidationError{} +var _ error = MessageValidationError{} var _ interface { Field() string @@ -3131,17 +2571,17 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMessageValidationError{} +} = MessageValidationError{} -// Validate checks the field values on ChatMember with the rules defined in the +// Validate checks the field values on Member with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. -func (m *ChatMember) Validate() error { +func (m *Member) Validate() error { if m == nil { return nil } if m.GetMemberId() == nil { - return ChatMemberValidationError{ + return MemberValidationError{ field: "MemberId", reason: "value is required", } @@ -3149,7 +2589,7 @@ func (m *ChatMember) Validate() error { if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMemberValidationError{ + return MemberValidationError{ field: "MemberId", reason: "embedded message failed validation", cause: err, @@ -3157,11 +2597,9 @@ func (m *ChatMember) Validate() error { } } - // no validation rules for IsSelf - if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMemberValidationError{ + return MemberValidationError{ field: "Identity", reason: "embedded message failed validation", cause: err, @@ -3170,7 +2608,7 @@ func (m *ChatMember) Validate() error { } if len(m.GetPointers()) > 2 { - return ChatMemberValidationError{ + return MemberValidationError{ field: "Pointers", reason: "value must contain no more than 2 item(s)", } @@ -3181,7 +2619,7 @@ func (m *ChatMember) Validate() error { if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatMemberValidationError{ + return MemberValidationError{ field: fmt.Sprintf("Pointers[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -3191,18 +2629,12 @@ func (m *ChatMember) Validate() error { } - // no validation rules for NumUnread - - // no validation rules for IsMuted - - // no validation rules for IsSubscribed - return nil } -// ChatMemberValidationError is the validation error returned by -// ChatMember.Validate if the designated constraints aren't met. -type ChatMemberValidationError struct { +// MemberValidationError is the validation error returned by Member.Validate if +// the designated constraints aren't met. +type MemberValidationError struct { field string reason string cause error @@ -3210,22 +2642,22 @@ type ChatMemberValidationError struct { } // Field function returns field value. -func (e ChatMemberValidationError) Field() string { return e.field } +func (e MemberValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMemberValidationError) Reason() string { return e.reason } +func (e MemberValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMemberValidationError) Cause() error { return e.cause } +func (e MemberValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMemberValidationError) Key() bool { return e.key } +func (e MemberValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMemberValidationError) ErrorName() string { return "ChatMemberValidationError" } +func (e MemberValidationError) ErrorName() string { return "MemberValidationError" } // Error satisfies the builtin error interface -func (e ChatMemberValidationError) Error() string { +func (e MemberValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3237,14 +2669,14 @@ func (e ChatMemberValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMember.%s: %s%s", + "invalid %sMember.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMemberValidationError{} +var _ error = MemberValidationError{} var _ interface { Field() string @@ -3252,32 +2684,39 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMemberValidationError{} +} = MemberValidationError{} -// Validate checks the field values on ChatMemberIdentity with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *ChatMemberIdentity) Validate() error { +// Validate checks the field values on MemberIdentity with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *MemberIdentity) Validate() error { if m == nil { return nil } - if _, ok := _ChatMemberIdentity_Platform_InLookup[m.GetPlatform()]; !ok { - return ChatMemberIdentityValidationError{ + if _, ok := _MemberIdentity_Platform_InLookup[m.GetPlatform()]; !ok { + return MemberIdentityValidationError{ field: "Platform", reason: "value must be in list [1]", } } if l := utf8.RuneCountInString(m.GetUsername()); l < 1 || l > 15 { - return ChatMemberIdentityValidationError{ + return MemberIdentityValidationError{ field: "Username", reason: "value length must be between 1 and 15 runes, inclusive", } } + if utf8.RuneCountInString(m.GetDisplayName()) > 255 { + return MemberIdentityValidationError{ + field: "DisplayName", + reason: "value length must be at most 255 runes", + } + } + if utf8.RuneCountInString(m.GetProfilePicUrl()) > 255 { - return ChatMemberIdentityValidationError{ + return MemberIdentityValidationError{ field: "ProfilePicUrl", reason: "value length must be at most 255 runes", } @@ -3286,9 +2725,9 @@ func (m *ChatMemberIdentity) Validate() error { return nil } -// ChatMemberIdentityValidationError is the validation error returned by -// ChatMemberIdentity.Validate if the designated constraints aren't met. -type ChatMemberIdentityValidationError struct { +// MemberIdentityValidationError is the validation error returned by +// MemberIdentity.Validate if the designated constraints aren't met. +type MemberIdentityValidationError struct { field string reason string cause error @@ -3296,24 +2735,22 @@ type ChatMemberIdentityValidationError struct { } // Field function returns field value. -func (e ChatMemberIdentityValidationError) Field() string { return e.field } +func (e MemberIdentityValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatMemberIdentityValidationError) Reason() string { return e.reason } +func (e MemberIdentityValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatMemberIdentityValidationError) Cause() error { return e.cause } +func (e MemberIdentityValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatMemberIdentityValidationError) Key() bool { return e.key } +func (e MemberIdentityValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatMemberIdentityValidationError) ErrorName() string { - return "ChatMemberIdentityValidationError" -} +func (e MemberIdentityValidationError) ErrorName() string { return "MemberIdentityValidationError" } // Error satisfies the builtin error interface -func (e ChatMemberIdentityValidationError) Error() string { +func (e MemberIdentityValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3325,14 +2762,14 @@ func (e ChatMemberIdentityValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatMemberIdentity.%s: %s%s", + "invalid %sMemberIdentity.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatMemberIdentityValidationError{} +var _ error = MemberIdentityValidationError{} var _ interface { Field() string @@ -3340,9 +2777,9 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatMemberIdentityValidationError{} +} = MemberIdentityValidationError{} -var _ChatMemberIdentity_Platform_InLookup = map[Platform]struct{}{ +var _MemberIdentity_Platform_InLookup = map[Platform]struct{}{ 1: {}, } @@ -3512,30 +2949,6 @@ func (m *Content) Validate() error { } } - case *Content_ThankYou: - - if v, ok := interface{}(m.GetThankYou()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "ThankYou", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *Content_IdentityRevealed: - - if v, ok := interface{}(m.GetIdentityRevealed()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "IdentityRevealed", - reason: "embedded message failed validation", - cause: err, - } - } - } - default: return ContentValidationError{ field: "Type", @@ -3989,189 +3402,6 @@ var _ interface { ErrorName() string } = NaclBoxEncryptedContentValidationError{} -// Validate checks the field values on ThankYouContent with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *ThankYouContent) Validate() error { - if m == nil { - return nil - } - - if m.GetTipIntent() == nil { - return ThankYouContentValidationError{ - field: "TipIntent", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetTipIntent()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ThankYouContentValidationError{ - field: "TipIntent", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// ThankYouContentValidationError is the validation error returned by -// ThankYouContent.Validate if the designated constraints aren't met. -type ThankYouContentValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ThankYouContentValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ThankYouContentValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ThankYouContentValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ThankYouContentValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ThankYouContentValidationError) ErrorName() string { return "ThankYouContentValidationError" } - -// Error satisfies the builtin error interface -func (e ThankYouContentValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sThankYouContent.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ThankYouContentValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ThankYouContentValidationError{} - -// Validate checks the field values on IdentityRevealedContent with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *IdentityRevealedContent) Validate() error { - if m == nil { - return nil - } - - if m.GetMemberId() == nil { - return IdentityRevealedContentValidationError{ - field: "MemberId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return IdentityRevealedContentValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetIdentity() == nil { - return IdentityRevealedContentValidationError{ - field: "Identity", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return IdentityRevealedContentValidationError{ - field: "Identity", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// IdentityRevealedContentValidationError is the validation error returned by -// IdentityRevealedContent.Validate if the designated constraints aren't met. -type IdentityRevealedContentValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e IdentityRevealedContentValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e IdentityRevealedContentValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e IdentityRevealedContentValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e IdentityRevealedContentValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e IdentityRevealedContentValidationError) ErrorName() string { - return "IdentityRevealedContentValidationError" -} - -// Error satisfies the builtin error interface -func (e IdentityRevealedContentValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sIdentityRevealedContent.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = IdentityRevealedContentValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = IdentityRevealedContentValidationError{} - // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Cursor) Validate() error { diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go index 6c2f871..d15ac10 100644 --- a/generated/go/chat/v2/chat_service_grpc.pb.go +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -61,17 +61,12 @@ type ChatClient interface { // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) - // SendMessage sends a message to a chat + // SendMessage sends a message to a chat. SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) - // AdvancePointer advances a pointer in message history for a chat member + // AdvancePointer advances a pointer in message history for a chat member. AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) - // RevealIdentity reveals a chat member's identity if it is anonymous. A chat - // message will be inserted on success. - RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) - // SetMuteState configures a chat member's mute state + // SetMuteState configures a chat member's mute state. SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) - // SetSubscriptionState configures a chat member's susbscription state - SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) // NotifyIsTypingRequest notifies a chat that the sending member is typing. // // These requests are transient, and may be dropped at any point. @@ -162,15 +157,6 @@ func (c *chatClient) AdvancePointer(ctx context.Context, in *AdvancePointerReque return out, nil } -func (c *chatClient) RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) { - out := new(RevealIdentityResponse) - err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/RevealIdentity", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *chatClient) SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) { out := new(SetMuteStateResponse) err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetMuteState", in, out, opts...) @@ -180,15 +166,6 @@ func (c *chatClient) SetMuteState(ctx context.Context, in *SetMuteStateRequest, return out, nil } -func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) { - out := new(SetSubscriptionStateResponse) - err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetSubscriptionState", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *chatClient) NotifyIsTyping(ctx context.Context, in *NotifyIsTypingRequest, opts ...grpc.CallOption) (*NotifyIsTypingResponse, error) { out := new(NotifyIsTypingResponse) err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/NotifyIsTyping", in, out, opts...) @@ -241,17 +218,12 @@ type ChatServer interface { // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) - // SendMessage sends a message to a chat + // SendMessage sends a message to a chat. SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) - // AdvancePointer advances a pointer in message history for a chat member + // AdvancePointer advances a pointer in message history for a chat member. AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) - // RevealIdentity reveals a chat member's identity if it is anonymous. A chat - // message will be inserted on success. - RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) - // SetMuteState configures a chat member's mute state + // SetMuteState configures a chat member's mute state. SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) - // SetSubscriptionState configures a chat member's susbscription state - SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) // NotifyIsTypingRequest notifies a chat that the sending member is typing. // // These requests are transient, and may be dropped at any point. @@ -281,15 +253,9 @@ func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) func (UnimplementedChatServer) AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AdvancePointer not implemented") } -func (UnimplementedChatServer) RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RevealIdentity not implemented") -} func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetMuteState not implemented") } -func (UnimplementedChatServer) SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetSubscriptionState not implemented") -} func (UnimplementedChatServer) NotifyIsTyping(context.Context, *NotifyIsTypingRequest) (*NotifyIsTypingResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NotifyIsTyping not implemented") } @@ -422,24 +388,6 @@ func _Chat_AdvancePointer_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } -func _Chat_RevealIdentity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RevealIdentityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ChatServer).RevealIdentity(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/code.chat.v2.Chat/RevealIdentity", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).RevealIdentity(ctx, req.(*RevealIdentityRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Chat_SetMuteState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetMuteStateRequest) if err := dec(in); err != nil { @@ -458,24 +406,6 @@ func _Chat_SetMuteState_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } -func _Chat_SetSubscriptionState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetSubscriptionStateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ChatServer).SetSubscriptionState(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/code.chat.v2.Chat/SetSubscriptionState", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).SetSubscriptionState(ctx, req.(*SetSubscriptionStateRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Chat_NotifyIsTyping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(NotifyIsTypingRequest) if err := dec(in); err != nil { @@ -521,18 +451,10 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ MethodName: "AdvancePointer", Handler: _Chat_AdvancePointer_Handler, }, - { - MethodName: "RevealIdentity", - Handler: _Chat_RevealIdentity_Handler, - }, { MethodName: "SetMuteState", Handler: _Chat_SetMuteState_Handler, }, - { - MethodName: "SetSubscriptionState", - Handler: _Chat_SetSubscriptionState_Handler, - }, { MethodName: "NotifyIsTyping", Handler: _Chat_NotifyIsTyping_Handler, diff --git a/generated/go/common/v1/model.pb.go b/generated/go/common/v1/model.pb.go index 0aa8014..d34c748 100644 --- a/generated/go/common/v1/model.pb.go +++ b/generated/go/common/v1/model.pb.go @@ -1303,7 +1303,7 @@ var file_common_v1_model_proto_rawDesc = []byte{ 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x34, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, diff --git a/generated/go/common/v1/model.pb.validate.go b/generated/go/common/v1/model.pb.validate.go index d1200b7..489c7c5 100644 --- a/generated/go/common/v1/model.pb.validate.go +++ b/generated/go/common/v1/model.pb.validate.go @@ -556,10 +556,10 @@ func (m *ChatId) Validate() error { return nil } - if len(m.GetValue()) != 32 { + if l := len(m.GetValue()); l < 16 || l > 32 { return ChatIdValidationError{ field: "Value", - reason: "value length must be 32 bytes", + reason: "value length must be between 16 and 32 bytes, inclusive", } } diff --git a/generated/protobuf-es/chat/v2/chat_service_connect.ts b/generated/protobuf-es/chat/v2/chat_service_connect.ts index f37bc0c..7213dce 100644 --- a/generated/protobuf-es/chat/v2/chat_service_connect.ts +++ b/generated/protobuf-es/chat/v2/chat_service_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, NotifyIsTypingRequest, NotifyIsTypingResponse, RevealIdentityRequest, RevealIdentityResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, SetSubscriptionStateRequest, SetSubscriptionStateResponse, StartChatRequest, StartChatResponse, StreamChatEventsRequest, StreamChatEventsResponse } from "./chat_service_pb"; +import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, NotifyIsTypingRequest, NotifyIsTypingResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, StartChatRequest, StartChatResponse, StreamChatEventsRequest, StreamChatEventsResponse } from "./chat_service_pb"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -88,7 +88,7 @@ export const Chat = { kind: MethodKind.Unary, }, /** - * SendMessage sends a message to a chat + * SendMessage sends a message to a chat. * * @generated from rpc code.chat.v2.Chat.SendMessage */ @@ -99,7 +99,7 @@ export const Chat = { kind: MethodKind.Unary, }, /** - * AdvancePointer advances a pointer in message history for a chat member + * AdvancePointer advances a pointer in message history for a chat member. * * @generated from rpc code.chat.v2.Chat.AdvancePointer */ @@ -110,19 +110,7 @@ export const Chat = { kind: MethodKind.Unary, }, /** - * RevealIdentity reveals a chat member's identity if it is anonymous. A chat - * message will be inserted on success. - * - * @generated from rpc code.chat.v2.Chat.RevealIdentity - */ - revealIdentity: { - name: "RevealIdentity", - I: RevealIdentityRequest, - O: RevealIdentityResponse, - kind: MethodKind.Unary, - }, - /** - * SetMuteState configures a chat member's mute state + * SetMuteState configures a chat member's mute state. * * @generated from rpc code.chat.v2.Chat.SetMuteState */ @@ -132,17 +120,6 @@ export const Chat = { O: SetMuteStateResponse, kind: MethodKind.Unary, }, - /** - * SetSubscriptionState configures a chat member's susbscription state - * - * @generated from rpc code.chat.v2.Chat.SetSubscriptionState - */ - setSubscriptionState: { - name: "SetSubscriptionState", - I: SetSubscriptionStateRequest, - O: SetSubscriptionStateResponse, - kind: MethodKind.Unary, - }, /** * NotifyIsTypingRequest notifies a chat that the sending member is typing. * diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index f936875..bf8d17f 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -4,7 +4,7 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, Timestamp } from "@bufbuild/protobuf"; +import { Message as Message$1, proto3, Timestamp } from "@bufbuild/protobuf"; import { ChatId, ClientPong, IntentId, ServerPing, Signature, SolanaAccountId } from "../../common/v1/model_pb"; import { ExchangeData, ExchangeDataWithoutRate } from "../../transaction/v2/transaction_service_pb"; @@ -17,23 +17,17 @@ export enum ChatType { */ UNKNOWN_CHAT_TYPE = 0, - /** - * @generated from enum value: NOTIFICATION = 1; - */ - NOTIFICATION = 1, - /** * GROUP = 3; * - * @generated from enum value: TWO_WAY = 2; + * @generated from enum value: TWO_WAY = 1; */ - TWO_WAY = 2, + TWO_WAY = 1, } // Retrieve enum metadata with: proto3.getEnumType(ChatType) proto3.util.setEnumType(ChatType, "code.chat.v2.ChatType", [ { no: 0, name: "UNKNOWN_CHAT_TYPE" }, - { no: 1, name: "NOTIFICATION" }, - { no: 2, name: "TWO_WAY" }, + { no: 1, name: "TWO_WAY" }, ]); /** @@ -93,7 +87,7 @@ proto3.util.setEnumType(PointerType, "code.chat.v2.PointerType", [ /** * @generated from message code.chat.v2.GetChatsRequest */ -export class GetChatsRequest extends Message { +export class GetChatsRequest extends Message$1 { /** * @generated from field: code.common.v1.SolanaAccountId owner = 1; */ @@ -174,16 +168,16 @@ proto3.util.setEnumType(GetChatsRequest_Direction, "code.chat.v2.GetChatsRequest /** * @generated from message code.chat.v2.GetChatsResponse */ -export class GetChatsResponse extends Message { +export class GetChatsResponse extends Message$1 { /** * @generated from field: code.chat.v2.GetChatsResponse.Result result = 1; */ result = GetChatsResponse_Result.OK; /** - * @generated from field: repeated code.chat.v2.ChatMetadata chats = 2; + * @generated from field: repeated code.chat.v2.Metadata chats = 2; */ - chats: ChatMetadata[] = []; + chats: Metadata[] = []; constructor(data?: PartialMessage) { super(); @@ -194,7 +188,7 @@ export class GetChatsResponse extends Message { static readonly typeName = "code.chat.v2.GetChatsResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(GetChatsResponse_Result) }, - { no: 2, name: "chats", kind: "message", T: ChatMetadata, repeated: true }, + { no: 2, name: "chats", kind: "message", T: Metadata, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetChatsResponse { @@ -222,54 +216,43 @@ export enum GetChatsResponse_Result { * @generated from enum value: OK = 0; */ OK = 0, - - /** - * @generated from enum value: NOT_FOUND = 1; - */ - NOT_FOUND = 1, } // Retrieve enum metadata with: proto3.getEnumType(GetChatsResponse_Result) proto3.util.setEnumType(GetChatsResponse_Result, "code.chat.v2.GetChatsResponse.Result", [ { no: 0, name: "OK" }, - { no: 1, name: "NOT_FOUND" }, ]); /** * @generated from message code.chat.v2.GetMessagesRequest */ -export class GetMessagesRequest extends Message { +export class GetMessagesRequest extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: code.common.v1.SolanaAccountId owner = 3; + * @generated from field: code.common.v1.SolanaAccountId owner = 2; */ owner?: SolanaAccountId; /** - * @generated from field: code.common.v1.Signature signature = 4; + * @generated from field: code.common.v1.Signature signature = 3; */ signature?: Signature; /** - * @generated from field: uint32 page_size = 5; + * @generated from field: uint32 page_size = 4; */ pageSize = 0; /** - * @generated from field: code.chat.v2.Cursor cursor = 6; + * @generated from field: code.chat.v2.Cursor cursor = 5; */ cursor?: Cursor; /** - * @generated from field: code.chat.v2.GetMessagesRequest.Direction direction = 7; + * @generated from field: code.chat.v2.GetMessagesRequest.Direction direction = 6; */ direction = GetMessagesRequest_Direction.ASC; @@ -282,12 +265,11 @@ export class GetMessagesRequest extends Message { static readonly typeName = "code.chat.v2.GetMessagesRequest"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 4, name: "signature", kind: "message", T: Signature }, - { no: 5, name: "page_size", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, - { no: 6, name: "cursor", kind: "message", T: Cursor }, - { no: 7, name: "direction", kind: "enum", T: proto3.getEnumType(GetMessagesRequest_Direction) }, + { no: 2, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 3, name: "signature", kind: "message", T: Signature }, + { no: 4, name: "page_size", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, + { no: 5, name: "cursor", kind: "message", T: Cursor }, + { no: 6, name: "direction", kind: "enum", T: proto3.getEnumType(GetMessagesRequest_Direction) }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetMessagesRequest { @@ -330,16 +312,16 @@ proto3.util.setEnumType(GetMessagesRequest_Direction, "code.chat.v2.GetMessagesR /** * @generated from message code.chat.v2.GetMessagesResponse */ -export class GetMessagesResponse extends Message { +export class GetMessagesResponse extends Message$1 { /** * @generated from field: code.chat.v2.GetMessagesResponse.Result result = 1; */ result = GetMessagesResponse_Result.OK; /** - * @generated from field: repeated code.chat.v2.ChatMessage messages = 2; + * @generated from field: repeated code.chat.v2.Message messages = 2; */ - messages: ChatMessage[] = []; + messages: Message[] = []; constructor(data?: PartialMessage) { super(); @@ -350,7 +332,7 @@ export class GetMessagesResponse extends Message { static readonly typeName = "code.chat.v2.GetMessagesResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(GetMessagesResponse_Result) }, - { no: 2, name: "messages", kind: "message", T: ChatMessage, repeated: true }, + { no: 2, name: "messages", kind: "message", T: Message, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetMessagesResponse { @@ -383,46 +365,29 @@ export enum GetMessagesResponse_Result { * @generated from enum value: DENIED = 1; */ DENIED = 1, - - /** - * @generated from enum value: CHAT_NOT_FOUND = 2; - */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: MESSAGE_NOT_FOUND = 3; - */ - MESSAGE_NOT_FOUND = 3, } // Retrieve enum metadata with: proto3.getEnumType(GetMessagesResponse_Result) proto3.util.setEnumType(GetMessagesResponse_Result, "code.chat.v2.GetMessagesResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "MESSAGE_NOT_FOUND" }, ]); /** * @generated from message code.chat.v2.OpenChatEventStream */ -export class OpenChatEventStream extends Message { +export class OpenChatEventStream extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: code.common.v1.SolanaAccountId owner = 3; + * @generated from field: code.common.v1.SolanaAccountId owner = 2; */ owner?: SolanaAccountId; /** - * @generated from field: code.common.v1.Signature signature = 4; + * @generated from field: code.common.v1.Signature signature = 3; */ signature?: Signature; @@ -435,9 +400,8 @@ export class OpenChatEventStream extends Message { static readonly typeName = "code.chat.v2.OpenChatEventStream"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 4, name: "signature", kind: "message", T: Signature }, + { no: 2, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 3, name: "signature", kind: "message", T: Signature }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): OpenChatEventStream { @@ -460,15 +424,15 @@ export class OpenChatEventStream extends Message { /** * @generated from message code.chat.v2.ChatStreamEvent */ -export class ChatStreamEvent extends Message { +export class ChatStreamEvent extends Message$1 { /** * @generated from oneof code.chat.v2.ChatStreamEvent.type */ type: { /** - * @generated from field: code.chat.v2.ChatMessage message = 1; + * @generated from field: code.chat.v2.Message message = 1; */ - value: ChatMessage; + value: Message; case: "message"; } | { /** @@ -492,7 +456,7 @@ export class ChatStreamEvent extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "code.chat.v2.ChatStreamEvent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "message", kind: "message", T: ChatMessage, oneof: "type" }, + { no: 1, name: "message", kind: "message", T: Message, oneof: "type" }, { no: 2, name: "pointer", kind: "message", T: Pointer, oneof: "type" }, { no: 3, name: "is_typing", kind: "message", T: IsTyping, oneof: "type" }, ]); @@ -517,7 +481,7 @@ export class ChatStreamEvent extends Message { /** * @generated from message code.chat.v2.ChatStreamEventBatch */ -export class ChatStreamEventBatch extends Message { +export class ChatStreamEventBatch extends Message$1 { /** * @generated from field: repeated code.chat.v2.ChatStreamEvent events = 2; */ @@ -554,7 +518,7 @@ export class ChatStreamEventBatch extends Message { /** * @generated from message code.chat.v2.ChatStreamEventError */ -export class ChatStreamEventError extends Message { +export class ChatStreamEventError extends Message$1 { /** * @generated from field: code.chat.v2.ChatStreamEventError.Code code = 1; */ @@ -596,22 +560,16 @@ export enum ChatStreamEventError_Code { * @generated from enum value: DENIED = 0; */ DENIED = 0, - - /** - * @generated from enum value: CHAT_NOT_FOUND = 1; - */ - CHAT_NOT_FOUND = 1, } // Retrieve enum metadata with: proto3.getEnumType(ChatStreamEventError_Code) proto3.util.setEnumType(ChatStreamEventError_Code, "code.chat.v2.ChatStreamEventError.Code", [ { no: 0, name: "DENIED" }, - { no: 1, name: "CHAT_NOT_FOUND" }, ]); /** * @generated from message code.chat.v2.StreamChatEventsRequest */ -export class StreamChatEventsRequest extends Message { +export class StreamChatEventsRequest extends Message$1 { /** * @generated from oneof code.chat.v2.StreamChatEventsRequest.type */ @@ -661,7 +619,7 @@ export class StreamChatEventsRequest extends Message { /** * @generated from message code.chat.v2.StreamChatEventsResponse */ -export class StreamChatEventsResponse extends Message { +export class StreamChatEventsResponse extends Message$1 { /** * @generated from oneof code.chat.v2.StreamChatEventsResponse.type */ @@ -718,7 +676,7 @@ export class StreamChatEventsResponse extends Message /** * @generated from message code.chat.v2.StartChatRequest */ -export class StartChatRequest extends Message { +export class StartChatRequest extends Message$1 { /** * @generated from field: code.common.v1.SolanaAccountId owner = 1; */ @@ -729,19 +687,12 @@ export class StartChatRequest extends Message { */ signature?: Signature; - /** - * @generated from field: code.chat.v2.ChatMemberIdentity self = 3; - */ - self?: ChatMemberIdentity; - /** * @generated from oneof code.chat.v2.StartChatRequest.parameters */ parameters: { /** - * GroupChatParameters group_chat = 4; - * - * @generated from field: code.chat.v2.StartTwoWayChatParameters two_way_chat = 4; + * @generated from field: code.chat.v2.StartTwoWayChatParameters two_way_chat = 3; */ value: StartTwoWayChatParameters; case: "twoWayChat"; @@ -757,8 +708,7 @@ export class StartChatRequest extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, { no: 2, name: "signature", kind: "message", T: Signature }, - { no: 3, name: "self", kind: "message", T: ChatMemberIdentity }, - { no: 4, name: "two_way_chat", kind: "message", T: StartTwoWayChatParameters, oneof: "parameters" }, + { no: 3, name: "two_way_chat", kind: "message", T: StartTwoWayChatParameters, oneof: "parameters" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartChatRequest { @@ -787,7 +737,7 @@ export class StartChatRequest extends Message { * * @generated from message code.chat.v2.StartTwoWayChatParameters */ -export class StartTwoWayChatParameters extends Message { +export class StartTwoWayChatParameters extends Message$1 { /** * The account id of the user the caller wishes to chat with. * @@ -811,15 +761,6 @@ export class StartTwoWayChatParameters extends Message) { super(); proto3.util.initPartial(data, this); @@ -830,7 +771,6 @@ export class StartTwoWayChatParameters extends Message [ { no: 1, name: "other_user", kind: "message", T: SolanaAccountId }, { no: 2, name: "intent_id", kind: "message", T: IntentId }, - { no: 3, name: "identity", kind: "message", T: ChatMemberIdentity }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartTwoWayChatParameters { @@ -853,7 +793,7 @@ export class StartTwoWayChatParameters extends Message { +export class StartChatResponse extends Message$1 { /** * @generated from field: code.chat.v2.StartChatResponse.Result result = 1; */ @@ -862,9 +802,9 @@ export class StartChatResponse extends Message { /** * The chat to use if the RPC was successful. * - * @generated from field: code.chat.v2.ChatMetadata chat = 2; + * @generated from field: code.chat.v2.Metadata chat = 2; */ - chat?: ChatMetadata; + chat?: Metadata; constructor(data?: PartialMessage) { super(); @@ -875,7 +815,7 @@ export class StartChatResponse extends Message { static readonly typeName = "code.chat.v2.StartChatResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(StartChatResponse_Result) }, - { no: 2, name: "chat", kind: "message", T: ChatMetadata }, + { no: 2, name: "chat", kind: "message", T: Metadata }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): StartChatResponse { @@ -926,6 +866,20 @@ export enum StartChatResponse_Result { * @generated from enum value: PENDING = 3; */ PENDING = 3, + + /** + * MISSING_IDENTITY indicates that there is no identity for the user (creator). + * + * @generated from enum value: MISSING_IDENTITY = 4; + */ + MISSING_IDENTITY = 4, + + /** + * USER_NOT_FOUND indicates that (one of) the target user's was not found. + * + * @generated from enum value: USER_NOT_FOUND = 5; + */ + USER_NOT_FOUND = 5, } // Retrieve enum metadata with: proto3.getEnumType(StartChatResponse_Result) proto3.util.setEnumType(StartChatResponse_Result, "code.chat.v2.StartChatResponse.Result", [ @@ -933,38 +887,35 @@ proto3.util.setEnumType(StartChatResponse_Result, "code.chat.v2.StartChatRespons { no: 1, name: "DENIED" }, { no: 2, name: "INVALID_PARAMETER" }, { no: 3, name: "PENDING" }, + { no: 4, name: "MISSING_IDENTITY" }, + { no: 5, name: "USER_NOT_FOUND" }, ]); /** * @generated from message code.chat.v2.SendMessageRequest */ -export class SendMessageRequest extends Message { +export class SendMessageRequest extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; - /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - /** * Allowed content types that can be sent by client: * - TextContent * - ThankYouContent * - * @generated from field: repeated code.chat.v2.Content content = 3; + * @generated from field: repeated code.chat.v2.Content content = 2; */ content: Content[] = []; /** - * @generated from field: code.common.v1.SolanaAccountId owner = 4; + * @generated from field: code.common.v1.SolanaAccountId owner = 3; */ owner?: SolanaAccountId; /** - * @generated from field: code.common.v1.Signature signature = 5; + * @generated from field: code.common.v1.Signature signature = 4; */ signature?: Signature; @@ -977,10 +928,9 @@ export class SendMessageRequest extends Message { static readonly typeName = "code.chat.v2.SendMessageRequest"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "content", kind: "message", T: Content, repeated: true }, - { no: 4, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 5, name: "signature", kind: "message", T: Signature }, + { no: 2, name: "content", kind: "message", T: Content, repeated: true }, + { no: 3, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 4, name: "signature", kind: "message", T: Signature }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageRequest { @@ -1003,7 +953,7 @@ export class SendMessageRequest extends Message { /** * @generated from message code.chat.v2.SendMessageResponse */ -export class SendMessageResponse extends Message { +export class SendMessageResponse extends Message$1 { /** * @generated from field: code.chat.v2.SendMessageResponse.Result result = 1; */ @@ -1013,9 +963,9 @@ export class SendMessageResponse extends Message { * The chat message that was sent if the RPC was succesful, which includes * server-side metadata like the generated message ID and official timestamp * - * @generated from field: code.chat.v2.ChatMessage message = 2; + * @generated from field: code.chat.v2.Message message = 2; */ - message?: ChatMessage; + message?: Message; constructor(data?: PartialMessage) { super(); @@ -1026,7 +976,7 @@ export class SendMessageResponse extends Message { static readonly typeName = "code.chat.v2.SendMessageResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(SendMessageResponse_Result) }, - { no: 2, name: "message", kind: "message", T: ChatMessage }, + { no: 2, name: "message", kind: "message", T: Message }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageResponse { @@ -1061,33 +1011,21 @@ export enum SendMessageResponse_Result { DENIED = 1, /** - * @generated from enum value: CHAT_NOT_FOUND = 2; + * @generated from enum value: INVALID_CONTENT_TYPE = 2; */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: INVALID_CHAT_TYPE = 3; - */ - INVALID_CHAT_TYPE = 3, - - /** - * @generated from enum value: INVALID_CONTENT_TYPE = 4; - */ - INVALID_CONTENT_TYPE = 4, + INVALID_CONTENT_TYPE = 2, } // Retrieve enum metadata with: proto3.getEnumType(SendMessageResponse_Result) proto3.util.setEnumType(SendMessageResponse_Result, "code.chat.v2.SendMessageResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "INVALID_CHAT_TYPE" }, - { no: 4, name: "INVALID_CONTENT_TYPE" }, + { no: 2, name: "INVALID_CONTENT_TYPE" }, ]); /** * @generated from message code.chat.v2.AdvancePointerRequest */ -export class AdvancePointerRequest extends Message { +export class AdvancePointerRequest extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ @@ -1142,7 +1080,7 @@ export class AdvancePointerRequest extends Message { /** * @generated from message code.chat.v2.AdvancePointerResponse */ -export class AdvancePointerResponse extends Message { +export class AdvancePointerResponse extends Message$1 { /** * @generated from field: code.chat.v2.AdvancePointerResponse.Result result = 1; */ @@ -1191,193 +1129,38 @@ export enum AdvancePointerResponse_Result { DENIED = 1, /** - * @generated from enum value: CHAT_NOT_FOUND = 2; - */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: MESSAGE_NOT_FOUND = 3; - */ - MESSAGE_NOT_FOUND = 3, - - /** - * @generated from enum value: INVALID_POINTER_TYPE = 4; + * @generated from enum value: MESSAGE_NOT_FOUND = 2; */ - INVALID_POINTER_TYPE = 4, + MESSAGE_NOT_FOUND = 2, } // Retrieve enum metadata with: proto3.getEnumType(AdvancePointerResponse_Result) proto3.util.setEnumType(AdvancePointerResponse_Result, "code.chat.v2.AdvancePointerResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "MESSAGE_NOT_FOUND" }, - { no: 4, name: "INVALID_POINTER_TYPE" }, -]); - -/** - * @generated from message code.chat.v2.RevealIdentityRequest - */ -export class RevealIdentityRequest extends Message { - /** - * @generated from field: code.common.v1.ChatId chat_id = 1; - */ - chatId?: ChatId; - - /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: code.chat.v2.ChatMemberIdentity identity = 3; - */ - identity?: ChatMemberIdentity; - - /** - * @generated from field: code.common.v1.SolanaAccountId owner = 4; - */ - owner?: SolanaAccountId; - - /** - * @generated from field: code.common.v1.Signature signature = 5; - */ - signature?: Signature; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.RevealIdentityRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "identity", kind: "message", T: ChatMemberIdentity }, - { no: 4, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 5, name: "signature", kind: "message", T: Signature }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): RevealIdentityRequest { - return new RevealIdentityRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): RevealIdentityRequest { - return new RevealIdentityRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): RevealIdentityRequest { - return new RevealIdentityRequest().fromJsonString(jsonString, options); - } - - static equals(a: RevealIdentityRequest | PlainMessage | undefined, b: RevealIdentityRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(RevealIdentityRequest, a, b); - } -} - -/** - * @generated from message code.chat.v2.RevealIdentityResponse - */ -export class RevealIdentityResponse extends Message { - /** - * @generated from field: code.chat.v2.RevealIdentityResponse.Result result = 1; - */ - result = RevealIdentityResponse_Result.OK; - - /** - * The chat message that was sent if the RPC was successful - * - * @generated from field: code.chat.v2.ChatMessage message = 2; - */ - message?: ChatMessage; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.RevealIdentityResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(RevealIdentityResponse_Result) }, - { no: 2, name: "message", kind: "message", T: ChatMessage }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): RevealIdentityResponse { - return new RevealIdentityResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): RevealIdentityResponse { - return new RevealIdentityResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): RevealIdentityResponse { - return new RevealIdentityResponse().fromJsonString(jsonString, options); - } - - static equals(a: RevealIdentityResponse | PlainMessage | undefined, b: RevealIdentityResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(RevealIdentityResponse, a, b); - } -} - -/** - * @generated from enum code.chat.v2.RevealIdentityResponse.Result - */ -export enum RevealIdentityResponse_Result { - /** - * @generated from enum value: OK = 0; - */ - OK = 0, - - /** - * @generated from enum value: DENIED = 1; - */ - DENIED = 1, - - /** - * @generated from enum value: CHAT_NOT_FOUND = 2; - */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: DIFFERENT_IDENTITY_REVEALED = 3; - */ - DIFFERENT_IDENTITY_REVEALED = 3, -} -// Retrieve enum metadata with: proto3.getEnumType(RevealIdentityResponse_Result) -proto3.util.setEnumType(RevealIdentityResponse_Result, "code.chat.v2.RevealIdentityResponse.Result", [ - { no: 0, name: "OK" }, - { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "DIFFERENT_IDENTITY_REVEALED" }, + { no: 2, name: "MESSAGE_NOT_FOUND" }, ]); /** * @generated from message code.chat.v2.SetMuteStateRequest */ -export class SetMuteStateRequest extends Message { +export class SetMuteStateRequest extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: bool is_muted = 3; + * @generated from field: bool is_muted = 2; */ isMuted = false; /** - * @generated from field: code.common.v1.SolanaAccountId owner = 4; + * @generated from field: code.common.v1.SolanaAccountId owner = 3; */ owner?: SolanaAccountId; /** - * @generated from field: code.common.v1.Signature signature = 5; + * @generated from field: code.common.v1.Signature signature = 4; */ signature?: Signature; @@ -1390,10 +1173,9 @@ export class SetMuteStateRequest extends Message { static readonly typeName = "code.chat.v2.SetMuteStateRequest"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "is_muted", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 4, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 5, name: "signature", kind: "message", T: Signature }, + { no: 2, name: "is_muted", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 3, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 4, name: "signature", kind: "message", T: Signature }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): SetMuteStateRequest { @@ -1416,7 +1198,7 @@ export class SetMuteStateRequest extends Message { /** * @generated from message code.chat.v2.SetMuteStateResponse */ -export class SetMuteStateResponse extends Message { +export class SetMuteStateResponse extends Message$1 { /** * @generated from field: code.chat.v2.SetMuteStateResponse.Result result = 1; */ @@ -1465,179 +1247,38 @@ export enum SetMuteStateResponse_Result { DENIED = 1, /** - * @generated from enum value: CHAT_NOT_FOUND = 2; + * @generated from enum value: CANT_MUTE = 2; */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: CANT_MUTE = 3; - */ - CANT_MUTE = 3, + CANT_MUTE = 2, } // Retrieve enum metadata with: proto3.getEnumType(SetMuteStateResponse_Result) proto3.util.setEnumType(SetMuteStateResponse_Result, "code.chat.v2.SetMuteStateResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "CANT_MUTE" }, -]); - -/** - * @generated from message code.chat.v2.SetSubscriptionStateRequest - */ -export class SetSubscriptionStateRequest extends Message { - /** - * @generated from field: code.common.v1.ChatId chat_id = 1; - */ - chatId?: ChatId; - - /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: bool is_subscribed = 3; - */ - isSubscribed = false; - - /** - * @generated from field: code.common.v1.SolanaAccountId owner = 4; - */ - owner?: SolanaAccountId; - - /** - * @generated from field: code.common.v1.Signature signature = 5; - */ - signature?: Signature; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.SetSubscriptionStateRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "is_subscribed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 4, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 5, name: "signature", kind: "message", T: Signature }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SetSubscriptionStateRequest { - return new SetSubscriptionStateRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SetSubscriptionStateRequest { - return new SetSubscriptionStateRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SetSubscriptionStateRequest { - return new SetSubscriptionStateRequest().fromJsonString(jsonString, options); - } - - static equals(a: SetSubscriptionStateRequest | PlainMessage | undefined, b: SetSubscriptionStateRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(SetSubscriptionStateRequest, a, b); - } -} - -/** - * @generated from message code.chat.v2.SetSubscriptionStateResponse - */ -export class SetSubscriptionStateResponse extends Message { - /** - * @generated from field: code.chat.v2.SetSubscriptionStateResponse.Result result = 1; - */ - result = SetSubscriptionStateResponse_Result.OK; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.SetSubscriptionStateResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(SetSubscriptionStateResponse_Result) }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SetSubscriptionStateResponse { - return new SetSubscriptionStateResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SetSubscriptionStateResponse { - return new SetSubscriptionStateResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SetSubscriptionStateResponse { - return new SetSubscriptionStateResponse().fromJsonString(jsonString, options); - } - - static equals(a: SetSubscriptionStateResponse | PlainMessage | undefined, b: SetSubscriptionStateResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(SetSubscriptionStateResponse, a, b); - } -} - -/** - * @generated from enum code.chat.v2.SetSubscriptionStateResponse.Result - */ -export enum SetSubscriptionStateResponse_Result { - /** - * @generated from enum value: OK = 0; - */ - OK = 0, - - /** - * @generated from enum value: DENIED = 1; - */ - DENIED = 1, - - /** - * @generated from enum value: CHAT_NOT_FOUND = 2; - */ - CHAT_NOT_FOUND = 2, - - /** - * @generated from enum value: CANT_UNSUBSCRIBE = 3; - */ - CANT_UNSUBSCRIBE = 3, -} -// Retrieve enum metadata with: proto3.getEnumType(SetSubscriptionStateResponse_Result) -proto3.util.setEnumType(SetSubscriptionStateResponse_Result, "code.chat.v2.SetSubscriptionStateResponse.Result", [ - { no: 0, name: "OK" }, - { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, - { no: 3, name: "CANT_UNSUBSCRIBE" }, + { no: 2, name: "CANT_MUTE" }, ]); /** * @generated from message code.chat.v2.NotifyIsTypingRequest */ -export class NotifyIsTypingRequest extends Message { +export class NotifyIsTypingRequest extends Message$1 { /** * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 2; - */ - memberId?: ChatMemberId; - - /** - * @generated from field: bool is_typing = 3; + * @generated from field: bool is_typing = 2; */ isTyping = false; /** - * @generated from field: code.common.v1.SolanaAccountId owner = 4; + * @generated from field: code.common.v1.SolanaAccountId owner = 3; */ owner?: SolanaAccountId; /** - * @generated from field: code.common.v1.Signature signature = 5; + * @generated from field: code.common.v1.Signature signature = 4; */ signature?: Signature; @@ -1650,10 +1291,9 @@ export class NotifyIsTypingRequest extends Message { static readonly typeName = "code.chat.v2.NotifyIsTypingRequest"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 3, name: "is_typing", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 4, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 5, name: "signature", kind: "message", T: Signature }, + { no: 2, name: "is_typing", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 3, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 4, name: "signature", kind: "message", T: Signature }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): NotifyIsTypingRequest { @@ -1676,7 +1316,7 @@ export class NotifyIsTypingRequest extends Message { /** * @generated from message code.chat.v2.NotifyIsTypingResponse */ -export class NotifyIsTypingResponse extends Message { +export class NotifyIsTypingResponse extends Message$1 { /** * @generated from field: code.chat.v2.NotifyIsTypingResponse.Result result = 1; */ @@ -1723,96 +1363,89 @@ export enum NotifyIsTypingResponse_Result { * @generated from enum value: DENIED = 1; */ DENIED = 1, - - /** - * @generated from enum value: CHAT_NOT_FOUND = 2; - */ - CHAT_NOT_FOUND = 2, } // Retrieve enum metadata with: proto3.getEnumType(NotifyIsTypingResponse_Result) proto3.util.setEnumType(NotifyIsTypingResponse_Result, "code.chat.v2.NotifyIsTypingResponse.Result", [ { no: 0, name: "OK" }, { no: 1, name: "DENIED" }, - { no: 2, name: "CHAT_NOT_FOUND" }, ]); /** - * @generated from message code.chat.v2.ChatMessageId + * @generated from message code.chat.v2.MessageId */ -export class ChatMessageId extends Message { +export class MessageId extends Message$1 { /** - * Guaranteed to be a time-based UUID. This should be used to construct a - * consistently ordered message history based on time using a simple byte - * comparison. + * A lexicographically sortable ID that can be used to sort source of + * chat history. * * @generated from field: bytes value = 1; */ value = new Uint8Array(0); - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMessageId"; + static readonly typeName = "code.chat.v2.MessageId"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessageId { - return new ChatMessageId().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): MessageId { + return new MessageId().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMessageId { - return new ChatMessageId().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): MessageId { + return new MessageId().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMessageId { - return new ChatMessageId().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): MessageId { + return new MessageId().fromJsonString(jsonString, options); } - static equals(a: ChatMessageId | PlainMessage | undefined, b: ChatMessageId | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMessageId, a, b); + static equals(a: MessageId | PlainMessage | undefined, b: MessageId | PlainMessage | undefined): boolean { + return proto3.util.equals(MessageId, a, b); } } /** - * @generated from message code.chat.v2.ChatMemberId + * @generated from message code.chat.v2.MemberId */ -export class ChatMemberId extends Message { +export class MemberId extends Message$1 { /** - * Globally random UUID + * The publically available 'deposit' address of the user. * * @generated from field: bytes value = 1; */ value = new Uint8Array(0); - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMemberId"; + static readonly typeName = "code.chat.v2.MemberId"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMemberId { - return new ChatMemberId().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): MemberId { + return new MemberId().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMemberId { - return new ChatMemberId().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): MemberId { + return new MemberId().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMemberId { - return new ChatMemberId().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): MemberId { + return new MemberId().fromJsonString(jsonString, options); } - static equals(a: ChatMemberId | PlainMessage | undefined, b: ChatMemberId | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMemberId, a, b); + static equals(a: MemberId | PlainMessage | undefined, b: MemberId | PlainMessage | undefined): boolean { + return proto3.util.equals(MemberId, a, b); } } @@ -1821,12 +1454,10 @@ export class ChatMemberId extends Message { * * todo: Support is_verified in a clean way * - * @generated from message code.chat.v2.ChatMetadata + * @generated from message code.chat.v2.Metadata */ -export class ChatMetadata extends Message { +export class Metadata extends Message$1 { /** - * Globally unique ID for this chat - * * @generated from field: code.common.v1.ChatId chat_id = 1; */ chatId?: ChatId; @@ -1839,101 +1470,103 @@ export class ChatMetadata extends Message { type = ChatType.UNKNOWN_CHAT_TYPE; /** - * The chat title, which will be localized by server when applicable + * Cursor value for this chat for reference in subsequent GetChatsRequest * - * @generated from field: string title = 3; + * @generated from field: code.chat.v2.Cursor cursor = 3; */ - title = ""; + cursor?: Cursor; /** - * The members in this chat - * - * For NOTIFICATION chats, this list has exactly 1 item - * For TWO_WAY chats, this list has exactly 2 items + * The chat title, which is _only_ set by server if an explicit title + * was set. Otherwise, clients should fill in an appropriate chat title. * - * todo: If we support group chats, then we'll likely return the first page - * or a prioritized list. The remaining members would be fetched via - * a new RPC. + * @generated from field: string title = 4; + */ + title = ""; + + /** + * The members in this chat. * - * @generated from field: repeated code.chat.v2.ChatMember members = 4; + * @generated from field: repeated code.chat.v2.Member members = 5; */ - members: ChatMember[] = []; + members: Member[] = []; /** - * Can the user mute this chat? + * Whether or not the chat is muted (from the perspective of the caller). * - * @generated from field: bool can_mute = 5; + * @generated from field: bool is_muted = 6; */ - canMute = false; + isMuted = false; /** - * Can the user unsubscribe from this chat? + * Whether or not the chat is mutable (from the persective of the caller). * - * @generated from field: bool can_unsubscribe = 6; + * @generated from field: bool muteable = 7; */ - canUnsubscribe = false; + muteable = false; /** - * Cursor value for this chat for reference in subsequent GetChatsRequest + * Number of (estimated) unread message (from the perspective of the caller). * - * @generated from field: code.chat.v2.Cursor cursor = 7; + * @generated from field: uint32 num_unread = 8; */ - cursor?: Cursor; + numUnread = 0; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMetadata"; + static readonly typeName = "code.chat.v2.Metadata"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, { no: 2, name: "type", kind: "enum", T: proto3.getEnumType(ChatType) }, - { no: 3, name: "title", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "members", kind: "message", T: ChatMember, repeated: true }, - { no: 5, name: "can_mute", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 6, name: "can_unsubscribe", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 7, name: "cursor", kind: "message", T: Cursor }, + { no: 3, name: "cursor", kind: "message", T: Cursor }, + { no: 4, name: "title", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "members", kind: "message", T: Member, repeated: true }, + { no: 6, name: "is_muted", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 7, name: "muteable", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 8, name: "num_unread", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMetadata { - return new ChatMetadata().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): Metadata { + return new Metadata().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMetadata { - return new ChatMetadata().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): Metadata { + return new Metadata().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMetadata { - return new ChatMetadata().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): Metadata { + return new Metadata().fromJsonString(jsonString, options); } - static equals(a: ChatMetadata | PlainMessage | undefined, b: ChatMetadata | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMetadata, a, b); + static equals(a: Metadata | PlainMessage | undefined, b: Metadata | PlainMessage | undefined): boolean { + return proto3.util.equals(Metadata, a, b); } } /** * A message in a chat * - * @generated from message code.chat.v2.ChatMessage + * @generated from message code.chat.v2.Message */ -export class ChatMessage extends Message { +export class Message extends Message$1 { /** * Globally unique ID for this message * - * @generated from field: code.chat.v2.ChatMessageId message_id = 1; + * @generated from field: code.chat.v2.MessageId message_id = 1; */ - messageId?: ChatMessageId; + messageId?: MessageId; /** * The chat member that sent the message. For NOTIFICATION chats, this field * is omitted since the chat has exactly 1 member. * - * @generated from field: code.chat.v2.ChatMemberId sender_id = 2; + * @generated from field: code.chat.v2.MemberId sender_id = 2; */ - senderId?: ChatMemberId; + senderId?: MemberId; /** * Ordered message content. A message may have more than one piece of content. @@ -1957,142 +1590,110 @@ export class ChatMessage extends Message { */ cursor?: Cursor; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMessage"; + static readonly typeName = "code.chat.v2.Message"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "message_id", kind: "message", T: ChatMessageId }, - { no: 2, name: "sender_id", kind: "message", T: ChatMemberId }, + { no: 1, name: "message_id", kind: "message", T: MessageId }, + { no: 2, name: "sender_id", kind: "message", T: MemberId }, { no: 3, name: "content", kind: "message", T: Content, repeated: true }, { no: 4, name: "ts", kind: "message", T: Timestamp }, { no: 5, name: "cursor", kind: "message", T: Cursor }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessage { - return new ChatMessage().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): Message { + return new Message().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMessage { - return new ChatMessage().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): Message { + return new Message().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMessage { - return new ChatMessage().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): Message { + return new Message().fromJsonString(jsonString, options); } - static equals(a: ChatMessage | PlainMessage | undefined, b: ChatMessage | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMessage, a, b); + static equals(a: Message | PlainMessage | undefined, b: Message | PlainMessage | undefined): boolean { + return proto3.util.equals(Message, a, b); } } /** * A user in a chat * - * @generated from message code.chat.v2.ChatMember + * @generated from message code.chat.v2.Member */ -export class ChatMember extends Message { - /** - * Globally unique ID for this chat member - * - * @generated from field: code.chat.v2.ChatMemberId member_id = 1; - */ - memberId?: ChatMemberId; - +export class Member extends Message$1 { /** - * Is this chat member yourself? This enables client to identify which member_id - * is themselves. + * Public AccountId (for is self...is derived via deposit address) * - * @generated from field: bool is_self = 2; + * @generated from field: code.chat.v2.MemberId member_id = 1; */ - isSelf = false; + memberId?: MemberId; /** * The chat member's identity if it has been revealed. * - * @generated from field: code.chat.v2.ChatMemberIdentity identity = 3; - */ - identity?: ChatMemberIdentity; - - /** - * Chat message state for this member. This list will have DELIVERED and READ - * pointers, if they exist. SENT pointers should be inferred by persistence - * on server. + * Multiple identities here? Well really only needs twitter/other handles + * Repeated PlatformHandles (where code doesn't matter)? * - * @generated from field: repeated code.chat.v2.Pointer pointers = 4; + * @generated from field: code.chat.v2.MemberIdentity identity = 2; */ - pointers: Pointer[] = []; + identity?: MemberIdentity; /** - * Estimated number of unread messages for the chat member in this chat - * - * Only valid when is_self = true + * Chat message state for this member. * - * @generated from field: uint32 num_unread = 5; - */ - numUnread = 0; - - /** - * Has the chat member muted this chat? + * If set, the list may contain DELIVERED and READ pointers. SENT pointers + * are only shared between the sender and server, to indicate persistence. * - * Only valid when is_self = true + * The server may wish to omit all pointers in various types of group chats + * or as relief valves. * - * @generated from field: bool is_muted = 6; + * @generated from field: repeated code.chat.v2.Pointer pointers = 3; */ - isMuted = false; - - /** - * Is the chat member subscribed to this chat? - * - * Only valid when is_self = true - * - * @generated from field: bool is_subscribed = 7; - */ - isSubscribed = false; + pointers: Pointer[] = []; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMember"; + static readonly typeName = "code.chat.v2.Member"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 2, name: "is_self", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 3, name: "identity", kind: "message", T: ChatMemberIdentity }, - { no: 4, name: "pointers", kind: "message", T: Pointer, repeated: true }, - { no: 5, name: "num_unread", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, - { no: 6, name: "is_muted", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 7, name: "is_subscribed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 1, name: "member_id", kind: "message", T: MemberId }, + { no: 2, name: "identity", kind: "message", T: MemberIdentity }, + { no: 3, name: "pointers", kind: "message", T: Pointer, repeated: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMember { - return new ChatMember().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): Member { + return new Member().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMember { - return new ChatMember().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): Member { + return new Member().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMember { - return new ChatMember().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): Member { + return new Member().fromJsonString(jsonString, options); } - static equals(a: ChatMember | PlainMessage | undefined, b: ChatMember | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMember, a, b); + static equals(a: Member | PlainMessage | undefined, b: Member | PlainMessage | undefined): boolean { + return proto3.util.equals(Member, a, b); } } /** * Identity to an external social platform that can be linked to a Code account * - * @generated from message code.chat.v2.ChatMemberIdentity + * @generated from message code.chat.v2.MemberIdentity */ -export class ChatMemberIdentity extends Message { +export class MemberIdentity extends Message$1 { /** * The external social platform linked to this chat member * @@ -2101,46 +1702,54 @@ export class ChatMemberIdentity extends Message { platform = Platform.UNKNOWN_PLATFORM; /** - * The chat member's username on the external social platform + * The chat member's username on the external social platform. * * @generated from field: string username = 2; */ username = ""; + /** + * If present, the display name of the user. + * + * @generated from field: string display_name = 3; + */ + displayName = ""; + /** * If present, the URL of the users profile pic. * - * @generated from field: string profile_pic_url = 3; + * @generated from field: string profile_pic_url = 4; */ profilePicUrl = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatMemberIdentity"; + static readonly typeName = "code.chat.v2.MemberIdentity"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "platform", kind: "enum", T: proto3.getEnumType(Platform) }, { no: 2, name: "username", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "profile_pic_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "display_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "profile_pic_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): ChatMemberIdentity { - return new ChatMemberIdentity().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): MemberIdentity { + return new MemberIdentity().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): ChatMemberIdentity { - return new ChatMemberIdentity().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): MemberIdentity { + return new MemberIdentity().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): ChatMemberIdentity { - return new ChatMemberIdentity().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): MemberIdentity { + return new MemberIdentity().fromJsonString(jsonString, options); } - static equals(a: ChatMemberIdentity | PlainMessage | undefined, b: ChatMemberIdentity | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatMemberIdentity, a, b); + static equals(a: MemberIdentity | PlainMessage | undefined, b: MemberIdentity | PlainMessage | undefined): boolean { + return proto3.util.equals(MemberIdentity, a, b); } } @@ -2149,7 +1758,7 @@ export class ChatMemberIdentity extends Message { * * @generated from message code.chat.v2.Pointer */ -export class Pointer extends Message { +export class Pointer extends Message$1 { /** * The type of pointer indicates which user's message history state can be * inferred from the pointer value. It is also possible to infer cross-pointer @@ -2164,16 +1773,16 @@ export class Pointer extends Message { * Everything at or before this message ID is considered to have the state * inferred by the type of pointer. * - * @generated from field: code.chat.v2.ChatMessageId value = 2; + * @generated from field: code.chat.v2.MessageId value = 2; */ - value?: ChatMessageId; + value?: MessageId; /** * The chat member associated with this pointer state * - * @generated from field: code.chat.v2.ChatMemberId member_id = 3; + * @generated from field: code.chat.v2.MemberId member_id = 3; */ - memberId?: ChatMemberId; + memberId?: MemberId; constructor(data?: PartialMessage) { super(); @@ -2184,8 +1793,8 @@ export class Pointer extends Message { static readonly typeName = "code.chat.v2.Pointer"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "type", kind: "enum", T: proto3.getEnumType(PointerType) }, - { no: 2, name: "value", kind: "message", T: ChatMessageId }, - { no: 3, name: "member_id", kind: "message", T: ChatMemberId }, + { no: 2, name: "value", kind: "message", T: MessageId }, + { no: 3, name: "member_id", kind: "message", T: MemberId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Pointer { @@ -2210,7 +1819,7 @@ export class Pointer extends Message { * * @generated from message code.chat.v2.Content */ -export class Content extends Message { +export class Content extends Message$1 { /** * @generated from oneof code.chat.v2.Content.type */ @@ -2238,18 +1847,6 @@ export class Content extends Message { */ value: NaclBoxEncryptedContent; case: "naclBox"; - } | { - /** - * @generated from field: code.chat.v2.ThankYouContent thank_you = 5; - */ - value: ThankYouContent; - case: "thankYou"; - } | { - /** - * @generated from field: code.chat.v2.IdentityRevealedContent identity_revealed = 6; - */ - value: IdentityRevealedContent; - case: "identityRevealed"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -2264,8 +1861,6 @@ export class Content extends Message { { no: 2, name: "localized", kind: "message", T: LocalizedContent, oneof: "type" }, { no: 3, name: "exchange_data", kind: "message", T: ExchangeDataContent, oneof: "type" }, { no: 4, name: "nacl_box", kind: "message", T: NaclBoxEncryptedContent, oneof: "type" }, - { no: 5, name: "thank_you", kind: "message", T: ThankYouContent, oneof: "type" }, - { no: 6, name: "identity_revealed", kind: "message", T: IdentityRevealedContent, oneof: "type" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Content { @@ -2290,7 +1885,7 @@ export class Content extends Message { * * @generated from message code.chat.v2.TextContent */ -export class TextContent extends Message { +export class TextContent extends Message$1 { /** * @generated from field: string text = 1; */ @@ -2330,7 +1925,7 @@ export class TextContent extends Message { * * @generated from message code.chat.v2.LocalizedContent */ -export class LocalizedContent extends Message { +export class LocalizedContent extends Message$1 { /** * @generated from field: string key_or_text = 1; */ @@ -2369,7 +1964,7 @@ export class LocalizedContent extends Message { * * @generated from message code.chat.v2.ExchangeDataContent */ -export class ExchangeDataContent extends Message { +export class ExchangeDataContent extends Message$1 { /** * Verb describing how the amount of Kin was exchanged * @@ -2536,7 +2131,7 @@ proto3.util.setEnumType(ExchangeDataContent_Verb, "code.chat.v2.ExchangeDataCont * * @generated from message code.chat.v2.NaclBoxEncryptedContent */ -export class NaclBoxEncryptedContent extends Message { +export class NaclBoxEncryptedContent extends Message$1 { /** * The sender's public key that is used to derive the shared private key for * decryption for message content. @@ -2589,97 +2184,6 @@ export class NaclBoxEncryptedContent extends Message { } } -/** - * Thank you content that is used to thank Code users for tips - * - * @generated from message code.chat.v2.ThankYouContent - */ -export class ThankYouContent extends Message { - /** - * The tip intent that is being thanked. - * - * @generated from field: code.common.v1.IntentId tip_intent = 1; - */ - tipIntent?: IntentId; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ThankYouContent"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "tip_intent", kind: "message", T: IntentId }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ThankYouContent { - return new ThankYouContent().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ThankYouContent { - return new ThankYouContent().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ThankYouContent { - return new ThankYouContent().fromJsonString(jsonString, options); - } - - static equals(a: ThankYouContent | PlainMessage | undefined, b: ThankYouContent | PlainMessage | undefined): boolean { - return proto3.util.equals(ThankYouContent, a, b); - } -} - -/** - * Identity revealed content that is inserted into chat whenever a chat member - * reveals their identity - * - * @generated from message code.chat.v2.IdentityRevealedContent - */ -export class IdentityRevealedContent extends Message { - /** - * The chat member who revealed their identity - * - * @generated from field: code.chat.v2.ChatMemberId member_id = 1; - */ - memberId?: ChatMemberId; - - /** - * The identity that was revealed - * - * @generated from field: code.chat.v2.ChatMemberIdentity identity = 2; - */ - identity?: ChatMemberIdentity; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.IdentityRevealedContent"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "member_id", kind: "message", T: ChatMemberId }, - { no: 2, name: "identity", kind: "message", T: ChatMemberIdentity }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): IdentityRevealedContent { - return new IdentityRevealedContent().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): IdentityRevealedContent { - return new IdentityRevealedContent().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): IdentityRevealedContent { - return new IdentityRevealedContent().fromJsonString(jsonString, options); - } - - static equals(a: IdentityRevealedContent | PlainMessage | undefined, b: IdentityRevealedContent | PlainMessage | undefined): boolean { - return proto3.util.equals(IdentityRevealedContent, a, b); - } -} - /** * Opaque cursor used across paged APIs. Underlying bytes may change as paging * strategies evolve. Expected length value will vary based on the RPC being @@ -2687,7 +2191,7 @@ export class IdentityRevealedContent extends Message { * * @generated from message code.chat.v2.Cursor */ -export class Cursor extends Message { +export class Cursor extends Message$1 { /** * @generated from field: bytes value = 1; */ @@ -2724,11 +2228,11 @@ export class Cursor extends Message { /** * @generated from message code.chat.v2.IsTyping */ -export class IsTyping extends Message { +export class IsTyping extends Message$1 { /** - * @generated from field: code.chat.v2.ChatMemberId member_id = 1; + * @generated from field: code.chat.v2.MemberId member_id = 1; */ - memberId?: ChatMemberId; + memberId?: MemberId; /** * is_typing indicates whether or not the user is typing. @@ -2746,7 +2250,7 @@ export class IsTyping extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "code.chat.v2.IsTyping"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "member_id", kind: "message", T: ChatMemberId }, + { no: 1, name: "member_id", kind: "message", T: MemberId }, { no: 2, name: "is_typing", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index e98c71e..bcf2ee6 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -55,22 +55,15 @@ service Chat { // chats whenever applicable within the context of message routing. rpc StartChat(StartChatRequest) returns (StartChatResponse); - // SendMessage sends a message to a chat + // SendMessage sends a message to a chat. rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); - // AdvancePointer advances a pointer in message history for a chat member + // AdvancePointer advances a pointer in message history for a chat member. rpc AdvancePointer(AdvancePointerRequest) returns (AdvancePointerResponse); - // RevealIdentity reveals a chat member's identity if it is anonymous. A chat - // message will be inserted on success. - rpc RevealIdentity(RevealIdentityRequest) returns (RevealIdentityResponse); - - // SetMuteState configures a chat member's mute state + // SetMuteState configures a chat member's mute state. rpc SetMuteState(SetMuteStateRequest) returns (SetMuteStateResponse); - // SetSubscriptionState configures a chat member's susbscription state - rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); - // NotifyIsTypingRequest notifies a chat that the sending member is typing. // // These requests are transient, and may be dropped at any point. @@ -96,11 +89,10 @@ message GetChatsRequest { message GetChatsResponse { Result result = 1; enum Result { - OK = 0; - NOT_FOUND = 1; + OK = 0; } - repeated ChatMetadata chats = 2 [(validate.rules).repeated = { + repeated Metadata chats = 2 [(validate.rules).repeated = { min_items: 0 max_items: 100 }]; @@ -109,17 +101,15 @@ message GetChatsResponse { message GetMessagesRequest { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + common.v1.SolanaAccountId owner = 2 [(validate.rules).message.required = true]; - common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; - - common.v1.Signature signature = 4 [(validate.rules).message.required = true]; + common.v1.Signature signature = 3 [(validate.rules).message.required = true]; - uint32 page_size = 5 [(validate.rules).uint32.lte = 100]; + uint32 page_size = 4 [(validate.rules).uint32.lte = 100]; - Cursor cursor = 6; + Cursor cursor = 5; - Direction direction = 7; + Direction direction = 6; enum Direction { ASC = 0; DESC = 1; @@ -129,13 +119,11 @@ message GetMessagesRequest { message GetMessagesResponse { Result result = 1; enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; - MESSAGE_NOT_FOUND = 3; + OK = 0; + DENIED = 1; } - repeated ChatMessage messages = 2 [(validate.rules).repeated = { + repeated Message messages = 2 [(validate.rules).repeated = { min_items: 0 max_items: 100 }]; @@ -144,18 +132,16 @@ message GetMessagesResponse { message OpenChatEventStream { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - - common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + common.v1.SolanaAccountId owner = 2 [(validate.rules).message.required = true]; - common.v1.Signature signature = 4 [(validate.rules).message.required = true]; + common.v1.Signature signature = 3 [(validate.rules).message.required = true]; } message ChatStreamEvent { oneof type { option (validate.required) = true; - ChatMessage message = 1; + Message message = 1; Pointer pointer = 2; IsTyping is_typing = 3; } @@ -171,8 +157,7 @@ message ChatStreamEventBatch { message ChatStreamEventError { Code code = 1; enum Code { - DENIED = 0; - CHAT_NOT_FOUND = 1; + DENIED = 0; } } @@ -200,13 +185,10 @@ message StartChatRequest { common.v1.Signature signature = 2 [(validate.rules).message.required = true]; - ChatMemberIdentity self = 3 [(validate.rules).message.required = true]; - oneof parameters { option (validate.required) = true; - StartTwoWayChatParameters two_way_chat = 4; - // GroupChatParameters group_chat = 4; + StartTwoWayChatParameters two_way_chat = 3; } } @@ -230,11 +212,6 @@ message StartTwoWayChatParameters { // This is most likely to occur when initiating a chat with a user for the first // time. common.v1.IntentId intent_id = 2; - - // The identity of the other user. - // - // Note: This can/should be removed with proper intent plumbing. - ChatMemberIdentity identity = 3 [(validate.rules).message.required = true]; } message StartChatResponse { @@ -252,28 +229,32 @@ message StartChatResponse { // before the service will permit the creation of the chat. This can happen in // cases where the block chain is particularly slow (beyond our RPC timeouts). PENDING = 3; + + // MISSING_IDENTITY indicates that there is no identity for the user (creator). + MISSING_IDENTITY = 4; + + // USER_NOT_FOUND indicates that (one of) the target user's was not found. + USER_NOT_FOUND = 5; } // The chat to use if the RPC was successful. - ChatMetadata chat = 2; + Metadata chat = 2; } message SendMessageRequest { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - // Allowed content types that can be sent by client: // - TextContent // - ThankYouContent - repeated Content content = 3 [(validate.rules).repeated = { + repeated Content content = 2 [(validate.rules).repeated = { min_items: 1 max_items: 1 }]; - common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; - common.v1.Signature signature = 5 [(validate.rules).message.required = true]; + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; } message SendMessageResponse { @@ -281,14 +262,12 @@ message SendMessageResponse { enum Result { OK = 0; DENIED = 1; - CHAT_NOT_FOUND = 2; - INVALID_CHAT_TYPE = 3; - INVALID_CONTENT_TYPE = 4; + INVALID_CONTENT_TYPE = 2; } // The chat message that was sent if the RPC was succesful, which includes // server-side metadata like the generated message ID and official timestamp - ChatMessage message = 2; + Message message = 2; } message AdvancePointerRequest { @@ -304,49 +283,20 @@ message AdvancePointerRequest { message AdvancePointerResponse { Result result = 1; enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; - MESSAGE_NOT_FOUND = 3; - INVALID_POINTER_TYPE = 4; - } -} - -message RevealIdentityRequest { - common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - - ChatMemberIdentity identity = 3 [(validate.rules).message.required = true]; - - common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; - - common.v1.Signature signature = 5 [(validate.rules).message.required = true]; -} - -message RevealIdentityResponse { - Result result = 1; - enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; - DIFFERENT_IDENTITY_REVEALED = 3; + OK = 0; + DENIED = 1; + MESSAGE_NOT_FOUND = 2; } - - // The chat message that was sent if the RPC was successful - ChatMessage message = 2; } message SetMuteStateRequest { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - - bool is_muted = 3; + bool is_muted = 2; - common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; - common.v1.Signature signature = 5 [(validate.rules).message.required = true]; + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; } message SetMuteStateResponse { @@ -354,43 +304,18 @@ message SetMuteStateResponse { enum Result { OK = 0; DENIED = 1; - CHAT_NOT_FOUND = 2; - CANT_MUTE = 3; - } -} - -message SetSubscriptionStateRequest { - common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - - bool is_subscribed = 3; - - common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; - - common.v1.Signature signature = 5 [(validate.rules).message.required = true]; -} - -message SetSubscriptionStateResponse { - Result result = 1; - enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; - CANT_UNSUBSCRIBE = 3; + CANT_MUTE = 2; } } message NotifyIsTypingRequest { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2 [(validate.rules).message.required = true]; - - bool is_typing = 3; + bool is_typing = 2; - common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; - common.v1.Signature signature = 5 [(validate.rules).message.required = true]; + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; } message NotifyIsTypingResponse { @@ -398,32 +323,29 @@ message NotifyIsTypingResponse { enum Result { OK = 0; DENIED = 1; - CHAT_NOT_FOUND = 2; } } -message ChatMessageId { - // Guaranteed to be a time-based UUID. This should be used to construct a - // consistently ordered message history based on time using a simple byte - // comparison. +message MessageId { + // A lexicographically sortable ID that can be used to sort source of + // chat history. bytes value = 1 [(validate.rules).bytes = { min_len: 16 max_len: 16 }]; } -message ChatMemberId { - // Globally random UUID +message MemberId { + // The publically available 'deposit' address of the user. bytes value = 1 [(validate.rules).bytes = { - min_len: 16 - max_len: 16 + min_len: 32 + max_len: 32 }]; } enum ChatType { UNKNOWN_CHAT_TYPE = 0; - NOTIFICATION = 1; - TWO_WAY = 2; + TWO_WAY = 1; // GROUP = 3; } @@ -442,8 +364,7 @@ enum PointerType { // A chat // // todo: Support is_verified in a clean way -message ChatMetadata { - // Globally unique ID for this chat +message Metadata { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; // The type of chat @@ -451,43 +372,40 @@ message ChatMetadata { not_in: [0] // UNKNOWN_CHAT_TYPE }]; - // The chat title, which will be localized by server when applicable - string title = 3 [(validate.rules).string = { - min_len: 1 + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor cursor = 3; + + // The chat title, which is _only_ set by server if an explicit title + // was set. Otherwise, clients should fill in an appropriate chat title. + string title = 4 [(validate.rules).string = { + min_len: 0 max_len: 1024 }]; - // The members in this chat - // - // For NOTIFICATION chats, this list has exactly 1 item - // For TWO_WAY chats, this list has exactly 2 items - // - // todo: If we support group chats, then we'll likely return the first page - // or a prioritized list. The remaining members would be fetched via - // a new RPC. - repeated ChatMember members = 4 [(validate.rules).repeated = { + // The members in this chat. + repeated Member members = 5 [(validate.rules).repeated = { min_items: 1 max_items: 2 }]; - // Can the user mute this chat? - bool can_mute = 5; + // Whether or not the chat is muted (from the perspective of the caller). + bool is_muted = 6; - // Can the user unsubscribe from this chat? - bool can_unsubscribe = 6; + // Whether or not the chat is mutable (from the persective of the caller). + bool muteable = 7; - // Cursor value for this chat for reference in subsequent GetChatsRequest - Cursor cursor = 7; + // Number of (estimated) unread message (from the perspective of the caller). + uint32 num_unread = 8; } // A message in a chat -message ChatMessage { +message Message { // Globally unique ID for this message - ChatMessageId message_id = 1 [(validate.rules).message.required = true]; + MessageId message_id = 1 [(validate.rules).message.required = true]; // The chat member that sent the message. For NOTIFICATION chats, this field // is omitted since the chat has exactly 1 member. - ChatMemberId sender_id = 2; + MemberId sender_id = 2; // Ordered message content. A message may have more than one piece of content. repeated Content content = 3 [(validate.rules).repeated = { @@ -504,56 +422,51 @@ message ChatMessage { } // A user in a chat -message ChatMember { - // Globally unique ID for this chat member - ChatMemberId member_id = 1 [(validate.rules).message.required = true]; - - // Is this chat member yourself? This enables client to identify which member_id - // is themselves. - bool is_self = 2; +message Member { + // Public AccountId (for is self...is derived via deposit address) + MemberId member_id = 1 [(validate.rules).message.required = true]; // The chat member's identity if it has been revealed. - ChatMemberIdentity identity = 3; - - // Chat message state for this member. This list will have DELIVERED and READ - // pointers, if they exist. SENT pointers should be inferred by persistence - // on server. - repeated Pointer pointers = 4 [(validate.rules).repeated = { - min_items: 0 - max_items: 2 - }]; - - // Estimated number of unread messages for the chat member in this chat // - // Only valid when is_self = true - uint32 num_unread = 5; + // Multiple identities here? Well really only needs twitter/other handles + // Repeated PlatformHandles (where code doesn't matter)? + MemberIdentity identity = 2; - // Has the chat member muted this chat? + // Chat message state for this member. // - // Only valid when is_self = true - bool is_muted = 6; - - // Is the chat member subscribed to this chat? + // If set, the list may contain DELIVERED and READ pointers. SENT pointers + // are only shared between the sender and server, to indicate persistence. // - // Only valid when is_self = true - bool is_subscribed = 7; + // The server may wish to omit all pointers in various types of group chats + // or as relief valves. + repeated Pointer pointers = 3 [(validate.rules).repeated = { + min_items: 0 + max_items: 2 + }]; } // Identity to an external social platform that can be linked to a Code account -message ChatMemberIdentity { +message MemberIdentity { // The external social platform linked to this chat member Platform platform = 1 [(validate.rules).enum = { in: [1] // TWITTER }]; - // The chat member's username on the external social platform + // The chat member's username on the external social platform. string username = 2 [(validate.rules).string = { min_len: 1 max_len: 15 // Twitter limit }]; + // TODO: If we need the profile pic, we need display name...both can maybe be removed? + + // If present, the display name of the user. + string display_name = 3 [(validate.rules).string = { + max_len: 255 // Arbitrary limit + }]; + // If present, the URL of the users profile pic. - string profile_pic_url = 3 [(validate.rules).string = { + string profile_pic_url = 4 [(validate.rules).string = { max_len: 255 // Arbitrary limit }]; } @@ -570,10 +483,10 @@ message Pointer { // Everything at or before this message ID is considered to have the state // inferred by the type of pointer. - ChatMessageId value = 2 [(validate.rules).message.required = true]; + MessageId value = 2 [(validate.rules).message.required = true]; // The chat member associated with this pointer state - ChatMemberId member_id = 3 [(validate.rules).message.required = true]; + MemberId member_id = 3 [(validate.rules).message.required = true]; } // Content for a chat message @@ -585,8 +498,6 @@ message Content { LocalizedContent localized = 2; ExchangeDataContent exchange_data = 3; NaclBoxEncryptedContent nacl_box = 4; - ThankYouContent thank_you = 5; - IdentityRevealedContent identity_revealed = 6; } } @@ -648,6 +559,9 @@ message ExchangeDataContent { common.v1.IntentId intent = 4; common.v1.Signature signature = 5; } + + // TODO: We need to be able to provide the parties involved, such that + // such that client can render it correctly. } // Encrypted piece of content using NaCl box encryption @@ -669,30 +583,6 @@ message NaclBoxEncryptedContent { }]; } -// Thank you content that is used to thank Code users for tips -message ThankYouContent { - // The tip intent that is being thanked. - common.v1.IntentId tip_intent = 1 [(validate.rules).message.required = true]; - - // Reserved for the thanker, which is only required if we support GROUP chats. - // Otherwise, it can be inferred from the sender in a TWO_WAY chat. - reserved 2; - - // Reserved for the thankee, which is only required if we support GROUP chats. - // Otherwise, it can be inferred from the sender in a TWO_WAY chat. - reserved 3; -} - -// Identity revealed content that is inserted into chat whenever a chat member -// reveals their identity -message IdentityRevealedContent { - // The chat member who revealed their identity - ChatMemberId member_id = 1 [(validate.rules).message.required = true]; - - // The identity that was revealed - ChatMemberIdentity identity = 2 [(validate.rules).message.required = true]; -} - // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being // executed. @@ -704,7 +594,7 @@ message Cursor { } message IsTyping { - ChatMemberId member_id = 1 [(validate.rules).message.required = true]; + MemberId member_id = 1 [(validate.rules).message.required = true]; // is_typing indicates whether or not the user is typing. // If false, the user has explicitly stopped typing. From 14516868a8aafa53b9300a20183b8ec8e512524f Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Thu, 3 Oct 2024 11:05:33 -0400 Subject: [PATCH 13/15] chat: add is_self back to member --- generated/go/chat/v2/chat_service.pb.go | 352 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 2 + .../protobuf-es/chat/v2/chat_service_pb.ts | 8 + proto/chat/v2/chat_service.proto | 3 + 4 files changed, 194 insertions(+), 171 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 7d3282d..116a089 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -2444,6 +2444,8 @@ type Member struct { // The server may wish to omit all pointers in various types of group chats // or as relief valves. Pointers []*Pointer `protobuf:"bytes,3,rep,name=pointers,proto3" json:"pointers,omitempty"` + // If the member is the caller (where applicable), will be set to true. + IsSelf bool `protobuf:"varint,4,opt,name=is_self,json=isSelf,proto3" json:"is_self,omitempty"` } func (x *Member) Reset() { @@ -2499,6 +2501,13 @@ func (x *Member) GetPointers() []*Pointer { return nil } +func (x *Member) GetIsSelf() bool { + if x != nil { + return x.IsSelf + } + return false +} + // Identity to an external social platform that can be linked to a Code account type MemberIdentity struct { state protoimpl.MessageState @@ -3506,7 +3515,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, + 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xdd, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, @@ -3519,177 +3528,178 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, - 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, - 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, - 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, - 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, - 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, - 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, - 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, - 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, - 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, - 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, - 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, - 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, - 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, - 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, - 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, - 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, - 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, - 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, - 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, - 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, - 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, - 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, - 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, - 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, - 0x2e, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, - 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, - 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, - 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xbf, 0x05, 0x0a, 0x04, 0x43, - 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, - 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x65, 0x72, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x22, 0xdc, 0x01, 0x0a, + 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x07, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x97, + 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, + 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, + 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, + 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, + 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, + 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, + 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, + 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, + 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, + 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, + 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, + 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, + 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, + 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, + 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, + 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, + 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, + 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x2e, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, + 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, + 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, + 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, + 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, + 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, + 0x44, 0x10, 0x03, 0x32, 0xbf, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, - 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, - 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, - 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, + 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, + 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, + 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, + 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 5eaf0c4..4027b31 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -2629,6 +2629,8 @@ func (m *Member) Validate() error { } + // no validation rules for IsSelf + return nil } diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index bf8d17f..117b03a 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -1658,6 +1658,13 @@ export class Member extends Message$1 { */ pointers: Pointer[] = []; + /** + * If the member is the caller (where applicable), will be set to true. + * + * @generated from field: bool is_self = 4; + */ + isSelf = false; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1669,6 +1676,7 @@ export class Member extends Message$1 { { no: 1, name: "member_id", kind: "message", T: MemberId }, { no: 2, name: "identity", kind: "message", T: MemberIdentity }, { no: 3, name: "pointers", kind: "message", T: Pointer, repeated: true }, + { no: 4, name: "is_self", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Member { diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index bcf2ee6..b974a4f 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -443,6 +443,9 @@ message Member { min_items: 0 max_items: 2 }]; + + // If the member is the caller (where applicable), will be set to true. + bool is_self = 4; } // Identity to an external social platform that can be linked to a Code account From 8f8612abd0d720300a843169f0b8772348f53ced Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Thu, 10 Oct 2024 11:32:45 -0400 Subject: [PATCH 14/15] chat: break stream into ChatEvents and Messages Introduce (and break/rename) two new streams: ChatEvents and Messages. ChatEvents is used to power the 'home screen' and other high level chat views. Message stream still exists as a way to get real time messages for all chat types. --- generated/go/chat/v2/chat_service.pb.go | 2806 ++++++++++------- .../go/chat/v2/chat_service.pb.validate.go | 1991 +++++++----- generated/go/chat/v2/chat_service_grpc.pb.go | 266 +- generated/protobuf-es/badge/v1/index.ts | 2 +- generated/protobuf-es/chat/v1/index.ts | 2 +- .../chat/v2/chat_service_connect.ts | 82 +- .../protobuf-es/chat/v2/chat_service_pb.ts | 817 +++-- generated/protobuf-es/chat/v2/index.ts | 2 +- generated/protobuf-es/index.ts | 22 +- generated/protobuf-es/invite/v2/index.ts | 2 +- generated/protobuf-es/transaction/v2/index.ts | 2 +- generated/protobuf-es/user/v1/index.ts | 2 +- proto/chat/v2/chat_service.proto | 198 +- 13 files changed, 3674 insertions(+), 2520 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 116a089..c5cd32f 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -168,6 +168,49 @@ func (PointerType) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} } +type StreamError_Code int32 + +const ( + StreamError_DENIED StreamError_Code = 0 +) + +// Enum value maps for StreamError_Code. +var ( + StreamError_Code_name = map[int32]string{ + 0: "DENIED", + } + StreamError_Code_value = map[string]int32{ + "DENIED": 0, + } +) + +func (x StreamError_Code) Enum() *StreamError_Code { + p := new(StreamError_Code) + *p = x + return p +} + +func (x StreamError_Code) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StreamError_Code) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() +} + +func (StreamError_Code) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[3] +} + +func (x StreamError_Code) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StreamError_Code.Descriptor instead. +func (StreamError_Code) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{4, 0} +} + type GetChatsRequest_Direction int32 const ( @@ -198,11 +241,11 @@ func (x GetChatsRequest_Direction) String() string { } func (GetChatsRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() } func (GetChatsRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[3] + return &file_chat_v2_chat_service_proto_enumTypes[4] } func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { @@ -211,7 +254,7 @@ func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { // Deprecated: Use GetChatsRequest_Direction.Descriptor instead. func (GetChatsRequest_Direction) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{5, 0} } type GetChatsResponse_Result int32 @@ -241,11 +284,11 @@ func (x GetChatsResponse_Result) String() string { } func (GetChatsResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() } func (GetChatsResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[4] + return &file_chat_v2_chat_service_proto_enumTypes[5] } func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { @@ -254,7 +297,7 @@ func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use GetChatsResponse_Result.Descriptor instead. func (GetChatsResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{6, 0} } type GetMessagesRequest_Direction int32 @@ -287,11 +330,11 @@ func (x GetMessagesRequest_Direction) String() string { } func (GetMessagesRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() } func (GetMessagesRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[5] + return &file_chat_v2_chat_service_proto_enumTypes[6] } func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { @@ -300,7 +343,7 @@ func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { // Deprecated: Use GetMessagesRequest_Direction.Descriptor instead. func (GetMessagesRequest_Direction) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7, 0} } type GetMessagesResponse_Result int32 @@ -333,11 +376,11 @@ func (x GetMessagesResponse_Result) String() string { } func (GetMessagesResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() } func (GetMessagesResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[6] + return &file_chat_v2_chat_service_proto_enumTypes[7] } func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { @@ -346,50 +389,7 @@ func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use GetMessagesResponse_Result.Descriptor instead. func (GetMessagesResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3, 0} -} - -type ChatStreamEventError_Code int32 - -const ( - ChatStreamEventError_DENIED ChatStreamEventError_Code = 0 -) - -// Enum value maps for ChatStreamEventError_Code. -var ( - ChatStreamEventError_Code_name = map[int32]string{ - 0: "DENIED", - } - ChatStreamEventError_Code_value = map[string]int32{ - "DENIED": 0, - } -) - -func (x ChatStreamEventError_Code) Enum() *ChatStreamEventError_Code { - p := new(ChatStreamEventError_Code) - *p = x - return p -} - -func (x ChatStreamEventError_Code) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChatStreamEventError_Code) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() -} - -func (ChatStreamEventError_Code) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[7] -} - -func (x ChatStreamEventError_Code) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChatStreamEventError_Code.Descriptor instead. -func (ChatStreamEventError_Code) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8, 0} } type StartChatResponse_Result int32 @@ -454,7 +454,7 @@ func (x StartChatResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use StartChatResponse_Result.Descriptor instead. func (StartChatResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11, 0} } type SendMessageResponse_Result int32 @@ -503,7 +503,7 @@ func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SendMessageResponse_Result.Descriptor instead. func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13, 0} } type AdvancePointerResponse_Result int32 @@ -552,7 +552,7 @@ func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use AdvancePointerResponse_Result.Descriptor instead. func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15, 0} } type SetMuteStateResponse_Result int32 @@ -601,7 +601,7 @@ func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17, 0} } type NotifyIsTypingResponse_Result int32 @@ -647,7 +647,7 @@ func (x NotifyIsTypingResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use NotifyIsTypingResponse_Result.Descriptor instead. func (NotifyIsTypingResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19, 0} } type ExchangeDataContent_Verb int32 @@ -723,23 +723,23 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30, 0} } -type GetChatsRequest struct { +type StreamChatEventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` - Direction GetChatsRequest_Direction `protobuf:"varint,5,opt,name=direction,proto3,enum=code.chat.v2.GetChatsRequest_Direction" json:"direction,omitempty"` + // Types that are assignable to Type: + // + // *StreamChatEventsRequest_Params_ + // *StreamChatEventsRequest_Pong + Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` } -func (x *GetChatsRequest) Reset() { - *x = GetChatsRequest{} +func (x *StreamChatEventsRequest) Reset() { + *x = StreamChatEventsRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -747,13 +747,13 @@ func (x *GetChatsRequest) Reset() { } } -func (x *GetChatsRequest) String() string { +func (x *StreamChatEventsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetChatsRequest) ProtoMessage() {} +func (*StreamChatEventsRequest) ProtoMessage() {} -func (x *GetChatsRequest) ProtoReflect() protoreflect.Message { +func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -765,57 +765,63 @@ func (x *GetChatsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetChatsRequest.ProtoReflect.Descriptor instead. -func (*GetChatsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use StreamChatEventsRequest.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} } -func (x *GetChatsRequest) GetOwner() *v1.SolanaAccountId { - if x != nil { - return x.Owner +func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { + if m != nil { + return m.Type } return nil } -func (x *GetChatsRequest) GetSignature() *v1.Signature { - if x != nil { - return x.Signature +func (x *StreamChatEventsRequest) GetParams() *StreamChatEventsRequest_Params { + if x, ok := x.GetType().(*StreamChatEventsRequest_Params_); ok { + return x.Params } return nil } -func (x *GetChatsRequest) GetPageSize() uint32 { - if x != nil { - return x.PageSize +func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { + return x.Pong } - return 0 + return nil } -func (x *GetChatsRequest) GetCursor() *Cursor { - if x != nil { - return x.Cursor - } - return nil +type isStreamChatEventsRequest_Type interface { + isStreamChatEventsRequest_Type() } -func (x *GetChatsRequest) GetDirection() GetChatsRequest_Direction { - if x != nil { - return x.Direction - } - return GetChatsRequest_ASC +type StreamChatEventsRequest_Params_ struct { + Params *StreamChatEventsRequest_Params `protobuf:"bytes,1,opt,name=params,proto3,oneof"` } -type GetChatsResponse struct { +type StreamChatEventsRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +} + +func (*StreamChatEventsRequest_Params_) isStreamChatEventsRequest_Type() {} + +func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} + +type StreamChatEventsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Result GetChatsResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetChatsResponse_Result" json:"result,omitempty"` - Chats []*Metadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` + // Types that are assignable to Type: + // + // *StreamChatEventsResponse_Ping + // *StreamChatEventsResponse_Error + // *StreamChatEventsResponse_Events + Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` } -func (x *GetChatsResponse) Reset() { - *x = GetChatsResponse{} +func (x *StreamChatEventsResponse) Reset() { + *x = StreamChatEventsResponse{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -823,13 +829,13 @@ func (x *GetChatsResponse) Reset() { } } -func (x *GetChatsResponse) String() string { +func (x *StreamChatEventsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetChatsResponse) ProtoMessage() {} +func (*StreamChatEventsResponse) ProtoMessage() {} -func (x *GetChatsResponse) ProtoReflect() protoreflect.Message { +func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -841,40 +847,75 @@ func (x *GetChatsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetChatsResponse.ProtoReflect.Descriptor instead. -func (*GetChatsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use StreamChatEventsResponse.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} } -func (x *GetChatsResponse) GetResult() GetChatsResponse_Result { - if x != nil { - return x.Result +func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { + if m != nil { + return m.Type } - return GetChatsResponse_OK + return nil } -func (x *GetChatsResponse) GetChats() []*Metadata { - if x != nil { - return x.Chats +func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { + return x.Ping } return nil } -type GetMessagesRequest struct { +func (x *StreamChatEventsResponse) GetError() *StreamError { + if x, ok := x.GetType().(*StreamChatEventsResponse_Error); ok { + return x.Error + } + return nil +} + +func (x *StreamChatEventsResponse) GetEvents() *StreamChatEventsResponse_EventBatch { + if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { + return x.Events + } + return nil +} + +type isStreamChatEventsResponse_Type interface { + isStreamChatEventsResponse_Type() +} + +type StreamChatEventsResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,1,opt,name=ping,proto3,oneof"` +} + +type StreamChatEventsResponse_Error struct { + Error *StreamError `protobuf:"bytes,2,opt,name=error,proto3,oneof"` +} + +type StreamChatEventsResponse_Events struct { + Events *StreamChatEventsResponse_EventBatch `protobuf:"bytes,3,opt,name=events,proto3,oneof"` +} + +func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Error) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} + +type StreamMessagesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` - PageSize uint32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` - Direction GetMessagesRequest_Direction `protobuf:"varint,6,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` + // Types that are assignable to Type: + // + // *StreamMessagesRequest_Params_ + // *StreamMessagesRequest_Pong + Type isStreamMessagesRequest_Type `protobuf_oneof:"type"` } -func (x *GetMessagesRequest) Reset() { - *x = GetMessagesRequest{} +func (x *StreamMessagesRequest) Reset() { + *x = StreamMessagesRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -882,13 +923,13 @@ func (x *GetMessagesRequest) Reset() { } } -func (x *GetMessagesRequest) String() string { +func (x *StreamMessagesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetMessagesRequest) ProtoMessage() {} +func (*StreamMessagesRequest) ProtoMessage() {} -func (x *GetMessagesRequest) ProtoReflect() protoreflect.Message { +func (x *StreamMessagesRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -900,64 +941,63 @@ func (x *GetMessagesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetMessagesRequest.ProtoReflect.Descriptor instead. -func (*GetMessagesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use StreamMessagesRequest.ProtoReflect.Descriptor instead. +func (*StreamMessagesRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} } -func (x *GetMessagesRequest) GetChatId() *v1.ChatId { - if x != nil { - return x.ChatId +func (m *StreamMessagesRequest) GetType() isStreamMessagesRequest_Type { + if m != nil { + return m.Type } return nil } -func (x *GetMessagesRequest) GetOwner() *v1.SolanaAccountId { - if x != nil { - return x.Owner +func (x *StreamMessagesRequest) GetParams() *StreamMessagesRequest_Params { + if x, ok := x.GetType().(*StreamMessagesRequest_Params_); ok { + return x.Params } return nil } -func (x *GetMessagesRequest) GetSignature() *v1.Signature { - if x != nil { - return x.Signature +func (x *StreamMessagesRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamMessagesRequest_Pong); ok { + return x.Pong } return nil } -func (x *GetMessagesRequest) GetPageSize() uint32 { - if x != nil { - return x.PageSize - } - return 0 +type isStreamMessagesRequest_Type interface { + isStreamMessagesRequest_Type() } -func (x *GetMessagesRequest) GetCursor() *Cursor { - if x != nil { - return x.Cursor - } - return nil +type StreamMessagesRequest_Params_ struct { + Params *StreamMessagesRequest_Params `protobuf:"bytes,1,opt,name=params,proto3,oneof"` } -func (x *GetMessagesRequest) GetDirection() GetMessagesRequest_Direction { - if x != nil { - return x.Direction - } - return GetMessagesRequest_ASC +type StreamMessagesRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` } -type GetMessagesResponse struct { - state protoimpl.MessageState +func (*StreamMessagesRequest_Params_) isStreamMessagesRequest_Type() {} + +func (*StreamMessagesRequest_Pong) isStreamMessagesRequest_Type() {} + +type StreamMessagesResponse struct { + state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Result GetMessagesResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetMessagesResponse_Result" json:"result,omitempty"` - Messages []*Message `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` + // Types that are assignable to Type: + // + // *StreamMessagesResponse_Ping + // *StreamMessagesResponse_Error + // *StreamMessagesResponse_Messages + Type isStreamMessagesResponse_Type `protobuf_oneof:"type"` } -func (x *GetMessagesResponse) Reset() { - *x = GetMessagesResponse{} +func (x *StreamMessagesResponse) Reset() { + *x = StreamMessagesResponse{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -965,13 +1005,13 @@ func (x *GetMessagesResponse) Reset() { } } -func (x *GetMessagesResponse) String() string { +func (x *StreamMessagesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetMessagesResponse) ProtoMessage() {} +func (*StreamMessagesResponse) ProtoMessage() {} -func (x *GetMessagesResponse) ProtoReflect() protoreflect.Message { +func (x *StreamMessagesResponse) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -983,37 +1023,71 @@ func (x *GetMessagesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetMessagesResponse.ProtoReflect.Descriptor instead. -func (*GetMessagesResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use StreamMessagesResponse.ProtoReflect.Descriptor instead. +func (*StreamMessagesResponse) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3} } -func (x *GetMessagesResponse) GetResult() GetMessagesResponse_Result { - if x != nil { - return x.Result +func (m *StreamMessagesResponse) GetType() isStreamMessagesResponse_Type { + if m != nil { + return m.Type } - return GetMessagesResponse_OK + return nil } -func (x *GetMessagesResponse) GetMessages() []*Message { - if x != nil { +func (x *StreamMessagesResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamMessagesResponse_Ping); ok { + return x.Ping + } + return nil +} + +func (x *StreamMessagesResponse) GetError() *StreamError { + if x, ok := x.GetType().(*StreamMessagesResponse_Error); ok { + return x.Error + } + return nil +} + +func (x *StreamMessagesResponse) GetMessages() *StreamMessagesResponse_MessageBatch { + if x, ok := x.GetType().(*StreamMessagesResponse_Messages); ok { return x.Messages } return nil } -type OpenChatEventStream struct { +type isStreamMessagesResponse_Type interface { + isStreamMessagesResponse_Type() +} + +type StreamMessagesResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,1,opt,name=ping,proto3,oneof"` +} + +type StreamMessagesResponse_Error struct { + Error *StreamError `protobuf:"bytes,2,opt,name=error,proto3,oneof"` +} + +type StreamMessagesResponse_Messages struct { + Messages *StreamMessagesResponse_MessageBatch `protobuf:"bytes,3,opt,name=messages,proto3,oneof"` +} + +func (*StreamMessagesResponse_Ping) isStreamMessagesResponse_Type() {} + +func (*StreamMessagesResponse_Error) isStreamMessagesResponse_Type() {} + +func (*StreamMessagesResponse_Messages) isStreamMessagesResponse_Type() {} + +type StreamError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` + Code StreamError_Code `protobuf:"varint,1,opt,name=code,proto3,enum=code.chat.v2.StreamError_Code" json:"code,omitempty"` } -func (x *OpenChatEventStream) Reset() { - *x = OpenChatEventStream{} +func (x *StreamError) Reset() { + *x = StreamError{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1021,13 +1095,13 @@ func (x *OpenChatEventStream) Reset() { } } -func (x *OpenChatEventStream) String() string { +func (x *StreamError) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OpenChatEventStream) ProtoMessage() {} +func (*StreamError) ProtoMessage() {} -func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { +func (x *StreamError) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1039,47 +1113,32 @@ func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OpenChatEventStream.ProtoReflect.Descriptor instead. -func (*OpenChatEventStream) Descriptor() ([]byte, []int) { +// Deprecated: Use StreamError.ProtoReflect.Descriptor instead. +func (*StreamError) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{4} } -func (x *OpenChatEventStream) GetChatId() *v1.ChatId { +func (x *StreamError) GetCode() StreamError_Code { if x != nil { - return x.ChatId - } - return nil -} - -func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { - if x != nil { - return x.Owner + return x.Code } - return nil + return StreamError_DENIED } -func (x *OpenChatEventStream) GetSignature() *v1.Signature { - if x != nil { - return x.Signature - } - return nil -} - -type ChatStreamEvent struct { +type GetChatsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Type: - // - // *ChatStreamEvent_Message - // *ChatStreamEvent_Pointer - // *ChatStreamEvent_IsTyping - Type isChatStreamEvent_Type `protobuf_oneof:"type"` + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetChatsRequest_Direction `protobuf:"varint,5,opt,name=direction,proto3,enum=code.chat.v2.GetChatsRequest_Direction" json:"direction,omitempty"` } -func (x *ChatStreamEvent) Reset() { - *x = ChatStreamEvent{} +func (x *GetChatsRequest) Reset() { + *x = GetChatsRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1087,13 +1146,13 @@ func (x *ChatStreamEvent) Reset() { } } -func (x *ChatStreamEvent) String() string { +func (x *GetChatsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatStreamEvent) ProtoMessage() {} +func (*GetChatsRequest) ProtoMessage() {} -func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { +func (x *GetChatsRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1105,71 +1164,57 @@ func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatStreamEvent.ProtoReflect.Descriptor instead. -func (*ChatStreamEvent) Descriptor() ([]byte, []int) { +// Deprecated: Use GetChatsRequest.ProtoReflect.Descriptor instead. +func (*GetChatsRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{5} } -func (m *ChatStreamEvent) GetType() isChatStreamEvent_Type { - if m != nil { - return m.Type +func (x *GetChatsRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner } return nil } -func (x *ChatStreamEvent) GetMessage() *Message { - if x, ok := x.GetType().(*ChatStreamEvent_Message); ok { - return x.Message +func (x *GetChatsRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature } return nil } -func (x *ChatStreamEvent) GetPointer() *Pointer { - if x, ok := x.GetType().(*ChatStreamEvent_Pointer); ok { - return x.Pointer +func (x *GetChatsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize } - return nil + return 0 } -func (x *ChatStreamEvent) GetIsTyping() *IsTyping { - if x, ok := x.GetType().(*ChatStreamEvent_IsTyping); ok { - return x.IsTyping +func (x *GetChatsRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor } return nil } -type isChatStreamEvent_Type interface { - isChatStreamEvent_Type() -} - -type ChatStreamEvent_Message struct { - Message *Message `protobuf:"bytes,1,opt,name=message,proto3,oneof"` -} - -type ChatStreamEvent_Pointer struct { - Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3,oneof"` -} - -type ChatStreamEvent_IsTyping struct { - IsTyping *IsTyping `protobuf:"bytes,3,opt,name=is_typing,json=isTyping,proto3,oneof"` +func (x *GetChatsRequest) GetDirection() GetChatsRequest_Direction { + if x != nil { + return x.Direction + } + return GetChatsRequest_ASC } -func (*ChatStreamEvent_Message) isChatStreamEvent_Type() {} - -func (*ChatStreamEvent_Pointer) isChatStreamEvent_Type() {} - -func (*ChatStreamEvent_IsTyping) isChatStreamEvent_Type() {} - -type ChatStreamEventBatch struct { +type GetChatsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Events []*ChatStreamEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` + Result GetChatsResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetChatsResponse_Result" json:"result,omitempty"` + Chats []*Metadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` } -func (x *ChatStreamEventBatch) Reset() { - *x = ChatStreamEventBatch{} +func (x *GetChatsResponse) Reset() { + *x = GetChatsResponse{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1177,13 +1222,13 @@ func (x *ChatStreamEventBatch) Reset() { } } -func (x *ChatStreamEventBatch) String() string { +func (x *GetChatsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatStreamEventBatch) ProtoMessage() {} +func (*GetChatsResponse) ProtoMessage() {} -func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { +func (x *GetChatsResponse) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1195,28 +1240,40 @@ func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatStreamEventBatch.ProtoReflect.Descriptor instead. -func (*ChatStreamEventBatch) Descriptor() ([]byte, []int) { +// Deprecated: Use GetChatsResponse.ProtoReflect.Descriptor instead. +func (*GetChatsResponse) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{6} } -func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { +func (x *GetChatsResponse) GetResult() GetChatsResponse_Result { if x != nil { - return x.Events + return x.Result + } + return GetChatsResponse_OK +} + +func (x *GetChatsResponse) GetChats() []*Metadata { + if x != nil { + return x.Chats } return nil } -type ChatStreamEventError struct { +type GetMessagesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Code ChatStreamEventError_Code `protobuf:"varint,1,opt,name=code,proto3,enum=code.chat.v2.ChatStreamEventError_Code" json:"code,omitempty"` + ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetMessagesRequest_Direction `protobuf:"varint,6,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` } -func (x *ChatStreamEventError) Reset() { - *x = ChatStreamEventError{} +func (x *GetMessagesRequest) Reset() { + *x = GetMessagesRequest{} if protoimpl.UnsafeEnabled { mi := &file_chat_v2_chat_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1224,13 +1281,13 @@ func (x *ChatStreamEventError) Reset() { } } -func (x *ChatStreamEventError) String() string { +func (x *GetMessagesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatStreamEventError) ProtoMessage() {} +func (*GetMessagesRequest) ProtoMessage() {} -func (x *ChatStreamEventError) ProtoReflect() protoreflect.Message { +func (x *GetMessagesRequest) ProtoReflect() protoreflect.Message { mi := &file_chat_v2_chat_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1242,129 +1299,79 @@ func (x *ChatStreamEventError) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatStreamEventError.ProtoReflect.Descriptor instead. -func (*ChatStreamEventError) Descriptor() ([]byte, []int) { +// Deprecated: Use GetMessagesRequest.ProtoReflect.Descriptor instead. +func (*GetMessagesRequest) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7} } -func (x *ChatStreamEventError) GetCode() ChatStreamEventError_Code { +func (x *GetMessagesRequest) GetChatId() *v1.ChatId { if x != nil { - return x.Code - } - return ChatStreamEventError_DENIED -} - -type StreamChatEventsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Type: - // - // *StreamChatEventsRequest_OpenStream - // *StreamChatEventsRequest_Pong - Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` -} - -func (x *StreamChatEventsRequest) Reset() { - *x = StreamChatEventsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + return x.ChatId } + return nil } -func (x *StreamChatEventsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamChatEventsRequest) ProtoMessage() {} - -func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *GetMessagesRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamChatEventsRequest.ProtoReflect.Descriptor instead. -func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} + return nil } -func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { - if m != nil { - return m.Type +func (x *GetMessagesRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature } return nil } -func (x *StreamChatEventsRequest) GetOpenStream() *OpenChatEventStream { - if x, ok := x.GetType().(*StreamChatEventsRequest_OpenStream); ok { - return x.OpenStream +func (x *GetMessagesRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize } - return nil + return 0 } -func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { - if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { - return x.Pong +func (x *GetMessagesRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor } return nil } -type isStreamChatEventsRequest_Type interface { - isStreamChatEventsRequest_Type() -} - -type StreamChatEventsRequest_OpenStream struct { - OpenStream *OpenChatEventStream `protobuf:"bytes,1,opt,name=open_stream,json=openStream,proto3,oneof"` -} - -type StreamChatEventsRequest_Pong struct { - Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +func (x *GetMessagesRequest) GetDirection() GetMessagesRequest_Direction { + if x != nil { + return x.Direction + } + return GetMessagesRequest_ASC } -func (*StreamChatEventsRequest_OpenStream) isStreamChatEventsRequest_Type() {} - -func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} - -type StreamChatEventsResponse struct { +type GetMessagesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Type: - // - // *StreamChatEventsResponse_Events - // *StreamChatEventsResponse_Ping - // *StreamChatEventsResponse_Error - Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` + Result GetMessagesResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetMessagesResponse_Result" json:"result,omitempty"` + Messages []*Message `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` } -func (x *StreamChatEventsResponse) Reset() { - *x = StreamChatEventsResponse{} +func (x *GetMessagesResponse) Reset() { + *x = GetMessagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[9] + mi := &file_chat_v2_chat_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StreamChatEventsResponse) String() string { +func (x *GetMessagesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StreamChatEventsResponse) ProtoMessage() {} +func (*GetMessagesResponse) ProtoMessage() {} -func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[9] +func (x *GetMessagesResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1375,61 +1382,25 @@ func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StreamChatEventsResponse.ProtoReflect.Descriptor instead. -func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} -} - -func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { - if m != nil { - return m.Type - } - return nil -} - -func (x *StreamChatEventsResponse) GetEvents() *ChatStreamEventBatch { - if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { - return x.Events - } - return nil +// Deprecated: Use GetMessagesResponse.ProtoReflect.Descriptor instead. +func (*GetMessagesResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} } -func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { - if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { - return x.Ping +func (x *GetMessagesResponse) GetResult() GetMessagesResponse_Result { + if x != nil { + return x.Result } - return nil + return GetMessagesResponse_OK } -func (x *StreamChatEventsResponse) GetError() *ChatStreamEventError { - if x, ok := x.GetType().(*StreamChatEventsResponse_Error); ok { - return x.Error +func (x *GetMessagesResponse) GetMessages() []*Message { + if x != nil { + return x.Messages } return nil } -type isStreamChatEventsResponse_Type interface { - isStreamChatEventsResponse_Type() -} - -type StreamChatEventsResponse_Events struct { - Events *ChatStreamEventBatch `protobuf:"bytes,1,opt,name=events,proto3,oneof"` -} - -type StreamChatEventsResponse_Ping struct { - Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` -} - -type StreamChatEventsResponse_Error struct { - Error *ChatStreamEventError `protobuf:"bytes,3,opt,name=error,proto3,oneof"` -} - -func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} - -func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} - -func (*StreamChatEventsResponse_Error) isStreamChatEventsResponse_Type() {} - type StartChatRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1446,7 +1417,7 @@ type StartChatRequest struct { func (x *StartChatRequest) Reset() { *x = StartChatRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1459,7 +1430,7 @@ func (x *StartChatRequest) String() string { func (*StartChatRequest) ProtoMessage() {} func (x *StartChatRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1472,7 +1443,7 @@ func (x *StartChatRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartChatRequest.ProtoReflect.Descriptor instead. func (*StartChatRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} } func (x *StartChatRequest) GetOwner() *v1.SolanaAccountId { @@ -1541,7 +1512,7 @@ type StartTwoWayChatParameters struct { func (x *StartTwoWayChatParameters) Reset() { *x = StartTwoWayChatParameters{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1554,7 +1525,7 @@ func (x *StartTwoWayChatParameters) String() string { func (*StartTwoWayChatParameters) ProtoMessage() {} func (x *StartTwoWayChatParameters) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1567,7 +1538,7 @@ func (x *StartTwoWayChatParameters) ProtoReflect() protoreflect.Message { // Deprecated: Use StartTwoWayChatParameters.ProtoReflect.Descriptor instead. func (*StartTwoWayChatParameters) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} } func (x *StartTwoWayChatParameters) GetOtherUser() *v1.SolanaAccountId { @@ -1597,7 +1568,7 @@ type StartChatResponse struct { func (x *StartChatResponse) Reset() { *x = StartChatResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1610,7 +1581,7 @@ func (x *StartChatResponse) String() string { func (*StartChatResponse) ProtoMessage() {} func (x *StartChatResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1623,7 +1594,7 @@ func (x *StartChatResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartChatResponse.ProtoReflect.Descriptor instead. func (*StartChatResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} } func (x *StartChatResponse) GetResult() StartChatResponse_Result { @@ -1657,7 +1628,7 @@ type SendMessageRequest struct { func (x *SendMessageRequest) Reset() { *x = SendMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1670,7 +1641,7 @@ func (x *SendMessageRequest) String() string { func (*SendMessageRequest) ProtoMessage() {} func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1683,7 +1654,7 @@ func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageRequest.ProtoReflect.Descriptor instead. func (*SendMessageRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} } func (x *SendMessageRequest) GetChatId() *v1.ChatId { @@ -1728,7 +1699,7 @@ type SendMessageResponse struct { func (x *SendMessageResponse) Reset() { *x = SendMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1741,7 +1712,7 @@ func (x *SendMessageResponse) String() string { func (*SendMessageResponse) ProtoMessage() {} func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1754,7 +1725,7 @@ func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. func (*SendMessageResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} } func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { @@ -1785,7 +1756,7 @@ type AdvancePointerRequest struct { func (x *AdvancePointerRequest) Reset() { *x = AdvancePointerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1798,7 +1769,7 @@ func (x *AdvancePointerRequest) String() string { func (*AdvancePointerRequest) ProtoMessage() {} func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1811,7 +1782,7 @@ func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerRequest.ProtoReflect.Descriptor instead. func (*AdvancePointerRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} } func (x *AdvancePointerRequest) GetChatId() *v1.ChatId { @@ -1853,7 +1824,7 @@ type AdvancePointerResponse struct { func (x *AdvancePointerResponse) Reset() { *x = AdvancePointerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1866,7 +1837,7 @@ func (x *AdvancePointerResponse) String() string { func (*AdvancePointerResponse) ProtoMessage() {} func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1879,7 +1850,7 @@ func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerResponse.ProtoReflect.Descriptor instead. func (*AdvancePointerResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} } func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { @@ -1903,7 +1874,7 @@ type SetMuteStateRequest struct { func (x *SetMuteStateRequest) Reset() { *x = SetMuteStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1916,7 +1887,7 @@ func (x *SetMuteStateRequest) String() string { func (*SetMuteStateRequest) ProtoMessage() {} func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1929,7 +1900,7 @@ func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} } func (x *SetMuteStateRequest) GetChatId() *v1.ChatId { @@ -1971,7 +1942,7 @@ type SetMuteStateResponse struct { func (x *SetMuteStateResponse) Reset() { *x = SetMuteStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1984,7 +1955,7 @@ func (x *SetMuteStateResponse) String() string { func (*SetMuteStateResponse) ProtoMessage() {} func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1997,7 +1968,7 @@ func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} } func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { @@ -2021,7 +1992,7 @@ type NotifyIsTypingRequest struct { func (x *NotifyIsTypingRequest) Reset() { *x = NotifyIsTypingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2034,7 +2005,7 @@ func (x *NotifyIsTypingRequest) String() string { func (*NotifyIsTypingRequest) ProtoMessage() {} func (x *NotifyIsTypingRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2047,7 +2018,7 @@ func (x *NotifyIsTypingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyIsTypingRequest.ProtoReflect.Descriptor instead. func (*NotifyIsTypingRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} } func (x *NotifyIsTypingRequest) GetChatId() *v1.ChatId { @@ -2089,7 +2060,7 @@ type NotifyIsTypingResponse struct { func (x *NotifyIsTypingResponse) Reset() { *x = NotifyIsTypingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2073,7 @@ func (x *NotifyIsTypingResponse) String() string { func (*NotifyIsTypingResponse) ProtoMessage() {} func (x *NotifyIsTypingResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2086,7 @@ func (x *NotifyIsTypingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyIsTypingResponse.ProtoReflect.Descriptor instead. func (*NotifyIsTypingResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} } func (x *NotifyIsTypingResponse) GetResult() NotifyIsTypingResponse_Result { @@ -2138,7 +2109,7 @@ type MessageId struct { func (x *MessageId) Reset() { *x = MessageId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2151,7 +2122,7 @@ func (x *MessageId) String() string { func (*MessageId) ProtoMessage() {} func (x *MessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2164,7 +2135,7 @@ func (x *MessageId) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageId.ProtoReflect.Descriptor instead. func (*MessageId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} } func (x *MessageId) GetValue() []byte { @@ -2186,7 +2157,7 @@ type MemberId struct { func (x *MemberId) Reset() { *x = MemberId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2199,7 +2170,7 @@ func (x *MemberId) String() string { func (*MemberId) ProtoMessage() {} func (x *MemberId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2212,7 +2183,7 @@ func (x *MemberId) ProtoReflect() protoreflect.Message { // Deprecated: Use MemberId.ProtoReflect.Descriptor instead. func (*MemberId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} } func (x *MemberId) GetValue() []byte { @@ -2251,7 +2222,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2264,7 +2235,7 @@ func (x *Metadata) String() string { func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2277,7 +2248,7 @@ func (x *Metadata) ProtoReflect() protoreflect.Message { // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} } func (x *Metadata) GetChatId() *v1.ChatId { @@ -2359,7 +2330,7 @@ type Message struct { func (x *Message) Reset() { *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2372,7 +2343,7 @@ func (x *Message) String() string { func (*Message) ProtoMessage() {} func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2385,7 +2356,7 @@ func (x *Message) ProtoReflect() protoreflect.Message { // Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} } func (x *Message) GetMessageId() *MessageId { @@ -2451,7 +2422,7 @@ type Member struct { func (x *Member) Reset() { *x = Member{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2464,7 +2435,7 @@ func (x *Member) String() string { func (*Member) ProtoMessage() {} func (x *Member) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2477,7 +2448,7 @@ func (x *Member) ProtoReflect() protoreflect.Message { // Deprecated: Use Member.ProtoReflect.Descriptor instead. func (*Member) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} } func (x *Member) GetMemberId() *MemberId { @@ -2527,7 +2498,7 @@ type MemberIdentity struct { func (x *MemberIdentity) Reset() { *x = MemberIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2540,7 +2511,7 @@ func (x *MemberIdentity) String() string { func (*MemberIdentity) ProtoMessage() {} func (x *MemberIdentity) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2553,7 +2524,7 @@ func (x *MemberIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use MemberIdentity.ProtoReflect.Descriptor instead. func (*MemberIdentity) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} } func (x *MemberIdentity) GetPlatform() Platform { @@ -2605,7 +2576,7 @@ type Pointer struct { func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2618,7 +2589,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2631,7 +2602,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} } func (x *Pointer) GetType() PointerType { @@ -2673,7 +2644,7 @@ type Content struct { func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2686,7 +2657,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2699,7 +2670,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} } func (m *Content) GetType() isContent_Type { @@ -2777,7 +2748,7 @@ type TextContent struct { func (x *TextContent) Reset() { *x = TextContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2790,7 +2761,7 @@ func (x *TextContent) String() string { func (*TextContent) ProtoMessage() {} func (x *TextContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2803,7 +2774,7 @@ func (x *TextContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TextContent.ProtoReflect.Descriptor instead. func (*TextContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} } func (x *TextContent) GetText() string { @@ -2826,7 +2797,7 @@ type LocalizedContent struct { func (x *LocalizedContent) Reset() { *x = LocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +2810,7 @@ func (x *LocalizedContent) String() string { func (*LocalizedContent) ProtoMessage() {} func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +2823,7 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } func (x *LocalizedContent) GetKeyOrText() string { @@ -2894,7 +2865,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2907,7 +2878,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2920,7 +2891,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -3022,7 +2993,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3035,7 +3006,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3048,7 +3019,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -3080,26 +3051,316 @@ type Cursor struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *Cursor) Reset() { + *x = Cursor{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cursor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cursor) ProtoMessage() {} + +func (x *Cursor) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cursor.ProtoReflect.Descriptor instead. +func (*Cursor) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} +} + +func (x *Cursor) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type IsTyping struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MemberId *MemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // is_typing indicates whether or not the user is typing. + // If false, the user has explicitly stopped typing. + IsTyping bool `protobuf:"varint,2,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` +} + +func (x *IsTyping) Reset() { + *x = IsTyping{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsTyping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsTyping) ProtoMessage() {} + +func (x *IsTyping) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsTyping.ProtoReflect.Descriptor instead. +func (*IsTyping) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} +} + +func (x *IsTyping) GetMemberId() *MemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *IsTyping) GetIsTyping() bool { + if x != nil { + return x.IsTyping + } + return false +} + +type StreamChatEventsRequest_Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *StreamChatEventsRequest_Params) Reset() { + *x = StreamChatEventsRequest_Params{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsRequest_Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsRequest_Params) ProtoMessage() {} + +func (x *StreamChatEventsRequest_Params) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsRequest_Params.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest_Params) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *StreamChatEventsRequest_Params) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *StreamChatEventsRequest_Params) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type StreamChatEventsResponse_EventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Updates []*StreamChatEventsResponse_ChatUpdate `protobuf:"bytes,1,rep,name=updates,proto3" json:"updates,omitempty"` +} + +func (x *StreamChatEventsResponse_EventBatch) Reset() { + *x = StreamChatEventsResponse_EventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse_EventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse_EventBatch) ProtoMessage() {} + +func (x *StreamChatEventsResponse_EventBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsResponse_EventBatch.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse_EventBatch) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *StreamChatEventsResponse_EventBatch) GetUpdates() []*StreamChatEventsResponse_ChatUpdate { + if x != nil { + return x.Updates + } + return nil +} + +// ChatUpdate contains a set of updates for a given chat id. +// +// Only the relevant fields will be set on update. On initial +// stream open, all fields will be set, however. +type StreamChatEventsResponse_ChatUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + LastMessage *Message `protobuf:"bytes,3,opt,name=last_message,json=lastMessage,proto3" json:"last_message,omitempty"` + IsTyping *IsTyping `protobuf:"bytes,4,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` +} + +func (x *StreamChatEventsResponse_ChatUpdate) Reset() { + *x = StreamChatEventsResponse_ChatUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse_ChatUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse_ChatUpdate) ProtoMessage() {} + +func (x *StreamChatEventsResponse_ChatUpdate) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsResponse_ChatUpdate.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse_ChatUpdate) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1, 1} +} + +func (x *StreamChatEventsResponse_ChatUpdate) GetChatId() *v1.ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *StreamChatEventsResponse_ChatUpdate) GetMetadata() *Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *StreamChatEventsResponse_ChatUpdate) GetLastMessage() *Message { + if x != nil { + return x.LastMessage + } + return nil +} + +func (x *StreamChatEventsResponse_ChatUpdate) GetIsTyping() *IsTyping { + if x != nil { + return x.IsTyping + } + return nil +} + +type StreamMessagesRequest_Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + ChatId *v1.ChatId `protobuf:"bytes,3,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // Callers may optionally specify a resume mode other than last delivery pointer. + // + // Types that are assignable to Resume: + // + // *StreamMessagesRequest_Params_LastKnownMessageId + // *StreamMessagesRequest_Params_LatestOnly + Resume isStreamMessagesRequest_Params_Resume `protobuf_oneof:"resume"` } -func (x *Cursor) Reset() { - *x = Cursor{} +func (x *StreamMessagesRequest_Params) Reset() { + *x = StreamMessagesRequest_Params{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] + mi := &file_chat_v2_chat_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Cursor) String() string { +func (x *StreamMessagesRequest_Params) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Cursor) ProtoMessage() {} +func (*StreamMessagesRequest_Params) ProtoMessage() {} -func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] +func (x *StreamMessagesRequest_Params) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3110,46 +3371,96 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Cursor.ProtoReflect.Descriptor instead. -func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} +// Deprecated: Use StreamMessagesRequest_Params.ProtoReflect.Descriptor instead. +func (*StreamMessagesRequest_Params) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2, 0} } -func (x *Cursor) GetValue() []byte { +func (x *StreamMessagesRequest_Params) GetOwner() *v1.SolanaAccountId { if x != nil { - return x.Value + return x.Owner } return nil } -type IsTyping struct { +func (x *StreamMessagesRequest_Params) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *StreamMessagesRequest_Params) GetChatId() *v1.ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (m *StreamMessagesRequest_Params) GetResume() isStreamMessagesRequest_Params_Resume { + if m != nil { + return m.Resume + } + return nil +} + +func (x *StreamMessagesRequest_Params) GetLastKnownMessageId() *MessageId { + if x, ok := x.GetResume().(*StreamMessagesRequest_Params_LastKnownMessageId); ok { + return x.LastKnownMessageId + } + return nil +} + +func (x *StreamMessagesRequest_Params) GetLatestOnly() bool { + if x, ok := x.GetResume().(*StreamMessagesRequest_Params_LatestOnly); ok { + return x.LatestOnly + } + return false +} + +type isStreamMessagesRequest_Params_Resume interface { + isStreamMessagesRequest_Params_Resume() +} + +type StreamMessagesRequest_Params_LastKnownMessageId struct { + // Server will return all messages newer than this message id. + LastKnownMessageId *MessageId `protobuf:"bytes,4,opt,name=last_known_message_id,json=lastKnownMessageId,proto3,oneof"` +} + +type StreamMessagesRequest_Params_LatestOnly struct { + // Server will not load any previous messages. + LatestOnly bool `protobuf:"varint,5,opt,name=latest_only,json=latestOnly,proto3,oneof"` +} + +func (*StreamMessagesRequest_Params_LastKnownMessageId) isStreamMessagesRequest_Params_Resume() {} + +func (*StreamMessagesRequest_Params_LatestOnly) isStreamMessagesRequest_Params_Resume() {} + +type StreamMessagesResponse_MessageBatch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MemberId *MemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - // is_typing indicates whether or not the user is typing. - // If false, the user has explicitly stopped typing. - IsTyping bool `protobuf:"varint,2,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` + Messages []*Message `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` } -func (x *IsTyping) Reset() { - *x = IsTyping{} +func (x *StreamMessagesResponse_MessageBatch) Reset() { + *x = StreamMessagesResponse_MessageBatch{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] + mi := &file_chat_v2_chat_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IsTyping) String() string { +func (x *StreamMessagesResponse_MessageBatch) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IsTyping) ProtoMessage() {} +func (*StreamMessagesResponse_MessageBatch) ProtoMessage() {} -func (x *IsTyping) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] +func (x *StreamMessagesResponse_MessageBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3160,25 +3471,18 @@ func (x *IsTyping) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IsTyping.ProtoReflect.Descriptor instead. -func (*IsTyping) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} +// Deprecated: Use StreamMessagesResponse_MessageBatch.ProtoReflect.Descriptor instead. +func (*StreamMessagesResponse_MessageBatch) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3, 0} } -func (x *IsTyping) GetMemberId() *MemberId { +func (x *StreamMessagesResponse_MessageBatch) GetMessages() []*Message { if x != nil { - return x.MemberId + return x.Messages } return nil } -func (x *IsTyping) GetIsTyping() bool { - if x != nil { - return x.IsTyping - } - return false -} - var File_chat_v2_chat_service_proto protoreflect.FileDescriptor var file_chat_v2_chat_service_proto_rawDesc = []byte{ @@ -3192,267 +3496,291 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, - 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x9f, - 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x22, 0x10, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x22, 0x99, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, - 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xb6, 0x01, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb5, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x46, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, + 0x00, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, + 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x1a, 0x90, 0x01, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xb4, 0x04, + 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, + 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x4b, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x68, 0x0a, 0x0a, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x5a, 0x0a, 0x07, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x0d, + 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0xec, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x33, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x69, 0x73, 0x54, + 0x79, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe9, 0x03, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x1a, 0xc8, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x48, 0x00, + 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0b, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, + 0x65, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, + 0x22, 0xaf, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, + 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x4f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, + 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0x55, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, + 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, + 0x10, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, - 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0xda, 0x01, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, + 0x74, 0x73, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x99, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, + 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, + 0x22, 0xb6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, + 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, + 0x79, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, + 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x2a, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x6a, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, + 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, + 0x59, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, + 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, - 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, - 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, - 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0x67, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, - 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, - 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xd5, 0x01, 0x0a, - 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, - 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x02, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, + 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x68, 0x61, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, - 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, - 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, - 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, - 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, - 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, - 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x63, 0x68, - 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x6a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, - 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, - 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x49, 0x53, 0x53, - 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x04, 0x12, 0x12, - 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x05, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, - 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, - 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, - 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x92, 0x01, 0x0a, - 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, - 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, - 0x02, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, - 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x53, 0x65, - 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, - 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, - 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, - 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, - 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x65, 0x22, 0x92, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, + 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, + 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, @@ -3460,246 +3788,276 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, - 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, - 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0x2e, 0x0a, 0x09, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, - 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe5, 0x02, 0x0a, 0x08, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x00, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x3c, - 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, - 0x61, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x42, - 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, - 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xdd, 0x01, 0x0a, - 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x86, + 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, + 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, + 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, + 0x22, 0x2e, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x2d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, + 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0xe5, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x00, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, + 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, + 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x22, 0xdc, 0x01, 0x0a, - 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x07, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x97, - 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, - 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, - 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, - 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, - 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, - 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, - 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, - 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, - 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, - 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, - 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, - 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, - 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, - 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, - 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, - 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, - 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, - 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, - 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, - 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x2e, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, - 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, - 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, - 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, - 0x44, 0x10, 0x03, 0x32, 0xbf, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, - 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, - 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, - 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x22, 0xdd, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, + 0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, + 0x66, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, + 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, + 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, + 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, + 0x22, 0xc0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, + 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, + 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, + 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, + 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, + 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, + 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, + 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, + 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, + 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, + 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, + 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, + 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x2e, 0x0a, + 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, 0x2d, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, + 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xa0, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, + 0x74, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, + 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, + 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, + 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, + 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3715,168 +4073,184 @@ func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { } var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 14) -var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 35) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ - (ChatType)(0), // 0: code.chat.v2.ChatType - (Platform)(0), // 1: code.chat.v2.Platform - (PointerType)(0), // 2: code.chat.v2.PointerType - (GetChatsRequest_Direction)(0), // 3: code.chat.v2.GetChatsRequest.Direction - (GetChatsResponse_Result)(0), // 4: code.chat.v2.GetChatsResponse.Result - (GetMessagesRequest_Direction)(0), // 5: code.chat.v2.GetMessagesRequest.Direction - (GetMessagesResponse_Result)(0), // 6: code.chat.v2.GetMessagesResponse.Result - (ChatStreamEventError_Code)(0), // 7: code.chat.v2.ChatStreamEventError.Code - (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result - (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result - (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result - (SetMuteStateResponse_Result)(0), // 11: code.chat.v2.SetMuteStateResponse.Result - (NotifyIsTypingResponse_Result)(0), // 12: code.chat.v2.NotifyIsTypingResponse.Result - (ExchangeDataContent_Verb)(0), // 13: code.chat.v2.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 14: code.chat.v2.GetChatsRequest - (*GetChatsResponse)(nil), // 15: code.chat.v2.GetChatsResponse - (*GetMessagesRequest)(nil), // 16: code.chat.v2.GetMessagesRequest - (*GetMessagesResponse)(nil), // 17: code.chat.v2.GetMessagesResponse - (*OpenChatEventStream)(nil), // 18: code.chat.v2.OpenChatEventStream - (*ChatStreamEvent)(nil), // 19: code.chat.v2.ChatStreamEvent - (*ChatStreamEventBatch)(nil), // 20: code.chat.v2.ChatStreamEventBatch - (*ChatStreamEventError)(nil), // 21: code.chat.v2.ChatStreamEventError - (*StreamChatEventsRequest)(nil), // 22: code.chat.v2.StreamChatEventsRequest - (*StreamChatEventsResponse)(nil), // 23: code.chat.v2.StreamChatEventsResponse - (*StartChatRequest)(nil), // 24: code.chat.v2.StartChatRequest - (*StartTwoWayChatParameters)(nil), // 25: code.chat.v2.StartTwoWayChatParameters - (*StartChatResponse)(nil), // 26: code.chat.v2.StartChatResponse - (*SendMessageRequest)(nil), // 27: code.chat.v2.SendMessageRequest - (*SendMessageResponse)(nil), // 28: code.chat.v2.SendMessageResponse - (*AdvancePointerRequest)(nil), // 29: code.chat.v2.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 30: code.chat.v2.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 31: code.chat.v2.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 32: code.chat.v2.SetMuteStateResponse - (*NotifyIsTypingRequest)(nil), // 33: code.chat.v2.NotifyIsTypingRequest - (*NotifyIsTypingResponse)(nil), // 34: code.chat.v2.NotifyIsTypingResponse - (*MessageId)(nil), // 35: code.chat.v2.MessageId - (*MemberId)(nil), // 36: code.chat.v2.MemberId - (*Metadata)(nil), // 37: code.chat.v2.Metadata - (*Message)(nil), // 38: code.chat.v2.Message - (*Member)(nil), // 39: code.chat.v2.Member - (*MemberIdentity)(nil), // 40: code.chat.v2.MemberIdentity - (*Pointer)(nil), // 41: code.chat.v2.Pointer - (*Content)(nil), // 42: code.chat.v2.Content - (*TextContent)(nil), // 43: code.chat.v2.TextContent - (*LocalizedContent)(nil), // 44: code.chat.v2.LocalizedContent - (*ExchangeDataContent)(nil), // 45: code.chat.v2.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 46: code.chat.v2.NaclBoxEncryptedContent - (*Cursor)(nil), // 47: code.chat.v2.Cursor - (*IsTyping)(nil), // 48: code.chat.v2.IsTyping - (*v1.SolanaAccountId)(nil), // 49: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 50: code.common.v1.Signature - (*v1.ChatId)(nil), // 51: code.common.v1.ChatId - (*v1.ClientPong)(nil), // 52: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 53: code.common.v1.ServerPing - (*v1.IntentId)(nil), // 54: code.common.v1.IntentId - (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 56: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 57: code.transaction.v2.ExchangeDataWithoutRate + (ChatType)(0), // 0: code.chat.v2.ChatType + (Platform)(0), // 1: code.chat.v2.Platform + (PointerType)(0), // 2: code.chat.v2.PointerType + (StreamError_Code)(0), // 3: code.chat.v2.StreamError.Code + (GetChatsRequest_Direction)(0), // 4: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 5: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 6: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 7: code.chat.v2.GetMessagesResponse.Result + (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result + (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result + (SetMuteStateResponse_Result)(0), // 11: code.chat.v2.SetMuteStateResponse.Result + (NotifyIsTypingResponse_Result)(0), // 12: code.chat.v2.NotifyIsTypingResponse.Result + (ExchangeDataContent_Verb)(0), // 13: code.chat.v2.ExchangeDataContent.Verb + (*StreamChatEventsRequest)(nil), // 14: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 15: code.chat.v2.StreamChatEventsResponse + (*StreamMessagesRequest)(nil), // 16: code.chat.v2.StreamMessagesRequest + (*StreamMessagesResponse)(nil), // 17: code.chat.v2.StreamMessagesResponse + (*StreamError)(nil), // 18: code.chat.v2.StreamError + (*GetChatsRequest)(nil), // 19: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 20: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 21: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 22: code.chat.v2.GetMessagesResponse + (*StartChatRequest)(nil), // 23: code.chat.v2.StartChatRequest + (*StartTwoWayChatParameters)(nil), // 24: code.chat.v2.StartTwoWayChatParameters + (*StartChatResponse)(nil), // 25: code.chat.v2.StartChatResponse + (*SendMessageRequest)(nil), // 26: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 27: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 28: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 29: code.chat.v2.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 30: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 31: code.chat.v2.SetMuteStateResponse + (*NotifyIsTypingRequest)(nil), // 32: code.chat.v2.NotifyIsTypingRequest + (*NotifyIsTypingResponse)(nil), // 33: code.chat.v2.NotifyIsTypingResponse + (*MessageId)(nil), // 34: code.chat.v2.MessageId + (*MemberId)(nil), // 35: code.chat.v2.MemberId + (*Metadata)(nil), // 36: code.chat.v2.Metadata + (*Message)(nil), // 37: code.chat.v2.Message + (*Member)(nil), // 38: code.chat.v2.Member + (*MemberIdentity)(nil), // 39: code.chat.v2.MemberIdentity + (*Pointer)(nil), // 40: code.chat.v2.Pointer + (*Content)(nil), // 41: code.chat.v2.Content + (*TextContent)(nil), // 42: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 43: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 44: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 45: code.chat.v2.NaclBoxEncryptedContent + (*Cursor)(nil), // 46: code.chat.v2.Cursor + (*IsTyping)(nil), // 47: code.chat.v2.IsTyping + (*StreamChatEventsRequest_Params)(nil), // 48: code.chat.v2.StreamChatEventsRequest.Params + (*StreamChatEventsResponse_EventBatch)(nil), // 49: code.chat.v2.StreamChatEventsResponse.EventBatch + (*StreamChatEventsResponse_ChatUpdate)(nil), // 50: code.chat.v2.StreamChatEventsResponse.ChatUpdate + (*StreamMessagesRequest_Params)(nil), // 51: code.chat.v2.StreamMessagesRequest.Params + (*StreamMessagesResponse_MessageBatch)(nil), // 52: code.chat.v2.StreamMessagesResponse.MessageBatch + (*v1.ClientPong)(nil), // 53: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 54: code.common.v1.ServerPing + (*v1.SolanaAccountId)(nil), // 55: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 56: code.common.v1.Signature + (*v1.ChatId)(nil), // 57: code.common.v1.ChatId + (*v1.IntentId)(nil), // 58: code.common.v1.IntentId + (*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 60: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 61: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 49, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 47, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor - 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction - 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 37, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.Metadata - 51, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.common.v1.ChatId - 49, // 7: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 8: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 47, // 9: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor - 5, // 10: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction - 6, // 11: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 38, // 12: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.Message - 51, // 13: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.common.v1.ChatId - 49, // 14: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 15: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 38, // 16: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.Message - 41, // 17: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 48, // 18: code.chat.v2.ChatStreamEvent.is_typing:type_name -> code.chat.v2.IsTyping - 19, // 19: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 7, // 20: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code - 18, // 21: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 52, // 22: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 20, // 23: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 53, // 24: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 21, // 25: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError - 49, // 26: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 27: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 25, // 28: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters - 49, // 29: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId - 54, // 30: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId - 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 37, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.Metadata - 51, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId - 42, // 34: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 49, // 35: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 36: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 37: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 38, // 38: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.Message - 51, // 39: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId - 41, // 40: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 49, // 41: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 42: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 43: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 51, // 44: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId - 49, // 45: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 46: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 11, // 47: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 51, // 48: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId - 49, // 49: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId - 50, // 50: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature - 12, // 51: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result - 51, // 52: code.chat.v2.Metadata.chat_id:type_name -> code.common.v1.ChatId - 0, // 53: code.chat.v2.Metadata.type:type_name -> code.chat.v2.ChatType - 47, // 54: code.chat.v2.Metadata.cursor:type_name -> code.chat.v2.Cursor - 39, // 55: code.chat.v2.Metadata.members:type_name -> code.chat.v2.Member - 35, // 56: code.chat.v2.Message.message_id:type_name -> code.chat.v2.MessageId - 36, // 57: code.chat.v2.Message.sender_id:type_name -> code.chat.v2.MemberId - 42, // 58: code.chat.v2.Message.content:type_name -> code.chat.v2.Content - 55, // 59: code.chat.v2.Message.ts:type_name -> google.protobuf.Timestamp - 47, // 60: code.chat.v2.Message.cursor:type_name -> code.chat.v2.Cursor - 36, // 61: code.chat.v2.Member.member_id:type_name -> code.chat.v2.MemberId - 40, // 62: code.chat.v2.Member.identity:type_name -> code.chat.v2.MemberIdentity - 41, // 63: code.chat.v2.Member.pointers:type_name -> code.chat.v2.Pointer - 1, // 64: code.chat.v2.MemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 65: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType - 35, // 66: code.chat.v2.Pointer.value:type_name -> code.chat.v2.MessageId - 36, // 67: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.MemberId - 43, // 68: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 44, // 69: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 45, // 70: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 46, // 71: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 13, // 72: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 56, // 73: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 57, // 74: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 54, // 75: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 50, // 76: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 49, // 77: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 36, // 78: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.MemberId - 14, // 79: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 16, // 80: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 22, // 81: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 24, // 82: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 27, // 83: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 29, // 84: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 31, // 85: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 33, // 86: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 15, // 87: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 17, // 88: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 23, // 89: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 26, // 90: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 28, // 91: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 30, // 92: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 32, // 93: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 34, // 94: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 87, // [87:95] is the sub-list for method output_type - 79, // [79:87] is the sub-list for method input_type - 79, // [79:79] is the sub-list for extension type_name - 79, // [79:79] is the sub-list for extension extendee - 0, // [0:79] is the sub-list for field type_name + 48, // 0: code.chat.v2.StreamChatEventsRequest.params:type_name -> code.chat.v2.StreamChatEventsRequest.Params + 53, // 1: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 54, // 2: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 18, // 3: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.StreamError + 49, // 4: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.StreamChatEventsResponse.EventBatch + 51, // 5: code.chat.v2.StreamMessagesRequest.params:type_name -> code.chat.v2.StreamMessagesRequest.Params + 53, // 6: code.chat.v2.StreamMessagesRequest.pong:type_name -> code.common.v1.ClientPong + 54, // 7: code.chat.v2.StreamMessagesResponse.ping:type_name -> code.common.v1.ServerPing + 18, // 8: code.chat.v2.StreamMessagesResponse.error:type_name -> code.chat.v2.StreamError + 52, // 9: code.chat.v2.StreamMessagesResponse.messages:type_name -> code.chat.v2.StreamMessagesResponse.MessageBatch + 3, // 10: code.chat.v2.StreamError.code:type_name -> code.chat.v2.StreamError.Code + 55, // 11: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 12: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 46, // 13: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 4, // 14: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 5, // 15: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 36, // 16: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.Metadata + 57, // 17: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.common.v1.ChatId + 55, // 18: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 19: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 46, // 20: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 6, // 21: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 7, // 22: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 37, // 23: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.Message + 55, // 24: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 25: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 24, // 26: code.chat.v2.StartChatRequest.two_way_chat:type_name -> code.chat.v2.StartTwoWayChatParameters + 55, // 27: code.chat.v2.StartTwoWayChatParameters.other_user:type_name -> code.common.v1.SolanaAccountId + 58, // 28: code.chat.v2.StartTwoWayChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 29: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 36, // 30: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.Metadata + 57, // 31: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.common.v1.ChatId + 41, // 32: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 55, // 33: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 34: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 35: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 37, // 36: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.Message + 57, // 37: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.common.v1.ChatId + 40, // 38: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 55, // 39: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 40: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 41: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 57, // 42: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.common.v1.ChatId + 55, // 43: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 44: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 11, // 45: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 57, // 46: code.chat.v2.NotifyIsTypingRequest.chat_id:type_name -> code.common.v1.ChatId + 55, // 47: code.chat.v2.NotifyIsTypingRequest.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 48: code.chat.v2.NotifyIsTypingRequest.signature:type_name -> code.common.v1.Signature + 12, // 49: code.chat.v2.NotifyIsTypingResponse.result:type_name -> code.chat.v2.NotifyIsTypingResponse.Result + 57, // 50: code.chat.v2.Metadata.chat_id:type_name -> code.common.v1.ChatId + 0, // 51: code.chat.v2.Metadata.type:type_name -> code.chat.v2.ChatType + 46, // 52: code.chat.v2.Metadata.cursor:type_name -> code.chat.v2.Cursor + 38, // 53: code.chat.v2.Metadata.members:type_name -> code.chat.v2.Member + 34, // 54: code.chat.v2.Message.message_id:type_name -> code.chat.v2.MessageId + 35, // 55: code.chat.v2.Message.sender_id:type_name -> code.chat.v2.MemberId + 41, // 56: code.chat.v2.Message.content:type_name -> code.chat.v2.Content + 59, // 57: code.chat.v2.Message.ts:type_name -> google.protobuf.Timestamp + 46, // 58: code.chat.v2.Message.cursor:type_name -> code.chat.v2.Cursor + 35, // 59: code.chat.v2.Member.member_id:type_name -> code.chat.v2.MemberId + 39, // 60: code.chat.v2.Member.identity:type_name -> code.chat.v2.MemberIdentity + 40, // 61: code.chat.v2.Member.pointers:type_name -> code.chat.v2.Pointer + 1, // 62: code.chat.v2.MemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 63: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 34, // 64: code.chat.v2.Pointer.value:type_name -> code.chat.v2.MessageId + 35, // 65: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.MemberId + 42, // 66: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 43, // 67: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 44, // 68: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 45, // 69: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 13, // 70: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 60, // 71: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 61, // 72: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 58, // 73: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 56, // 74: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 55, // 75: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 35, // 76: code.chat.v2.IsTyping.member_id:type_name -> code.chat.v2.MemberId + 55, // 77: code.chat.v2.StreamChatEventsRequest.Params.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 78: code.chat.v2.StreamChatEventsRequest.Params.signature:type_name -> code.common.v1.Signature + 50, // 79: code.chat.v2.StreamChatEventsResponse.EventBatch.updates:type_name -> code.chat.v2.StreamChatEventsResponse.ChatUpdate + 57, // 80: code.chat.v2.StreamChatEventsResponse.ChatUpdate.chat_id:type_name -> code.common.v1.ChatId + 36, // 81: code.chat.v2.StreamChatEventsResponse.ChatUpdate.metadata:type_name -> code.chat.v2.Metadata + 37, // 82: code.chat.v2.StreamChatEventsResponse.ChatUpdate.last_message:type_name -> code.chat.v2.Message + 47, // 83: code.chat.v2.StreamChatEventsResponse.ChatUpdate.is_typing:type_name -> code.chat.v2.IsTyping + 55, // 84: code.chat.v2.StreamMessagesRequest.Params.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 85: code.chat.v2.StreamMessagesRequest.Params.signature:type_name -> code.common.v1.Signature + 57, // 86: code.chat.v2.StreamMessagesRequest.Params.chat_id:type_name -> code.common.v1.ChatId + 34, // 87: code.chat.v2.StreamMessagesRequest.Params.last_known_message_id:type_name -> code.chat.v2.MessageId + 37, // 88: code.chat.v2.StreamMessagesResponse.MessageBatch.messages:type_name -> code.chat.v2.Message + 14, // 89: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 16, // 90: code.chat.v2.Chat.StreamMessages:input_type -> code.chat.v2.StreamMessagesRequest + 19, // 91: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 21, // 92: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 93: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 26, // 94: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 28, // 95: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 30, // 96: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 32, // 97: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 15, // 98: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 17, // 99: code.chat.v2.Chat.StreamMessages:output_type -> code.chat.v2.StreamMessagesResponse + 20, // 100: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 22, // 101: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 25, // 102: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 27, // 103: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 29, // 104: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 31, // 105: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 33, // 106: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 98, // [98:107] is the sub-list for method output_type + 89, // [89:98] is the sub-list for method input_type + 89, // [89:89] is the sub-list for extension type_name + 89, // [89:89] is the sub-list for extension extendee + 0, // [0:89] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -3886,7 +4260,7 @@ func file_chat_v2_chat_service_proto_init() { } if !protoimpl.UnsafeEnabled { file_chat_v2_chat_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChatsRequest); i { + switch v := v.(*StreamChatEventsRequest); i { case 0: return &v.state case 1: @@ -3898,7 +4272,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChatsResponse); i { + switch v := v.(*StreamChatEventsResponse); i { case 0: return &v.state case 1: @@ -3910,7 +4284,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMessagesRequest); i { + switch v := v.(*StreamMessagesRequest); i { case 0: return &v.state case 1: @@ -3922,7 +4296,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMessagesResponse); i { + switch v := v.(*StreamMessagesResponse); i { case 0: return &v.state case 1: @@ -3934,7 +4308,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OpenChatEventStream); i { + switch v := v.(*StreamError); i { case 0: return &v.state case 1: @@ -3946,7 +4320,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatStreamEvent); i { + switch v := v.(*GetChatsRequest); i { case 0: return &v.state case 1: @@ -3958,7 +4332,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatStreamEventBatch); i { + switch v := v.(*GetChatsResponse); i { case 0: return &v.state case 1: @@ -3970,7 +4344,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatStreamEventError); i { + switch v := v.(*GetMessagesRequest); i { case 0: return &v.state case 1: @@ -3982,7 +4356,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamChatEventsRequest); i { + switch v := v.(*GetMessagesResponse); i { case 0: return &v.state case 1: @@ -3994,7 +4368,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamChatEventsResponse); i { + switch v := v.(*StartChatRequest); i { case 0: return &v.state case 1: @@ -4006,7 +4380,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartChatRequest); i { + switch v := v.(*StartTwoWayChatParameters); i { case 0: return &v.state case 1: @@ -4018,7 +4392,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartTwoWayChatParameters); i { + switch v := v.(*StartChatResponse); i { case 0: return &v.state case 1: @@ -4030,7 +4404,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartChatResponse); i { + switch v := v.(*SendMessageRequest); i { case 0: return &v.state case 1: @@ -4042,7 +4416,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageRequest); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -4054,7 +4428,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageResponse); i { + switch v := v.(*AdvancePointerRequest); i { case 0: return &v.state case 1: @@ -4066,7 +4440,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerRequest); i { + switch v := v.(*AdvancePointerResponse); i { case 0: return &v.state case 1: @@ -4078,7 +4452,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerResponse); i { + switch v := v.(*SetMuteStateRequest); i { case 0: return &v.state case 1: @@ -4090,7 +4464,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateRequest); i { + switch v := v.(*SetMuteStateResponse); i { case 0: return &v.state case 1: @@ -4102,7 +4476,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateResponse); i { + switch v := v.(*NotifyIsTypingRequest); i { case 0: return &v.state case 1: @@ -4114,7 +4488,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyIsTypingRequest); i { + switch v := v.(*NotifyIsTypingResponse); i { case 0: return &v.state case 1: @@ -4126,7 +4500,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyIsTypingResponse); i { + switch v := v.(*MessageId); i { case 0: return &v.state case 1: @@ -4138,7 +4512,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageId); i { + switch v := v.(*MemberId); i { case 0: return &v.state case 1: @@ -4150,7 +4524,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemberId); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -4162,7 +4536,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { + switch v := v.(*Message); i { case 0: return &v.state case 1: @@ -4174,7 +4548,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Message); i { + switch v := v.(*Member); i { case 0: return &v.state case 1: @@ -4186,7 +4560,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Member); i { + switch v := v.(*MemberIdentity); i { case 0: return &v.state case 1: @@ -4198,7 +4572,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemberIdentity); i { + switch v := v.(*Pointer); i { case 0: return &v.state case 1: @@ -4210,7 +4584,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*Content); i { case 0: return &v.state case 1: @@ -4222,7 +4596,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*TextContent); i { case 0: return &v.state case 1: @@ -4234,7 +4608,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextContent); i { + switch v := v.(*LocalizedContent); i { case 0: return &v.state case 1: @@ -4246,7 +4620,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*ExchangeDataContent); i { case 0: return &v.state case 1: @@ -4258,7 +4632,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*NaclBoxEncryptedContent); i { case 0: return &v.state case 1: @@ -4270,7 +4644,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*Cursor); i { case 0: return &v.state case 1: @@ -4282,7 +4656,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cursor); i { + switch v := v.(*IsTyping); i { case 0: return &v.state case 1: @@ -4294,7 +4668,55 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IsTyping); i { + switch v := v.(*StreamChatEventsRequest_Params); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsResponse_EventBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsResponse_ChatUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamMessagesRequest_Params); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamMessagesResponse_MessageBatch); i { case 0: return &v.state case 1: @@ -4306,42 +4728,50 @@ func file_chat_v2_chat_service_proto_init() { } } } - file_chat_v2_chat_service_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*ChatStreamEvent_Message)(nil), - (*ChatStreamEvent_Pointer)(nil), - (*ChatStreamEvent_IsTyping)(nil), - } - file_chat_v2_chat_service_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*StreamChatEventsRequest_OpenStream)(nil), + file_chat_v2_chat_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*StreamChatEventsRequest_Params_)(nil), (*StreamChatEventsRequest_Pong)(nil), } - file_chat_v2_chat_service_proto_msgTypes[9].OneofWrappers = []interface{}{ - (*StreamChatEventsResponse_Events)(nil), + file_chat_v2_chat_service_proto_msgTypes[1].OneofWrappers = []interface{}{ (*StreamChatEventsResponse_Ping)(nil), (*StreamChatEventsResponse_Error)(nil), + (*StreamChatEventsResponse_Events)(nil), } - file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*StreamMessagesRequest_Params_)(nil), + (*StreamMessagesRequest_Pong)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*StreamMessagesResponse_Ping)(nil), + (*StreamMessagesResponse_Error)(nil), + (*StreamMessagesResponse_Messages)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[9].OneofWrappers = []interface{}{ (*StartChatRequest_TwoWayChat)(nil), } - file_chat_v2_chat_service_proto_msgTypes[28].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[27].OneofWrappers = []interface{}{ (*Content_Text)(nil), (*Content_Localized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), } - file_chat_v2_chat_service_proto_msgTypes[31].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[30].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), (*ExchangeDataContent_Intent)(nil), (*ExchangeDataContent_Signature)(nil), } + file_chat_v2_chat_service_proto_msgTypes[37].OneofWrappers = []interface{}{ + (*StreamMessagesRequest_Params_LastKnownMessageId)(nil), + (*StreamMessagesRequest_Params_LatestOnly)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, NumEnums: 14, - NumMessages: 35, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 4027b31..69f831d 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -33,73 +33,54 @@ var ( _ = ptypes.DynamicAny{} ) -// Validate checks the field values on GetChatsRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *GetChatsRequest) Validate() error { +// Validate checks the field values on StreamChatEventsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest) Validate() error { if m == nil { return nil } - if m.GetOwner() == nil { - return GetChatsRequestValidationError{ - field: "Owner", - reason: "value is required", - } - } + switch m.Type.(type) { - if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetChatsRequestValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, + case *StreamChatEventsRequest_Params_: + + if v, ok := interface{}(m.GetParams()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Params", + reason: "embedded message failed validation", + cause: err, + } } } - } - if m.GetSignature() == nil { - return GetChatsRequestValidationError{ - field: "Signature", - reason: "value is required", - } - } + case *StreamChatEventsRequest_Pong: - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetChatsRequestValidationError{ - field: "Signature", - reason: "embedded message failed validation", - cause: err, + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } } } - } - if m.GetPageSize() > 100 { - return GetChatsRequestValidationError{ - field: "PageSize", - reason: "value must be less than or equal to 100", + default: + return StreamChatEventsRequestValidationError{ + field: "Type", + reason: "value is required", } - } - if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetChatsRequestValidationError{ - field: "Cursor", - reason: "embedded message failed validation", - cause: err, - } - } } - // no validation rules for Direction - return nil } -// GetChatsRequestValidationError is the validation error returned by -// GetChatsRequest.Validate if the designated constraints aren't met. -type GetChatsRequestValidationError struct { +// StreamChatEventsRequestValidationError is the validation error returned by +// StreamChatEventsRequest.Validate if the designated constraints aren't met. +type StreamChatEventsRequestValidationError struct { field string reason string cause error @@ -107,22 +88,24 @@ type GetChatsRequestValidationError struct { } // Field function returns field value. -func (e GetChatsRequestValidationError) Field() string { return e.field } +func (e StreamChatEventsRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e GetChatsRequestValidationError) Reason() string { return e.reason } +func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e GetChatsRequestValidationError) Cause() error { return e.cause } +func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e GetChatsRequestValidationError) Key() bool { return e.key } +func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e GetChatsRequestValidationError) ErrorName() string { return "GetChatsRequestValidationError" } +func (e StreamChatEventsRequestValidationError) ErrorName() string { + return "StreamChatEventsRequestValidationError" +} // Error satisfies the builtin error interface -func (e GetChatsRequestValidationError) Error() string { +func (e StreamChatEventsRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -134,14 +117,14 @@ func (e GetChatsRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sGetChatsRequest.%s: %s%s", + "invalid %sStreamChatEventsRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = GetChatsRequestValidationError{} +var _ error = StreamChatEventsRequestValidationError{} var _ interface { Field() string @@ -149,46 +132,68 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = GetChatsRequestValidationError{} +} = StreamChatEventsRequestValidationError{} -// Validate checks the field values on GetChatsResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *GetChatsResponse) Validate() error { +// Validate checks the field values on StreamChatEventsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsResponse) Validate() error { if m == nil { return nil } - // no validation rules for Result + switch m.Type.(type) { - if len(m.GetChats()) > 100 { - return GetChatsResponseValidationError{ - field: "Chats", - reason: "value must contain no more than 100 item(s)", + case *StreamChatEventsResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } } - } - for idx, item := range m.GetChats() { - _, _ = idx, item + case *StreamChatEventsResponse_Error: - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetError()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return GetChatsResponseValidationError{ - field: fmt.Sprintf("Chats[%v]", idx), + return StreamChatEventsResponseValidationError{ + field: "Error", reason: "embedded message failed validation", cause: err, } } } + case *StreamChatEventsResponse_Events: + + if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Events", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsResponseValidationError{ + field: "Type", + reason: "value is required", + } + } return nil } -// GetChatsResponseValidationError is the validation error returned by -// GetChatsResponse.Validate if the designated constraints aren't met. -type GetChatsResponseValidationError struct { +// StreamChatEventsResponseValidationError is the validation error returned by +// StreamChatEventsResponse.Validate if the designated constraints aren't met. +type StreamChatEventsResponseValidationError struct { field string reason string cause error @@ -196,22 +201,24 @@ type GetChatsResponseValidationError struct { } // Field function returns field value. -func (e GetChatsResponseValidationError) Field() string { return e.field } +func (e StreamChatEventsResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e GetChatsResponseValidationError) Reason() string { return e.reason } +func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e GetChatsResponseValidationError) Cause() error { return e.cause } +func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e GetChatsResponseValidationError) Key() bool { return e.key } +func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e GetChatsResponseValidationError) ErrorName() string { return "GetChatsResponseValidationError" } +func (e StreamChatEventsResponseValidationError) ErrorName() string { + return "StreamChatEventsResponseValidationError" +} // Error satisfies the builtin error interface -func (e GetChatsResponseValidationError) Error() string { +func (e StreamChatEventsResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -223,14 +230,14 @@ func (e GetChatsResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sGetChatsResponse.%s: %s%s", + "invalid %sStreamChatEventsResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = GetChatsResponseValidationError{} +var _ error = StreamChatEventsResponseValidationError{} var _ interface { Field() string @@ -238,92 +245,56 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = GetChatsResponseValidationError{} +} = StreamChatEventsResponseValidationError{} -// Validate checks the field values on GetMessagesRequest with the rules +// Validate checks the field values on StreamMessagesRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *GetMessagesRequest) Validate() error { +func (m *StreamMessagesRequest) Validate() error { if m == nil { return nil } - if m.GetChatId() == nil { - return GetMessagesRequestValidationError{ - field: "ChatId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetMessagesRequestValidationError{ - field: "ChatId", - reason: "embedded message failed validation", - cause: err, - } - } - } + switch m.Type.(type) { - if m.GetOwner() == nil { - return GetMessagesRequestValidationError{ - field: "Owner", - reason: "value is required", - } - } + case *StreamMessagesRequest_Params_: - if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetMessagesRequestValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, + if v, ok := interface{}(m.GetParams()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequestValidationError{ + field: "Params", + reason: "embedded message failed validation", + cause: err, + } } } - } - if m.GetSignature() == nil { - return GetMessagesRequestValidationError{ - field: "Signature", - reason: "value is required", - } - } + case *StreamMessagesRequest_Pong: - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetMessagesRequestValidationError{ - field: "Signature", - reason: "embedded message failed validation", - cause: err, + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } } } - } - if m.GetPageSize() > 100 { - return GetMessagesRequestValidationError{ - field: "PageSize", - reason: "value must be less than or equal to 100", + default: + return StreamMessagesRequestValidationError{ + field: "Type", + reason: "value is required", } - } - if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetMessagesRequestValidationError{ - field: "Cursor", - reason: "embedded message failed validation", - cause: err, - } - } } - // no validation rules for Direction - return nil } -// GetMessagesRequestValidationError is the validation error returned by -// GetMessagesRequest.Validate if the designated constraints aren't met. -type GetMessagesRequestValidationError struct { +// StreamMessagesRequestValidationError is the validation error returned by +// StreamMessagesRequest.Validate if the designated constraints aren't met. +type StreamMessagesRequestValidationError struct { field string reason string cause error @@ -331,24 +302,24 @@ type GetMessagesRequestValidationError struct { } // Field function returns field value. -func (e GetMessagesRequestValidationError) Field() string { return e.field } +func (e StreamMessagesRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e GetMessagesRequestValidationError) Reason() string { return e.reason } +func (e StreamMessagesRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e GetMessagesRequestValidationError) Cause() error { return e.cause } +func (e StreamMessagesRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e GetMessagesRequestValidationError) Key() bool { return e.key } +func (e StreamMessagesRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e GetMessagesRequestValidationError) ErrorName() string { - return "GetMessagesRequestValidationError" +func (e StreamMessagesRequestValidationError) ErrorName() string { + return "StreamMessagesRequestValidationError" } // Error satisfies the builtin error interface -func (e GetMessagesRequestValidationError) Error() string { +func (e StreamMessagesRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -360,14 +331,14 @@ func (e GetMessagesRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sGetMessagesRequest.%s: %s%s", + "invalid %sStreamMessagesRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = GetMessagesRequestValidationError{} +var _ error = StreamMessagesRequestValidationError{} var _ interface { Field() string @@ -375,46 +346,68 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = GetMessagesRequestValidationError{} +} = StreamMessagesRequestValidationError{} -// Validate checks the field values on GetMessagesResponse with the rules +// Validate checks the field values on StreamMessagesResponse with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *GetMessagesResponse) Validate() error { +func (m *StreamMessagesResponse) Validate() error { if m == nil { return nil } - // no validation rules for Result + switch m.Type.(type) { - if len(m.GetMessages()) > 100 { - return GetMessagesResponseValidationError{ - field: "Messages", - reason: "value must contain no more than 100 item(s)", + case *StreamMessagesResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } } - } - for idx, item := range m.GetMessages() { - _, _ = idx, item + case *StreamMessagesResponse_Error: - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetError()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return GetMessagesResponseValidationError{ - field: fmt.Sprintf("Messages[%v]", idx), + return StreamMessagesResponseValidationError{ + field: "Error", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamMessagesResponse_Messages: + + if v, ok := interface{}(m.GetMessages()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesResponseValidationError{ + field: "Messages", reason: "embedded message failed validation", cause: err, } } } + default: + return StreamMessagesResponseValidationError{ + field: "Type", + reason: "value is required", + } + } return nil } -// GetMessagesResponseValidationError is the validation error returned by -// GetMessagesResponse.Validate if the designated constraints aren't met. -type GetMessagesResponseValidationError struct { +// StreamMessagesResponseValidationError is the validation error returned by +// StreamMessagesResponse.Validate if the designated constraints aren't met. +type StreamMessagesResponseValidationError struct { field string reason string cause error @@ -422,24 +415,24 @@ type GetMessagesResponseValidationError struct { } // Field function returns field value. -func (e GetMessagesResponseValidationError) Field() string { return e.field } +func (e StreamMessagesResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e GetMessagesResponseValidationError) Reason() string { return e.reason } +func (e StreamMessagesResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e GetMessagesResponseValidationError) Cause() error { return e.cause } +func (e StreamMessagesResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e GetMessagesResponseValidationError) Key() bool { return e.key } +func (e StreamMessagesResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e GetMessagesResponseValidationError) ErrorName() string { - return "GetMessagesResponseValidationError" +func (e StreamMessagesResponseValidationError) ErrorName() string { + return "StreamMessagesResponseValidationError" } // Error satisfies the builtin error interface -func (e GetMessagesResponseValidationError) Error() string { +func (e StreamMessagesResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -451,14 +444,14 @@ func (e GetMessagesResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sGetMessagesResponse.%s: %s%s", + "invalid %sStreamMessagesResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = GetMessagesResponseValidationError{} +var _ error = StreamMessagesResponseValidationError{} var _ interface { Field() string @@ -466,73 +459,24 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = GetMessagesResponseValidationError{} +} = StreamMessagesResponseValidationError{} -// Validate checks the field values on OpenChatEventStream with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *OpenChatEventStream) Validate() error { +// Validate checks the field values on StreamError with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *StreamError) Validate() error { if m == nil { return nil } - if m.GetChatId() == nil { - return OpenChatEventStreamValidationError{ - field: "ChatId", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OpenChatEventStreamValidationError{ - field: "ChatId", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetOwner() == nil { - return OpenChatEventStreamValidationError{ - field: "Owner", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OpenChatEventStreamValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetSignature() == nil { - return OpenChatEventStreamValidationError{ - field: "Signature", - reason: "value is required", - } - } - - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OpenChatEventStreamValidationError{ - field: "Signature", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for Code return nil } -// OpenChatEventStreamValidationError is the validation error returned by -// OpenChatEventStream.Validate if the designated constraints aren't met. -type OpenChatEventStreamValidationError struct { +// StreamErrorValidationError is the validation error returned by +// StreamError.Validate if the designated constraints aren't met. +type StreamErrorValidationError struct { field string reason string cause error @@ -540,24 +484,22 @@ type OpenChatEventStreamValidationError struct { } // Field function returns field value. -func (e OpenChatEventStreamValidationError) Field() string { return e.field } +func (e StreamErrorValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e OpenChatEventStreamValidationError) Reason() string { return e.reason } +func (e StreamErrorValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e OpenChatEventStreamValidationError) Cause() error { return e.cause } +func (e StreamErrorValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e OpenChatEventStreamValidationError) Key() bool { return e.key } +func (e StreamErrorValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e OpenChatEventStreamValidationError) ErrorName() string { - return "OpenChatEventStreamValidationError" -} +func (e StreamErrorValidationError) ErrorName() string { return "StreamErrorValidationError" } // Error satisfies the builtin error interface -func (e OpenChatEventStreamValidationError) Error() string { +func (e StreamErrorValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -569,14 +511,14 @@ func (e OpenChatEventStreamValidationError) Error() string { } return fmt.Sprintf( - "invalid %sOpenChatEventStream.%s: %s%s", + "invalid %sStreamError.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = OpenChatEventStreamValidationError{} +var _ error = StreamErrorValidationError{} var _ interface { Field() string @@ -584,68 +526,75 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = OpenChatEventStreamValidationError{} +} = StreamErrorValidationError{} -// Validate checks the field values on ChatStreamEvent with the rules defined +// Validate checks the field values on GetChatsRequest with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. -func (m *ChatStreamEvent) Validate() error { +func (m *GetChatsRequest) Validate() error { if m == nil { return nil } - switch m.Type.(type) { - - case *ChatStreamEvent_Message: - - if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChatStreamEventValidationError{ - field: "Message", - reason: "embedded message failed validation", - cause: err, - } - } + if m.GetOwner() == nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "value is required", } + } - case *ChatStreamEvent_Pointer: - - if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChatStreamEventValidationError{ - field: "Pointer", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, } } + } - case *ChatStreamEvent_IsTyping: + if m.GetSignature() == nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } - if v, ok := interface{}(m.GetIsTyping()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChatStreamEventValidationError{ - field: "IsTyping", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, } } + } - default: - return ChatStreamEventValidationError{ - field: "Type", - reason: "value is required", + if m.GetPageSize() > 100 { + return GetChatsRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", } + } + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } } + // no validation rules for Direction + return nil } -// ChatStreamEventValidationError is the validation error returned by -// ChatStreamEvent.Validate if the designated constraints aren't met. -type ChatStreamEventValidationError struct { +// GetChatsRequestValidationError is the validation error returned by +// GetChatsRequest.Validate if the designated constraints aren't met. +type GetChatsRequestValidationError struct { field string reason string cause error @@ -653,22 +602,22 @@ type ChatStreamEventValidationError struct { } // Field function returns field value. -func (e ChatStreamEventValidationError) Field() string { return e.field } +func (e GetChatsRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatStreamEventValidationError) Reason() string { return e.reason } +func (e GetChatsRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatStreamEventValidationError) Cause() error { return e.cause } +func (e GetChatsRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatStreamEventValidationError) Key() bool { return e.key } +func (e GetChatsRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatStreamEventValidationError) ErrorName() string { return "ChatStreamEventValidationError" } +func (e GetChatsRequestValidationError) ErrorName() string { return "GetChatsRequestValidationError" } // Error satisfies the builtin error interface -func (e ChatStreamEventValidationError) Error() string { +func (e GetChatsRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -680,14 +629,14 @@ func (e ChatStreamEventValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatStreamEvent.%s: %s%s", + "invalid %sGetChatsRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatStreamEventValidationError{} +var _ error = GetChatsRequestValidationError{} var _ interface { Field() string @@ -695,30 +644,32 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatStreamEventValidationError{} +} = GetChatsRequestValidationError{} -// Validate checks the field values on ChatStreamEventBatch with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *ChatStreamEventBatch) Validate() error { +// Validate checks the field values on GetChatsResponse with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *GetChatsResponse) Validate() error { if m == nil { return nil } - if l := len(m.GetEvents()); l < 1 || l > 1024 { - return ChatStreamEventBatchValidationError{ - field: "Events", - reason: "value must contain between 1 and 1024 items, inclusive", + // no validation rules for Result + + if len(m.GetChats()) > 100 { + return GetChatsResponseValidationError{ + field: "Chats", + reason: "value must contain no more than 100 item(s)", } } - for idx, item := range m.GetEvents() { + for idx, item := range m.GetChats() { _, _ = idx, item if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChatStreamEventBatchValidationError{ - field: fmt.Sprintf("Events[%v]", idx), + return GetChatsResponseValidationError{ + field: fmt.Sprintf("Chats[%v]", idx), reason: "embedded message failed validation", cause: err, } @@ -730,9 +681,9 @@ func (m *ChatStreamEventBatch) Validate() error { return nil } -// ChatStreamEventBatchValidationError is the validation error returned by -// ChatStreamEventBatch.Validate if the designated constraints aren't met. -type ChatStreamEventBatchValidationError struct { +// GetChatsResponseValidationError is the validation error returned by +// GetChatsResponse.Validate if the designated constraints aren't met. +type GetChatsResponseValidationError struct { field string reason string cause error @@ -740,24 +691,22 @@ type ChatStreamEventBatchValidationError struct { } // Field function returns field value. -func (e ChatStreamEventBatchValidationError) Field() string { return e.field } +func (e GetChatsResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChatStreamEventBatchValidationError) Reason() string { return e.reason } +func (e GetChatsResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChatStreamEventBatchValidationError) Cause() error { return e.cause } +func (e GetChatsResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChatStreamEventBatchValidationError) Key() bool { return e.key } +func (e GetChatsResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChatStreamEventBatchValidationError) ErrorName() string { - return "ChatStreamEventBatchValidationError" -} +func (e GetChatsResponseValidationError) ErrorName() string { return "GetChatsResponseValidationError" } // Error satisfies the builtin error interface -func (e ChatStreamEventBatchValidationError) Error() string { +func (e GetChatsResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -769,14 +718,14 @@ func (e ChatStreamEventBatchValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChatStreamEventBatch.%s: %s%s", + "invalid %sGetChatsResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChatStreamEventBatchValidationError{} +var _ error = GetChatsResponseValidationError{} var _ interface { Field() string @@ -784,125 +733,92 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChatStreamEventBatchValidationError{} +} = GetChatsResponseValidationError{} -// Validate checks the field values on ChatStreamEventError with the rules +// Validate checks the field values on GetMessagesRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *ChatStreamEventError) Validate() error { +func (m *GetMessagesRequest) Validate() error { if m == nil { return nil } - // no validation rules for Code - - return nil -} - -// ChatStreamEventErrorValidationError is the validation error returned by -// ChatStreamEventError.Validate if the designated constraints aren't met. -type ChatStreamEventErrorValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ChatStreamEventErrorValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ChatStreamEventErrorValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ChatStreamEventErrorValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ChatStreamEventErrorValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ChatStreamEventErrorValidationError) ErrorName() string { - return "ChatStreamEventErrorValidationError" -} + if m.GetChatId() == nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } -// Error satisfies the builtin error interface -func (e ChatStreamEventErrorValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } } - key := "" - if e.key { - key = "key for " + if m.GetOwner() == nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "value is required", + } } - return fmt.Sprintf( - "invalid %sChatStreamEventError.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ChatStreamEventErrorValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ChatStreamEventErrorValidationError{} - -// Validate checks the field values on StreamChatEventsRequest with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *StreamChatEventsRequest) Validate() error { - if m == nil { - return nil - } - - switch m.Type.(type) { - - case *StreamChatEventsRequest_OpenStream: - - if v, ok := interface{}(m.GetOpenStream()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StreamChatEventsRequestValidationError{ - field: "OpenStream", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, } } + } - case *StreamChatEventsRequest_Pong: + if m.GetSignature() == nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } - if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StreamChatEventsRequestValidationError{ - field: "Pong", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, } } + } - default: - return StreamChatEventsRequestValidationError{ - field: "Type", - reason: "value is required", + if m.GetPageSize() > 100 { + return GetMessagesRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", } + } + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } } + // no validation rules for Direction + return nil } -// StreamChatEventsRequestValidationError is the validation error returned by -// StreamChatEventsRequest.Validate if the designated constraints aren't met. -type StreamChatEventsRequestValidationError struct { +// GetMessagesRequestValidationError is the validation error returned by +// GetMessagesRequest.Validate if the designated constraints aren't met. +type GetMessagesRequestValidationError struct { field string reason string cause error @@ -910,24 +826,24 @@ type StreamChatEventsRequestValidationError struct { } // Field function returns field value. -func (e StreamChatEventsRequestValidationError) Field() string { return e.field } +func (e GetMessagesRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } +func (e GetMessagesRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } +func (e GetMessagesRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } +func (e GetMessagesRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e StreamChatEventsRequestValidationError) ErrorName() string { - return "StreamChatEventsRequestValidationError" +func (e GetMessagesRequestValidationError) ErrorName() string { + return "GetMessagesRequestValidationError" } // Error satisfies the builtin error interface -func (e StreamChatEventsRequestValidationError) Error() string { +func (e GetMessagesRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -939,14 +855,14 @@ func (e StreamChatEventsRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sStreamChatEventsRequest.%s: %s%s", + "invalid %sGetMessagesRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = StreamChatEventsRequestValidationError{} +var _ error = GetMessagesRequestValidationError{} var _ interface { Field() string @@ -954,68 +870,46 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = StreamChatEventsRequestValidationError{} +} = GetMessagesRequestValidationError{} -// Validate checks the field values on StreamChatEventsResponse with the rules +// Validate checks the field values on GetMessagesResponse with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *StreamChatEventsResponse) Validate() error { +func (m *GetMessagesResponse) Validate() error { if m == nil { return nil } - switch m.Type.(type) { - - case *StreamChatEventsResponse_Events: - - if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StreamChatEventsResponseValidationError{ - field: "Events", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *StreamChatEventsResponse_Ping: + // no validation rules for Result - if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return StreamChatEventsResponseValidationError{ - field: "Ping", - reason: "embedded message failed validation", - cause: err, - } - } + if len(m.GetMessages()) > 100 { + return GetMessagesResponseValidationError{ + field: "Messages", + reason: "value must contain no more than 100 item(s)", } + } - case *StreamChatEventsResponse_Error: + for idx, item := range m.GetMessages() { + _, _ = idx, item - if v, ok := interface{}(m.GetError()).(interface{ Validate() error }); ok { + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return StreamChatEventsResponseValidationError{ - field: "Error", + return GetMessagesResponseValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - default: - return StreamChatEventsResponseValidationError{ - field: "Type", - reason: "value is required", - } - } return nil } -// StreamChatEventsResponseValidationError is the validation error returned by -// StreamChatEventsResponse.Validate if the designated constraints aren't met. -type StreamChatEventsResponseValidationError struct { +// GetMessagesResponseValidationError is the validation error returned by +// GetMessagesResponse.Validate if the designated constraints aren't met. +type GetMessagesResponseValidationError struct { field string reason string cause error @@ -1023,24 +917,24 @@ type StreamChatEventsResponseValidationError struct { } // Field function returns field value. -func (e StreamChatEventsResponseValidationError) Field() string { return e.field } +func (e GetMessagesResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } +func (e GetMessagesResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } +func (e GetMessagesResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } +func (e GetMessagesResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e StreamChatEventsResponseValidationError) ErrorName() string { - return "StreamChatEventsResponseValidationError" +func (e GetMessagesResponseValidationError) ErrorName() string { + return "GetMessagesResponseValidationError" } // Error satisfies the builtin error interface -func (e StreamChatEventsResponseValidationError) Error() string { +func (e GetMessagesResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1052,14 +946,14 @@ func (e StreamChatEventsResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sStreamChatEventsResponse.%s: %s%s", + "invalid %sGetMessagesResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = StreamChatEventsResponseValidationError{} +var _ error = GetMessagesResponseValidationError{} var _ interface { Field() string @@ -1067,7 +961,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = StreamChatEventsResponseValidationError{} +} = GetMessagesResponseValidationError{} // Validate checks the field values on StartChatRequest with the rules defined // in the proto definition for this message. If any rules are violated, an @@ -2792,53 +2686,565 @@ func (m *Pointer) Validate() error { return nil } - if _, ok := _Pointer_Type_NotInLookup[m.GetType()]; ok { - return PointerValidationError{ - field: "Type", - reason: "value must not be in list [0]", - } - } - - if m.GetValue() == nil { - return PointerValidationError{ - field: "Value", + if _, ok := _Pointer_Type_NotInLookup[m.GetType()]; ok { + return PointerValidationError{ + field: "Type", + reason: "value must not be in list [0]", + } + } + + if m.GetValue() == nil { + return PointerValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return PointerValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PointerValidationError is the validation error returned by Pointer.Validate +// if the designated constraints aren't met. +type PointerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PointerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PointerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PointerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PointerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PointerValidationError) ErrorName() string { return "PointerValidationError" } + +// Error satisfies the builtin error interface +func (e PointerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPointer.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PointerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PointerValidationError{} + +var _Pointer_Type_NotInLookup = map[PointerType]struct{}{ + 0: {}, +} + +// Validate checks the field values on Content with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Content) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *Content_Text: + + if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Text", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_Localized: + + if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Localized", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ExchangeData: + + if v, ok := interface{}(m.GetExchangeData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ExchangeData", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_NaclBox: + + if v, ok := interface{}(m.GetNaclBox()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "NaclBox", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ContentValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ContentValidationError is the validation error returned by Content.Validate +// if the designated constraints aren't met. +type ContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ContentValidationError) ErrorName() string { return "ContentValidationError" } + +// Error satisfies the builtin error interface +func (e ContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ContentValidationError{} + +// Validate checks the field values on TextContent with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TextContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { + return TextContentValidationError{ + field: "Text", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// TextContentValidationError is the validation error returned by +// TextContent.Validate if the designated constraints aren't met. +type TextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } + +// Error satisfies the builtin error interface +func (e TextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TextContentValidationError{} + +// Validate checks the field values on LocalizedContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *LocalizedContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { + return LocalizedContentValidationError{ + field: "KeyOrText", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// LocalizedContentValidationError is the validation error returned by +// LocalizedContent.Validate if the designated constraints aren't met. +type LocalizedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LocalizedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LocalizedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LocalizedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LocalizedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } + +// Error satisfies the builtin error interface +func (e LocalizedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLocalizedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LocalizedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LocalizedContentValidationError{} + +// Validate checks the field values on ExchangeDataContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ExchangeDataContent) Validate() error { + if m == nil { + return nil + } + + if _, ok := _ExchangeDataContent_Verb_NotInLookup[m.GetVerb()]; ok { + return ExchangeDataContentValidationError{ + field: "Verb", + reason: "value must not be in list [0]", + } + } + + switch m.ExchangeData.(type) { + + case *ExchangeDataContent_Exact: + + if v, ok := interface{}(m.GetExact()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Exact", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Partial: + + if v, ok := interface{}(m.GetPartial()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Partial", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "ExchangeData", + reason: "value is required", + } + + } + + switch m.Reference.(type) { + + case *ExchangeDataContent_Intent: + + if v, ok := interface{}(m.GetIntent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Intent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Signature: + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "Reference", + reason: "value is required", + } + + } + + return nil +} + +// ExchangeDataContentValidationError is the validation error returned by +// ExchangeDataContent.Validate if the designated constraints aren't met. +type ExchangeDataContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExchangeDataContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExchangeDataContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExchangeDataContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExchangeDataContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExchangeDataContentValidationError) ErrorName() string { + return "ExchangeDataContentValidationError" +} + +// Error satisfies the builtin error interface +func (e ExchangeDataContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExchangeDataContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExchangeDataContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExchangeDataContentValidationError{} + +var _ExchangeDataContent_Verb_NotInLookup = map[ExchangeDataContent_Verb]struct{}{ + 0: {}, +} + +// Validate checks the field values on NaclBoxEncryptedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *NaclBoxEncryptedContent) Validate() error { + if m == nil { + return nil + } + + if m.GetPeerPublicKey() == nil { + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", reason: "value is required", } } - if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetPeerPublicKey()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return PointerValidationError{ - field: "Value", + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", reason: "embedded message failed validation", cause: err, } } } - if m.GetMemberId() == nil { - return PointerValidationError{ - field: "MemberId", - reason: "value is required", + if len(m.GetNonce()) != 24 { + return NaclBoxEncryptedContentValidationError{ + field: "Nonce", + reason: "value length must be 24 bytes", } } - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PointerValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, - } + if l := len(m.GetEncryptedPayload()); l < 1 || l > 1024 { + return NaclBoxEncryptedContentValidationError{ + field: "EncryptedPayload", + reason: "value length must be between 1 and 1024 bytes, inclusive", } } return nil } -// PointerValidationError is the validation error returned by Pointer.Validate -// if the designated constraints aren't met. -type PointerValidationError struct { +// NaclBoxEncryptedContentValidationError is the validation error returned by +// NaclBoxEncryptedContent.Validate if the designated constraints aren't met. +type NaclBoxEncryptedContentValidationError struct { field string reason string cause error @@ -2846,22 +3252,24 @@ type PointerValidationError struct { } // Field function returns field value. -func (e PointerValidationError) Field() string { return e.field } +func (e NaclBoxEncryptedContentValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e PointerValidationError) Reason() string { return e.reason } +func (e NaclBoxEncryptedContentValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e PointerValidationError) Cause() error { return e.cause } +func (e NaclBoxEncryptedContentValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e PointerValidationError) Key() bool { return e.key } +func (e NaclBoxEncryptedContentValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e PointerValidationError) ErrorName() string { return "PointerValidationError" } +func (e NaclBoxEncryptedContentValidationError) ErrorName() string { + return "NaclBoxEncryptedContentValidationError" +} // Error satisfies the builtin error interface -func (e PointerValidationError) Error() string { +func (e NaclBoxEncryptedContentValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2873,14 +3281,14 @@ func (e PointerValidationError) Error() string { } return fmt.Sprintf( - "invalid %sPointer.%s: %s%s", + "invalid %sNaclBoxEncryptedContent.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = PointerValidationError{} +var _ error = NaclBoxEncryptedContentValidationError{} var _ interface { Field() string @@ -2888,83 +3296,28 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = PointerValidationError{} - -var _Pointer_Type_NotInLookup = map[PointerType]struct{}{ - 0: {}, -} +} = NaclBoxEncryptedContentValidationError{} -// Validate checks the field values on Content with the rules defined in the +// Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. -func (m *Content) Validate() error { +func (m *Cursor) Validate() error { if m == nil { return nil } - switch m.Type.(type) { - - case *Content_Text: - - if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "Text", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *Content_Localized: - - if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "Localized", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *Content_ExchangeData: - - if v, ok := interface{}(m.GetExchangeData()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "ExchangeData", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *Content_NaclBox: - - if v, ok := interface{}(m.GetNaclBox()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ContentValidationError{ - field: "NaclBox", - reason: "embedded message failed validation", - cause: err, - } - } - } - - default: - return ContentValidationError{ - field: "Type", - reason: "value is required", + if l := len(m.GetValue()); l < 8 || l > 32 { + return CursorValidationError{ + field: "Value", + reason: "value length must be between 8 and 32 bytes, inclusive", } - } return nil } -// ContentValidationError is the validation error returned by Content.Validate -// if the designated constraints aren't met. -type ContentValidationError struct { +// CursorValidationError is the validation error returned by Cursor.Validate if +// the designated constraints aren't met. +type CursorValidationError struct { field string reason string cause error @@ -2972,22 +3325,22 @@ type ContentValidationError struct { } // Field function returns field value. -func (e ContentValidationError) Field() string { return e.field } +func (e CursorValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ContentValidationError) Reason() string { return e.reason } +func (e CursorValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ContentValidationError) Cause() error { return e.cause } +func (e CursorValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ContentValidationError) Key() bool { return e.key } +func (e CursorValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ContentValidationError) ErrorName() string { return "ContentValidationError" } +func (e CursorValidationError) ErrorName() string { return "CursorValidationError" } // Error satisfies the builtin error interface -func (e ContentValidationError) Error() string { +func (e CursorValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2999,14 +3352,14 @@ func (e ContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sContent.%s: %s%s", + "invalid %sCursor.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ContentValidationError{} +var _ error = CursorValidationError{} var _ interface { Field() string @@ -3014,29 +3367,40 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ContentValidationError{} +} = CursorValidationError{} -// Validate checks the field values on TextContent with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *TextContent) Validate() error { +// Validate checks the field values on IsTyping with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *IsTyping) Validate() error { if m == nil { return nil } - if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { - return TextContentValidationError{ - field: "Text", - reason: "value length must be between 1 and 1024 runes, inclusive", + if m.GetMemberId() == nil { + return IsTypingValidationError{ + field: "MemberId", + reason: "value is required", } } + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return IsTypingValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsTyping + return nil } -// TextContentValidationError is the validation error returned by -// TextContent.Validate if the designated constraints aren't met. -type TextContentValidationError struct { +// IsTypingValidationError is the validation error returned by +// IsTyping.Validate if the designated constraints aren't met. +type IsTypingValidationError struct { field string reason string cause error @@ -3044,22 +3408,22 @@ type TextContentValidationError struct { } // Field function returns field value. -func (e TextContentValidationError) Field() string { return e.field } +func (e IsTypingValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e TextContentValidationError) Reason() string { return e.reason } +func (e IsTypingValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e TextContentValidationError) Cause() error { return e.cause } +func (e IsTypingValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e TextContentValidationError) Key() bool { return e.key } +func (e IsTypingValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } +func (e IsTypingValidationError) ErrorName() string { return "IsTypingValidationError" } // Error satisfies the builtin error interface -func (e TextContentValidationError) Error() string { +func (e IsTypingValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3071,14 +3435,14 @@ func (e TextContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sTextContent.%s: %s%s", + "invalid %sIsTyping.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = TextContentValidationError{} +var _ error = IsTypingValidationError{} var _ interface { Field() string @@ -3086,29 +3450,57 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = TextContentValidationError{} +} = IsTypingValidationError{} -// Validate checks the field values on LocalizedContent with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *LocalizedContent) Validate() error { +// Validate checks the field values on StreamChatEventsRequest_Params with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest_Params) Validate() error { if m == nil { return nil } - if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { - return LocalizedContentValidationError{ - field: "KeyOrText", - reason: "value length must be between 1 and 1024 runes, inclusive", + if m.GetOwner() == nil { + return StreamChatEventsRequest_ParamsValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequest_ParamsValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return StreamChatEventsRequest_ParamsValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequest_ParamsValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } } } return nil } -// LocalizedContentValidationError is the validation error returned by -// LocalizedContent.Validate if the designated constraints aren't met. -type LocalizedContentValidationError struct { +// StreamChatEventsRequest_ParamsValidationError is the validation error +// returned by StreamChatEventsRequest_Params.Validate if the designated +// constraints aren't met. +type StreamChatEventsRequest_ParamsValidationError struct { field string reason string cause error @@ -3116,22 +3508,24 @@ type LocalizedContentValidationError struct { } // Field function returns field value. -func (e LocalizedContentValidationError) Field() string { return e.field } +func (e StreamChatEventsRequest_ParamsValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LocalizedContentValidationError) Reason() string { return e.reason } +func (e StreamChatEventsRequest_ParamsValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LocalizedContentValidationError) Cause() error { return e.cause } +func (e StreamChatEventsRequest_ParamsValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LocalizedContentValidationError) Key() bool { return e.key } +func (e StreamChatEventsRequest_ParamsValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } +func (e StreamChatEventsRequest_ParamsValidationError) ErrorName() string { + return "StreamChatEventsRequest_ParamsValidationError" +} // Error satisfies the builtin error interface -func (e LocalizedContentValidationError) Error() string { +func (e StreamChatEventsRequest_ParamsValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3143,14 +3537,14 @@ func (e LocalizedContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLocalizedContent.%s: %s%s", + "invalid %sStreamChatEventsRequest_Params.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LocalizedContentValidationError{} +var _ error = StreamChatEventsRequest_ParamsValidationError{} var _ interface { Field() string @@ -3158,97 +3552,45 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LocalizedContentValidationError{} +} = StreamChatEventsRequest_ParamsValidationError{} -// Validate checks the field values on ExchangeDataContent with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *ExchangeDataContent) Validate() error { +// Validate checks the field values on StreamChatEventsResponse_EventBatch with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *StreamChatEventsResponse_EventBatch) Validate() error { if m == nil { return nil } - if _, ok := _ExchangeDataContent_Verb_NotInLookup[m.GetVerb()]; ok { - return ExchangeDataContentValidationError{ - field: "Verb", - reason: "value must not be in list [0]", - } - } - - switch m.ExchangeData.(type) { - - case *ExchangeDataContent_Exact: - - if v, ok := interface{}(m.GetExact()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ExchangeDataContentValidationError{ - field: "Exact", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *ExchangeDataContent_Partial: - - if v, ok := interface{}(m.GetPartial()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ExchangeDataContentValidationError{ - field: "Partial", - reason: "embedded message failed validation", - cause: err, - } - } - } - - default: - return ExchangeDataContentValidationError{ - field: "ExchangeData", - reason: "value is required", + if l := len(m.GetUpdates()); l < 1 || l > 1024 { + return StreamChatEventsResponse_EventBatchValidationError{ + field: "Updates", + reason: "value must contain between 1 and 1024 items, inclusive", } - } - switch m.Reference.(type) { - - case *ExchangeDataContent_Intent: - - if v, ok := interface{}(m.GetIntent()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ExchangeDataContentValidationError{ - field: "Intent", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *ExchangeDataContent_Signature: + for idx, item := range m.GetUpdates() { + _, _ = idx, item - if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ExchangeDataContentValidationError{ - field: "Signature", + return StreamChatEventsResponse_EventBatchValidationError{ + field: fmt.Sprintf("Updates[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - default: - return ExchangeDataContentValidationError{ - field: "Reference", - reason: "value is required", - } - } return nil } -// ExchangeDataContentValidationError is the validation error returned by -// ExchangeDataContent.Validate if the designated constraints aren't met. -type ExchangeDataContentValidationError struct { +// StreamChatEventsResponse_EventBatchValidationError is the validation error +// returned by StreamChatEventsResponse_EventBatch.Validate if the designated +// constraints aren't met. +type StreamChatEventsResponse_EventBatchValidationError struct { field string reason string cause error @@ -3256,24 +3598,24 @@ type ExchangeDataContentValidationError struct { } // Field function returns field value. -func (e ExchangeDataContentValidationError) Field() string { return e.field } +func (e StreamChatEventsResponse_EventBatchValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ExchangeDataContentValidationError) Reason() string { return e.reason } +func (e StreamChatEventsResponse_EventBatchValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ExchangeDataContentValidationError) Cause() error { return e.cause } +func (e StreamChatEventsResponse_EventBatchValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ExchangeDataContentValidationError) Key() bool { return e.key } +func (e StreamChatEventsResponse_EventBatchValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ExchangeDataContentValidationError) ErrorName() string { - return "ExchangeDataContentValidationError" +func (e StreamChatEventsResponse_EventBatchValidationError) ErrorName() string { + return "StreamChatEventsResponse_EventBatchValidationError" } // Error satisfies the builtin error interface -func (e ExchangeDataContentValidationError) Error() string { +func (e StreamChatEventsResponse_EventBatchValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3285,14 +3627,14 @@ func (e ExchangeDataContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sExchangeDataContent.%s: %s%s", + "invalid %sStreamChatEventsResponse_EventBatch.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ExchangeDataContentValidationError{} +var _ error = StreamChatEventsResponse_EventBatchValidationError{} var _ interface { Field() string @@ -3300,57 +3642,70 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ExchangeDataContentValidationError{} - -var _ExchangeDataContent_Verb_NotInLookup = map[ExchangeDataContent_Verb]struct{}{ - 0: {}, -} +} = StreamChatEventsResponse_EventBatchValidationError{} -// Validate checks the field values on NaclBoxEncryptedContent with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *NaclBoxEncryptedContent) Validate() error { +// Validate checks the field values on StreamChatEventsResponse_ChatUpdate with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *StreamChatEventsResponse_ChatUpdate) Validate() error { if m == nil { return nil } - if m.GetPeerPublicKey() == nil { - return NaclBoxEncryptedContentValidationError{ - field: "PeerPublicKey", + if m.GetChatId() == nil { + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "ChatId", reason: "value is required", } } - if v, ok := interface{}(m.GetPeerPublicKey()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return NaclBoxEncryptedContentValidationError{ - field: "PeerPublicKey", + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "ChatId", reason: "embedded message failed validation", cause: err, } } } - if len(m.GetNonce()) != 24 { - return NaclBoxEncryptedContentValidationError{ - field: "Nonce", - reason: "value length must be 24 bytes", + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } } } - if l := len(m.GetEncryptedPayload()); l < 1 || l > 1024 { - return NaclBoxEncryptedContentValidationError{ - field: "EncryptedPayload", - reason: "value length must be between 1 and 1024 bytes, inclusive", + if v, ok := interface{}(m.GetLastMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "LastMessage", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetIsTyping()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "IsTyping", + reason: "embedded message failed validation", + cause: err, + } } } return nil } -// NaclBoxEncryptedContentValidationError is the validation error returned by -// NaclBoxEncryptedContent.Validate if the designated constraints aren't met. -type NaclBoxEncryptedContentValidationError struct { +// StreamChatEventsResponse_ChatUpdateValidationError is the validation error +// returned by StreamChatEventsResponse_ChatUpdate.Validate if the designated +// constraints aren't met. +type StreamChatEventsResponse_ChatUpdateValidationError struct { field string reason string cause error @@ -3358,24 +3713,24 @@ type NaclBoxEncryptedContentValidationError struct { } // Field function returns field value. -func (e NaclBoxEncryptedContentValidationError) Field() string { return e.field } +func (e StreamChatEventsResponse_ChatUpdateValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e NaclBoxEncryptedContentValidationError) Reason() string { return e.reason } +func (e StreamChatEventsResponse_ChatUpdateValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e NaclBoxEncryptedContentValidationError) Cause() error { return e.cause } +func (e StreamChatEventsResponse_ChatUpdateValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e NaclBoxEncryptedContentValidationError) Key() bool { return e.key } +func (e StreamChatEventsResponse_ChatUpdateValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e NaclBoxEncryptedContentValidationError) ErrorName() string { - return "NaclBoxEncryptedContentValidationError" +func (e StreamChatEventsResponse_ChatUpdateValidationError) ErrorName() string { + return "StreamChatEventsResponse_ChatUpdateValidationError" } // Error satisfies the builtin error interface -func (e NaclBoxEncryptedContentValidationError) Error() string { +func (e StreamChatEventsResponse_ChatUpdateValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3387,14 +3742,14 @@ func (e NaclBoxEncryptedContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sNaclBoxEncryptedContent.%s: %s%s", + "invalid %sStreamChatEventsResponse_ChatUpdate.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = NaclBoxEncryptedContentValidationError{} +var _ error = StreamChatEventsResponse_ChatUpdateValidationError{} var _ interface { Field() string @@ -3402,28 +3757,93 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = NaclBoxEncryptedContentValidationError{} +} = StreamChatEventsResponse_ChatUpdateValidationError{} -// Validate checks the field values on Cursor with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Cursor) Validate() error { +// Validate checks the field values on StreamMessagesRequest_Params with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamMessagesRequest_Params) Validate() error { if m == nil { return nil } - if l := len(m.GetValue()); l < 8 || l > 32 { - return CursorValidationError{ - field: "Value", - reason: "value length must be between 8 and 32 bytes, inclusive", + if m.GetOwner() == nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetChatId() == nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.Resume.(type) { + + case *StreamMessagesRequest_Params_LastKnownMessageId: + + if v, ok := interface{}(m.GetLastKnownMessageId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesRequest_ParamsValidationError{ + field: "LastKnownMessageId", + reason: "embedded message failed validation", + cause: err, + } + } } + + case *StreamMessagesRequest_Params_LatestOnly: + // no validation rules for LatestOnly + } return nil } -// CursorValidationError is the validation error returned by Cursor.Validate if -// the designated constraints aren't met. -type CursorValidationError struct { +// StreamMessagesRequest_ParamsValidationError is the validation error returned +// by StreamMessagesRequest_Params.Validate if the designated constraints +// aren't met. +type StreamMessagesRequest_ParamsValidationError struct { field string reason string cause error @@ -3431,22 +3851,24 @@ type CursorValidationError struct { } // Field function returns field value. -func (e CursorValidationError) Field() string { return e.field } +func (e StreamMessagesRequest_ParamsValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e CursorValidationError) Reason() string { return e.reason } +func (e StreamMessagesRequest_ParamsValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e CursorValidationError) Cause() error { return e.cause } +func (e StreamMessagesRequest_ParamsValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e CursorValidationError) Key() bool { return e.key } +func (e StreamMessagesRequest_ParamsValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e CursorValidationError) ErrorName() string { return "CursorValidationError" } +func (e StreamMessagesRequest_ParamsValidationError) ErrorName() string { + return "StreamMessagesRequest_ParamsValidationError" +} // Error satisfies the builtin error interface -func (e CursorValidationError) Error() string { +func (e StreamMessagesRequest_ParamsValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3458,14 +3880,14 @@ func (e CursorValidationError) Error() string { } return fmt.Sprintf( - "invalid %sCursor.%s: %s%s", + "invalid %sStreamMessagesRequest_Params.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = CursorValidationError{} +var _ error = StreamMessagesRequest_ParamsValidationError{} var _ interface { Field() string @@ -3473,40 +3895,45 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = CursorValidationError{} +} = StreamMessagesRequest_ParamsValidationError{} -// Validate checks the field values on IsTyping with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *IsTyping) Validate() error { +// Validate checks the field values on StreamMessagesResponse_MessageBatch with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *StreamMessagesResponse_MessageBatch) Validate() error { if m == nil { return nil } - if m.GetMemberId() == nil { - return IsTypingValidationError{ - field: "MemberId", - reason: "value is required", + if l := len(m.GetMessages()); l < 1 || l > 1024 { + return StreamMessagesResponse_MessageBatchValidationError{ + field: "Messages", + reason: "value must contain between 1 and 1024 items, inclusive", } } - if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return IsTypingValidationError{ - field: "MemberId", - reason: "embedded message failed validation", - cause: err, + for idx, item := range m.GetMessages() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamMessagesResponse_MessageBatchValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } } } - } - // no validation rules for IsTyping + } return nil } -// IsTypingValidationError is the validation error returned by -// IsTyping.Validate if the designated constraints aren't met. -type IsTypingValidationError struct { +// StreamMessagesResponse_MessageBatchValidationError is the validation error +// returned by StreamMessagesResponse_MessageBatch.Validate if the designated +// constraints aren't met. +type StreamMessagesResponse_MessageBatchValidationError struct { field string reason string cause error @@ -3514,22 +3941,24 @@ type IsTypingValidationError struct { } // Field function returns field value. -func (e IsTypingValidationError) Field() string { return e.field } +func (e StreamMessagesResponse_MessageBatchValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e IsTypingValidationError) Reason() string { return e.reason } +func (e StreamMessagesResponse_MessageBatchValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e IsTypingValidationError) Cause() error { return e.cause } +func (e StreamMessagesResponse_MessageBatchValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e IsTypingValidationError) Key() bool { return e.key } +func (e StreamMessagesResponse_MessageBatchValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e IsTypingValidationError) ErrorName() string { return "IsTypingValidationError" } +func (e StreamMessagesResponse_MessageBatchValidationError) ErrorName() string { + return "StreamMessagesResponse_MessageBatchValidationError" +} // Error satisfies the builtin error interface -func (e IsTypingValidationError) Error() string { +func (e StreamMessagesResponse_MessageBatchValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3541,14 +3970,14 @@ func (e IsTypingValidationError) Error() string { } return fmt.Sprintf( - "invalid %sIsTyping.%s: %s%s", + "invalid %sStreamMessagesResponse_MessageBatch.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = IsTypingValidationError{} +var _ error = StreamMessagesResponse_MessageBatchValidationError{} var _ interface { Field() string @@ -3556,4 +3985,4 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = IsTypingValidationError{} +} = StreamMessagesResponse_MessageBatchValidationError{} diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go index d15ac10..4206d86 100644 --- a/generated/go/chat/v2/chat_service_grpc.pb.go +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -22,42 +22,33 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ChatClient interface { + // StreamChatEvents streams all chat events for the requesting user. + // + // Chat events will include any update to a chat, including: + // 1. Metadata changes. + // 2. Membership changes. + // 3. Latest messages. + // + // The server will optionally filter out some events depending on load + // and chat type. For example, Broadcast chats will not receive latest + // messages. + // + // Clients should use GetMessages to backfill in any historical messages + // for a chat. It should be sufficient to rely on ChatEvents for some types + // of chats, but using StreamMessages provides a guarentee of message events + // for all chats. + StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + // StreamMessages streams all messages/message states for the requested chat. + // + // By default, streams will resume messages from the last acknowledged delivery + // pointer of the caller. This can be overridden by setting 'last_message', + // 'latest_only'. + StreamMessages(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamMessagesClient, error) // GetChats gets the set of chats for an owner account using a paged API. // This RPC is aware of all identities tied to the owner account. GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) // GetMessages gets the set of messages for a chat member using a paged API GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) - // StreamChatEvents streams chat events in real-time. Chat events include - // messages, pointer updates, etc. - // - // The streaming protocol is follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. If an error is encoutered, a ChatStreamEventError message will be - // returned by server and the stream will be closed. - // 3. Server will immediately flush initial chat state. - // 4. New chat events will be pushed to the stream in real time as they - // are received. - // - // This RPC supports a keepalive protocol as follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. Upon stream initialization, server begins the keepalive protocol. - // 3. Server sends a ping to the client. - // 4. Client responds with a pong as fast as possible, making note of - // the delay for when to expect the next ping. - // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated - // or is deemed to be unhealthy. - // - // Client notes: - // - Client should be careful to process events async, so any responses to pings are - // not delayed. - // - Clients should implement a reasonable backoff strategy upon continued timeout - // failures. - // - Clients that abuse pong messages may have their streams terminated by server. - // - // At any point in the stream, server will respond with events in real time as - // they are observed. Events sent over the stream should not affect the ping/pong - // protocol timings. - StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) @@ -81,24 +72,6 @@ func NewChatClient(cc grpc.ClientConnInterface) ChatClient { return &chatClient{cc} } -func (c *chatClient) GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) { - out := new(GetChatsResponse) - err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetChats", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *chatClient) GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) { - out := new(GetMessagesResponse) - err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetMessages", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *chatClient) StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) { stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/code.chat.v2.Chat/StreamChatEvents", opts...) if err != nil { @@ -130,6 +103,55 @@ func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { return m, nil } +func (c *chatClient) StreamMessages(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamMessagesClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[1], "/code.chat.v2.Chat/StreamMessages", opts...) + if err != nil { + return nil, err + } + x := &chatStreamMessagesClient{stream} + return x, nil +} + +type Chat_StreamMessagesClient interface { + Send(*StreamMessagesRequest) error + Recv() (*StreamMessagesResponse, error) + grpc.ClientStream +} + +type chatStreamMessagesClient struct { + grpc.ClientStream +} + +func (x *chatStreamMessagesClient) Send(m *StreamMessagesRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *chatStreamMessagesClient) Recv() (*StreamMessagesResponse, error) { + m := new(StreamMessagesResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *chatClient) GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) { + out := new(GetChatsResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetChats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) { + out := new(GetMessagesResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetMessages", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *chatClient) StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) { out := new(StartChatResponse) err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/StartChat", in, out, opts...) @@ -179,42 +201,33 @@ func (c *chatClient) NotifyIsTyping(ctx context.Context, in *NotifyIsTypingReque // All implementations must embed UnimplementedChatServer // for forward compatibility type ChatServer interface { + // StreamChatEvents streams all chat events for the requesting user. + // + // Chat events will include any update to a chat, including: + // 1. Metadata changes. + // 2. Membership changes. + // 3. Latest messages. + // + // The server will optionally filter out some events depending on load + // and chat type. For example, Broadcast chats will not receive latest + // messages. + // + // Clients should use GetMessages to backfill in any historical messages + // for a chat. It should be sufficient to rely on ChatEvents for some types + // of chats, but using StreamMessages provides a guarentee of message events + // for all chats. + StreamChatEvents(Chat_StreamChatEventsServer) error + // StreamMessages streams all messages/message states for the requested chat. + // + // By default, streams will resume messages from the last acknowledged delivery + // pointer of the caller. This can be overridden by setting 'last_message', + // 'latest_only'. + StreamMessages(Chat_StreamMessagesServer) error // GetChats gets the set of chats for an owner account using a paged API. // This RPC is aware of all identities tied to the owner account. GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) // GetMessages gets the set of messages for a chat member using a paged API GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) - // StreamChatEvents streams chat events in real-time. Chat events include - // messages, pointer updates, etc. - // - // The streaming protocol is follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. If an error is encoutered, a ChatStreamEventError message will be - // returned by server and the stream will be closed. - // 3. Server will immediately flush initial chat state. - // 4. New chat events will be pushed to the stream in real time as they - // are received. - // - // This RPC supports a keepalive protocol as follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. Upon stream initialization, server begins the keepalive protocol. - // 3. Server sends a ping to the client. - // 4. Client responds with a pong as fast as possible, making note of - // the delay for when to expect the next ping. - // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated - // or is deemed to be unhealthy. - // - // Client notes: - // - Client should be careful to process events async, so any responses to pings are - // not delayed. - // - Clients should implement a reasonable backoff strategy upon continued timeout - // failures. - // - Clients that abuse pong messages may have their streams terminated by server. - // - // At any point in the stream, server will respond with events in real time as - // they are observed. Events sent over the stream should not affect the ping/pong - // protocol timings. - StreamChatEvents(Chat_StreamChatEventsServer) error // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) @@ -235,15 +248,18 @@ type ChatServer interface { type UnimplementedChatServer struct { } +func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") +} +func (UnimplementedChatServer) StreamMessages(Chat_StreamMessagesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamMessages not implemented") +} func (UnimplementedChatServer) GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChats not implemented") } func (UnimplementedChatServer) GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMessages not implemented") } -func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { - return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") -} func (UnimplementedChatServer) StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StartChat not implemented") } @@ -272,6 +288,58 @@ func RegisterChatServer(s grpc.ServiceRegistrar, srv ChatServer) { s.RegisterService(&Chat_ServiceDesc, srv) } +func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) +} + +type Chat_StreamChatEventsServer interface { + Send(*StreamChatEventsResponse) error + Recv() (*StreamChatEventsRequest, error) + grpc.ServerStream +} + +type chatStreamChatEventsServer struct { + grpc.ServerStream +} + +func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { + m := new(StreamChatEventsRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Chat_StreamMessages_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamMessages(&chatStreamMessagesServer{stream}) +} + +type Chat_StreamMessagesServer interface { + Send(*StreamMessagesResponse) error + Recv() (*StreamMessagesRequest, error) + grpc.ServerStream +} + +type chatStreamMessagesServer struct { + grpc.ServerStream +} + +func (x *chatStreamMessagesServer) Send(m *StreamMessagesResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamMessagesServer) Recv() (*StreamMessagesRequest, error) { + m := new(StreamMessagesRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func _Chat_GetChats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetChatsRequest) if err := dec(in); err != nil { @@ -308,32 +376,6 @@ func _Chat_GetMessages_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) -} - -type Chat_StreamChatEventsServer interface { - Send(*StreamChatEventsResponse) error - Recv() (*StreamChatEventsRequest, error) - grpc.ServerStream -} - -type chatStreamChatEventsServer struct { - grpc.ServerStream -} - -func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { - m := new(StreamChatEventsRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - func _Chat_StartChat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(StartChatRequest) if err := dec(in); err != nil { @@ -467,6 +509,12 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "StreamMessages", + Handler: _Chat_StreamMessages_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, Metadata: "chat/v2/chat_service.proto", } diff --git a/generated/protobuf-es/badge/v1/index.ts b/generated/protobuf-es/badge/v1/index.ts index 1c507b5..754a733 100644 --- a/generated/protobuf-es/badge/v1/index.ts +++ b/generated/protobuf-es/badge/v1/index.ts @@ -1,2 +1,2 @@ -export * from './badge_service_connect'; export * from './badge_service_pb'; +export * from './badge_service_connect'; diff --git a/generated/protobuf-es/chat/v1/index.ts b/generated/protobuf-es/chat/v1/index.ts index d60d4f9..5f226a8 100644 --- a/generated/protobuf-es/chat/v1/index.ts +++ b/generated/protobuf-es/chat/v1/index.ts @@ -1,2 +1,2 @@ -export * from './chat_service_connect'; export * from './chat_service_pb'; +export * from './chat_service_connect'; diff --git a/generated/protobuf-es/chat/v2/chat_service_connect.ts b/generated/protobuf-es/chat/v2/chat_service_connect.ts index 7213dce..1d918e7 100644 --- a/generated/protobuf-es/chat/v2/chat_service_connect.ts +++ b/generated/protobuf-es/chat/v2/chat_service_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, NotifyIsTypingRequest, NotifyIsTypingResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, StartChatRequest, StartChatResponse, StreamChatEventsRequest, StreamChatEventsResponse } from "./chat_service_pb"; +import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, NotifyIsTypingRequest, NotifyIsTypingResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, StartChatRequest, StartChatResponse, StreamChatEventsRequest, StreamChatEventsResponse, StreamMessagesRequest, StreamMessagesResponse } from "./chat_service_pb"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -12,6 +12,46 @@ import { MethodKind } from "@bufbuild/protobuf"; export const Chat = { typeName: "code.chat.v2.Chat", methods: { + /** + * StreamChatEvents streams all chat events for the requesting user. + * + * Chat events will include any update to a chat, including: + * 1. Metadata changes. + * 2. Membership changes. + * 3. Latest messages. + * + * The server will optionally filter out some events depending on load + * and chat type. For example, Broadcast chats will not receive latest + * messages. + * + * Clients should use GetMessages to backfill in any historical messages + * for a chat. It should be sufficient to rely on ChatEvents for some types + * of chats, but using StreamMessages provides a guarentee of message events + * for all chats. + * + * @generated from rpc code.chat.v2.Chat.StreamChatEvents + */ + streamChatEvents: { + name: "StreamChatEvents", + I: StreamChatEventsRequest, + O: StreamChatEventsResponse, + kind: MethodKind.BiDiStreaming, + }, + /** + * StreamMessages streams all messages/message states for the requested chat. + * + * By default, streams will resume messages from the last acknowledged delivery + * pointer of the caller. This can be overridden by setting 'last_message', + * 'latest_only'. + * + * @generated from rpc code.chat.v2.Chat.StreamMessages + */ + streamMessages: { + name: "StreamMessages", + I: StreamMessagesRequest, + O: StreamMessagesResponse, + kind: MethodKind.BiDiStreaming, + }, /** * GetChats gets the set of chats for an owner account using a paged API. * This RPC is aware of all identities tied to the owner account. @@ -35,46 +75,6 @@ export const Chat = { O: GetMessagesResponse, kind: MethodKind.Unary, }, - /** - * StreamChatEvents streams chat events in real-time. Chat events include - * messages, pointer updates, etc. - * - * The streaming protocol is follows: - * 1. Client initiates a stream by sending an OpenChatEventStream message. - * 2. If an error is encoutered, a ChatStreamEventError message will be - * returned by server and the stream will be closed. - * 3. Server will immediately flush initial chat state. - * 4. New chat events will be pushed to the stream in real time as they - * are received. - * - * This RPC supports a keepalive protocol as follows: - * 1. Client initiates a stream by sending an OpenChatEventStream message. - * 2. Upon stream initialization, server begins the keepalive protocol. - * 3. Server sends a ping to the client. - * 4. Client responds with a pong as fast as possible, making note of - * the delay for when to expect the next ping. - * 5. Steps 3 and 4 are repeated until the stream is explicitly terminated - * or is deemed to be unhealthy. - * - * Client notes: - * * Client should be careful to process events async, so any responses to pings are - * not delayed. - * * Clients should implement a reasonable backoff strategy upon continued timeout - * failures. - * * Clients that abuse pong messages may have their streams terminated by server. - * - * At any point in the stream, server will respond with events in real time as - * they are observed. Events sent over the stream should not affect the ping/pong - * protocol timings. - * - * @generated from rpc code.chat.v2.Chat.StreamChatEvents - */ - streamChatEvents: { - name: "StreamChatEvents", - I: StreamChatEventsRequest, - O: StreamChatEventsResponse, - kind: MethodKind.BiDiStreaming, - }, /** * StartChat starts a chat. The RPC call is idempotent and will use existing * chats whenever applicable within the context of message routing. diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index 117b03a..c4593b2 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -84,6 +84,522 @@ proto3.util.setEnumType(PointerType, "code.chat.v2.PointerType", [ { no: 3, name: "READ" }, ]); +/** + * @generated from message code.chat.v2.StreamChatEventsRequest + */ +export class StreamChatEventsRequest extends Message$1 { + /** + * @generated from oneof code.chat.v2.StreamChatEventsRequest.type + */ + type: { + /** + * @generated from field: code.chat.v2.StreamChatEventsRequest.Params params = 1; + */ + value: StreamChatEventsRequest_Params; + case: "params"; + } | { + /** + * @generated from field: code.common.v1.ClientPong pong = 2; + */ + value: ClientPong; + case: "pong"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamChatEventsRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "params", kind: "message", T: StreamChatEventsRequest_Params, oneof: "type" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsRequest | PlainMessage | undefined, b: StreamChatEventsRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsRequest, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamChatEventsRequest.Params + */ +export class StreamChatEventsRequest_Params extends Message$1 { + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 1; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 2; + */ + signature?: Signature; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamChatEventsRequest.Params"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 2, name: "signature", kind: "message", T: Signature }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsRequest_Params { + return new StreamChatEventsRequest_Params().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsRequest_Params { + return new StreamChatEventsRequest_Params().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsRequest_Params { + return new StreamChatEventsRequest_Params().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsRequest_Params | PlainMessage | undefined, b: StreamChatEventsRequest_Params | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsRequest_Params, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamChatEventsResponse + */ +export class StreamChatEventsResponse extends Message$1 { + /** + * @generated from oneof code.chat.v2.StreamChatEventsResponse.type + */ + type: { + /** + * @generated from field: code.common.v1.ServerPing ping = 1; + */ + value: ServerPing; + case: "ping"; + } | { + /** + * @generated from field: code.chat.v2.StreamError error = 2; + */ + value: StreamError; + case: "error"; + } | { + /** + * @generated from field: code.chat.v2.StreamChatEventsResponse.EventBatch events = 3; + */ + value: StreamChatEventsResponse_EventBatch; + case: "events"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamChatEventsResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "ping", kind: "message", T: ServerPing, oneof: "type" }, + { no: 2, name: "error", kind: "message", T: StreamError, oneof: "type" }, + { no: 3, name: "events", kind: "message", T: StreamChatEventsResponse_EventBatch, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsResponse | PlainMessage | undefined, b: StreamChatEventsResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsResponse, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamChatEventsResponse.EventBatch + */ +export class StreamChatEventsResponse_EventBatch extends Message$1 { + /** + * @generated from field: repeated code.chat.v2.StreamChatEventsResponse.ChatUpdate updates = 1; + */ + updates: StreamChatEventsResponse_ChatUpdate[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamChatEventsResponse.EventBatch"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "updates", kind: "message", T: StreamChatEventsResponse_ChatUpdate, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse_EventBatch { + return new StreamChatEventsResponse_EventBatch().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse_EventBatch { + return new StreamChatEventsResponse_EventBatch().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse_EventBatch { + return new StreamChatEventsResponse_EventBatch().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsResponse_EventBatch | PlainMessage | undefined, b: StreamChatEventsResponse_EventBatch | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsResponse_EventBatch, a, b); + } +} + +/** + * ChatUpdate contains a set of updates for a given chat id. + * + * Only the relevant fields will be set on update. On initial + * stream open, all fields will be set, however. + * + * @generated from message code.chat.v2.StreamChatEventsResponse.ChatUpdate + */ +export class StreamChatEventsResponse_ChatUpdate extends Message$1 { + /** + * @generated from field: code.common.v1.ChatId chat_id = 1; + */ + chatId?: ChatId; + + /** + * @generated from field: code.chat.v2.Metadata metadata = 2; + */ + metadata?: Metadata; + + /** + * @generated from field: code.chat.v2.Message last_message = 3; + */ + lastMessage?: Message; + + /** + * @generated from field: code.chat.v2.IsTyping is_typing = 4; + */ + isTyping?: IsTyping; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamChatEventsResponse.ChatUpdate"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "chat_id", kind: "message", T: ChatId }, + { no: 2, name: "metadata", kind: "message", T: Metadata }, + { no: 3, name: "last_message", kind: "message", T: Message }, + { no: 4, name: "is_typing", kind: "message", T: IsTyping }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse_ChatUpdate { + return new StreamChatEventsResponse_ChatUpdate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse_ChatUpdate { + return new StreamChatEventsResponse_ChatUpdate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse_ChatUpdate { + return new StreamChatEventsResponse_ChatUpdate().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsResponse_ChatUpdate | PlainMessage | undefined, b: StreamChatEventsResponse_ChatUpdate | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsResponse_ChatUpdate, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamMessagesRequest + */ +export class StreamMessagesRequest extends Message$1 { + /** + * @generated from oneof code.chat.v2.StreamMessagesRequest.type + */ + type: { + /** + * @generated from field: code.chat.v2.StreamMessagesRequest.Params params = 1; + */ + value: StreamMessagesRequest_Params; + case: "params"; + } | { + /** + * @generated from field: code.common.v1.ClientPong pong = 2; + */ + value: ClientPong; + case: "pong"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamMessagesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "params", kind: "message", T: StreamMessagesRequest_Params, oneof: "type" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamMessagesRequest { + return new StreamMessagesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamMessagesRequest { + return new StreamMessagesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamMessagesRequest { + return new StreamMessagesRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamMessagesRequest | PlainMessage | undefined, b: StreamMessagesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamMessagesRequest, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamMessagesRequest.Params + */ +export class StreamMessagesRequest_Params extends Message$1 { + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 1; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 2; + */ + signature?: Signature; + + /** + * @generated from field: code.common.v1.ChatId chat_id = 3; + */ + chatId?: ChatId; + + /** + * Callers may optionally specify a resume mode other than last delivery pointer. + * + * @generated from oneof code.chat.v2.StreamMessagesRequest.Params.resume + */ + resume: { + /** + * Server will return all messages newer than this message id. + * + * @generated from field: code.chat.v2.MessageId last_known_message_id = 4; + */ + value: MessageId; + case: "lastKnownMessageId"; + } | { + /** + * Server will not load any previous messages. + * + * @generated from field: bool latest_only = 5; + */ + value: boolean; + case: "latestOnly"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamMessagesRequest.Params"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 2, name: "signature", kind: "message", T: Signature }, + { no: 3, name: "chat_id", kind: "message", T: ChatId }, + { no: 4, name: "last_known_message_id", kind: "message", T: MessageId, oneof: "resume" }, + { no: 5, name: "latest_only", kind: "scalar", T: 8 /* ScalarType.BOOL */, oneof: "resume" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamMessagesRequest_Params { + return new StreamMessagesRequest_Params().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamMessagesRequest_Params { + return new StreamMessagesRequest_Params().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamMessagesRequest_Params { + return new StreamMessagesRequest_Params().fromJsonString(jsonString, options); + } + + static equals(a: StreamMessagesRequest_Params | PlainMessage | undefined, b: StreamMessagesRequest_Params | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamMessagesRequest_Params, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamMessagesResponse + */ +export class StreamMessagesResponse extends Message$1 { + /** + * @generated from oneof code.chat.v2.StreamMessagesResponse.type + */ + type: { + /** + * @generated from field: code.common.v1.ServerPing ping = 1; + */ + value: ServerPing; + case: "ping"; + } | { + /** + * @generated from field: code.chat.v2.StreamError error = 2; + */ + value: StreamError; + case: "error"; + } | { + /** + * @generated from field: code.chat.v2.StreamMessagesResponse.MessageBatch messages = 3; + */ + value: StreamMessagesResponse_MessageBatch; + case: "messages"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamMessagesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "ping", kind: "message", T: ServerPing, oneof: "type" }, + { no: 2, name: "error", kind: "message", T: StreamError, oneof: "type" }, + { no: 3, name: "messages", kind: "message", T: StreamMessagesResponse_MessageBatch, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamMessagesResponse { + return new StreamMessagesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamMessagesResponse { + return new StreamMessagesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamMessagesResponse { + return new StreamMessagesResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamMessagesResponse | PlainMessage | undefined, b: StreamMessagesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamMessagesResponse, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamMessagesResponse.MessageBatch + */ +export class StreamMessagesResponse_MessageBatch extends Message$1 { + /** + * @generated from field: repeated code.chat.v2.Message messages = 1; + */ + messages: Message[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamMessagesResponse.MessageBatch"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "messages", kind: "message", T: Message, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamMessagesResponse_MessageBatch { + return new StreamMessagesResponse_MessageBatch().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamMessagesResponse_MessageBatch { + return new StreamMessagesResponse_MessageBatch().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamMessagesResponse_MessageBatch { + return new StreamMessagesResponse_MessageBatch().fromJsonString(jsonString, options); + } + + static equals(a: StreamMessagesResponse_MessageBatch | PlainMessage | undefined, b: StreamMessagesResponse_MessageBatch | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamMessagesResponse_MessageBatch, a, b); + } +} + +/** + * @generated from message code.chat.v2.StreamError + */ +export class StreamError extends Message$1 { + /** + * @generated from field: code.chat.v2.StreamError.Code code = 1; + */ + code = StreamError_Code.DENIED; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v2.StreamError"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "code", kind: "enum", T: proto3.getEnumType(StreamError_Code) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamError { + return new StreamError().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamError { + return new StreamError().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamError { + return new StreamError().fromJsonString(jsonString, options); + } + + static equals(a: StreamError | PlainMessage | undefined, b: StreamError | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamError, a, b); + } +} + +/** + * @generated from enum code.chat.v2.StreamError.Code + */ +export enum StreamError_Code { + /** + * @generated from enum value: DENIED = 0; + */ + DENIED = 0, +} +// Retrieve enum metadata with: proto3.getEnumType(StreamError_Code) +proto3.util.setEnumType(StreamError_Code, "code.chat.v2.StreamError.Code", [ + { no: 0, name: "DENIED" }, +]); + /** * @generated from message code.chat.v2.GetChatsRequest */ @@ -372,307 +888,6 @@ proto3.util.setEnumType(GetMessagesResponse_Result, "code.chat.v2.GetMessagesRes { no: 1, name: "DENIED" }, ]); -/** - * @generated from message code.chat.v2.OpenChatEventStream - */ -export class OpenChatEventStream extends Message$1 { - /** - * @generated from field: code.common.v1.ChatId chat_id = 1; - */ - chatId?: ChatId; - - /** - * @generated from field: code.common.v1.SolanaAccountId owner = 2; - */ - owner?: SolanaAccountId; - - /** - * @generated from field: code.common.v1.Signature signature = 3; - */ - signature?: Signature; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.OpenChatEventStream"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "owner", kind: "message", T: SolanaAccountId }, - { no: 3, name: "signature", kind: "message", T: Signature }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): OpenChatEventStream { - return new OpenChatEventStream().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): OpenChatEventStream { - return new OpenChatEventStream().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): OpenChatEventStream { - return new OpenChatEventStream().fromJsonString(jsonString, options); - } - - static equals(a: OpenChatEventStream | PlainMessage | undefined, b: OpenChatEventStream | PlainMessage | undefined): boolean { - return proto3.util.equals(OpenChatEventStream, a, b); - } -} - -/** - * @generated from message code.chat.v2.ChatStreamEvent - */ -export class ChatStreamEvent extends Message$1 { - /** - * @generated from oneof code.chat.v2.ChatStreamEvent.type - */ - type: { - /** - * @generated from field: code.chat.v2.Message message = 1; - */ - value: Message; - case: "message"; - } | { - /** - * @generated from field: code.chat.v2.Pointer pointer = 2; - */ - value: Pointer; - case: "pointer"; - } | { - /** - * @generated from field: code.chat.v2.IsTyping is_typing = 3; - */ - value: IsTyping; - case: "isTyping"; - } | { case: undefined; value?: undefined } = { case: undefined }; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatStreamEvent"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "message", kind: "message", T: Message, oneof: "type" }, - { no: 2, name: "pointer", kind: "message", T: Pointer, oneof: "type" }, - { no: 3, name: "is_typing", kind: "message", T: IsTyping, oneof: "type" }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEvent { - return new ChatStreamEvent().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEvent { - return new ChatStreamEvent().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ChatStreamEvent { - return new ChatStreamEvent().fromJsonString(jsonString, options); - } - - static equals(a: ChatStreamEvent | PlainMessage | undefined, b: ChatStreamEvent | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatStreamEvent, a, b); - } -} - -/** - * @generated from message code.chat.v2.ChatStreamEventBatch - */ -export class ChatStreamEventBatch extends Message$1 { - /** - * @generated from field: repeated code.chat.v2.ChatStreamEvent events = 2; - */ - events: ChatStreamEvent[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatStreamEventBatch"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 2, name: "events", kind: "message", T: ChatStreamEvent, repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEventBatch { - return new ChatStreamEventBatch().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEventBatch { - return new ChatStreamEventBatch().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ChatStreamEventBatch { - return new ChatStreamEventBatch().fromJsonString(jsonString, options); - } - - static equals(a: ChatStreamEventBatch | PlainMessage | undefined, b: ChatStreamEventBatch | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatStreamEventBatch, a, b); - } -} - -/** - * @generated from message code.chat.v2.ChatStreamEventError - */ -export class ChatStreamEventError extends Message$1 { - /** - * @generated from field: code.chat.v2.ChatStreamEventError.Code code = 1; - */ - code = ChatStreamEventError_Code.DENIED; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.ChatStreamEventError"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "code", kind: "enum", T: proto3.getEnumType(ChatStreamEventError_Code) }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEventError { - return new ChatStreamEventError().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEventError { - return new ChatStreamEventError().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ChatStreamEventError { - return new ChatStreamEventError().fromJsonString(jsonString, options); - } - - static equals(a: ChatStreamEventError | PlainMessage | undefined, b: ChatStreamEventError | PlainMessage | undefined): boolean { - return proto3.util.equals(ChatStreamEventError, a, b); - } -} - -/** - * @generated from enum code.chat.v2.ChatStreamEventError.Code - */ -export enum ChatStreamEventError_Code { - /** - * @generated from enum value: DENIED = 0; - */ - DENIED = 0, -} -// Retrieve enum metadata with: proto3.getEnumType(ChatStreamEventError_Code) -proto3.util.setEnumType(ChatStreamEventError_Code, "code.chat.v2.ChatStreamEventError.Code", [ - { no: 0, name: "DENIED" }, -]); - -/** - * @generated from message code.chat.v2.StreamChatEventsRequest - */ -export class StreamChatEventsRequest extends Message$1 { - /** - * @generated from oneof code.chat.v2.StreamChatEventsRequest.type - */ - type: { - /** - * @generated from field: code.chat.v2.OpenChatEventStream open_stream = 1; - */ - value: OpenChatEventStream; - case: "openStream"; - } | { - /** - * @generated from field: code.common.v1.ClientPong pong = 2; - */ - value: ClientPong; - case: "pong"; - } | { case: undefined; value?: undefined } = { case: undefined }; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.StreamChatEventsRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "open_stream", kind: "message", T: OpenChatEventStream, oneof: "type" }, - { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "type" }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsRequest { - return new StreamChatEventsRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsRequest { - return new StreamChatEventsRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsRequest { - return new StreamChatEventsRequest().fromJsonString(jsonString, options); - } - - static equals(a: StreamChatEventsRequest | PlainMessage | undefined, b: StreamChatEventsRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(StreamChatEventsRequest, a, b); - } -} - -/** - * @generated from message code.chat.v2.StreamChatEventsResponse - */ -export class StreamChatEventsResponse extends Message$1 { - /** - * @generated from oneof code.chat.v2.StreamChatEventsResponse.type - */ - type: { - /** - * @generated from field: code.chat.v2.ChatStreamEventBatch events = 1; - */ - value: ChatStreamEventBatch; - case: "events"; - } | { - /** - * @generated from field: code.common.v1.ServerPing ping = 2; - */ - value: ServerPing; - case: "ping"; - } | { - /** - * @generated from field: code.chat.v2.ChatStreamEventError error = 3; - */ - value: ChatStreamEventError; - case: "error"; - } | { case: undefined; value?: undefined } = { case: undefined }; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v2.StreamChatEventsResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "events", kind: "message", T: ChatStreamEventBatch, oneof: "type" }, - { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "type" }, - { no: 3, name: "error", kind: "message", T: ChatStreamEventError, oneof: "type" }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse { - return new StreamChatEventsResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse { - return new StreamChatEventsResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse { - return new StreamChatEventsResponse().fromJsonString(jsonString, options); - } - - static equals(a: StreamChatEventsResponse | PlainMessage | undefined, b: StreamChatEventsResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(StreamChatEventsResponse, a, b); - } -} - /** * @generated from message code.chat.v2.StartChatRequest */ diff --git a/generated/protobuf-es/chat/v2/index.ts b/generated/protobuf-es/chat/v2/index.ts index d60d4f9..5f226a8 100644 --- a/generated/protobuf-es/chat/v2/index.ts +++ b/generated/protobuf-es/chat/v2/index.ts @@ -1,2 +1,2 @@ -export * from './chat_service_connect'; export * from './chat_service_pb'; +export * from './chat_service_connect'; diff --git a/generated/protobuf-es/index.ts b/generated/protobuf-es/index.ts index 5c96ce9..f8ea694 100644 --- a/generated/protobuf-es/index.ts +++ b/generated/protobuf-es/index.ts @@ -1,15 +1,15 @@ -export * as Transaction from './transaction/v2'; -export * as Micropayment from './micropayment/v1'; -export * as Contact from './contact/v1'; +export * as Messaging from './messaging/v1'; +export * as Currency from './currency/v1'; +export * as Device from './device/v1'; +export * as Push from './push/v1'; +export * as Invite from './invite/v2'; export * as Chat from './chat/v1'; export * as Chat from './chat/v2'; -export * as User from './user/v1'; -export * as Invite from './invite/v2'; -export * as Push from './push/v1'; -export * as Common from './common/v1'; -export * as Phone from './phone/v1'; -export * as Device from './device/v1'; export * as Account from './account/v1'; -export * as Messaging from './messaging/v1'; -export * as Currency from './currency/v1'; +export * as Contact from './contact/v1'; +export * as Phone from './phone/v1'; +export * as User from './user/v1'; +export * as Micropayment from './micropayment/v1'; export * as Badge from './badge/v1'; +export * as Common from './common/v1'; +export * as Transaction from './transaction/v2'; diff --git a/generated/protobuf-es/invite/v2/index.ts b/generated/protobuf-es/invite/v2/index.ts index 94bdb0c..cb00645 100644 --- a/generated/protobuf-es/invite/v2/index.ts +++ b/generated/protobuf-es/invite/v2/index.ts @@ -1,2 +1,2 @@ -export * from './invite_service_pb'; export * from './invite_service_connect'; +export * from './invite_service_pb'; diff --git a/generated/protobuf-es/transaction/v2/index.ts b/generated/protobuf-es/transaction/v2/index.ts index 6bcfb5b..c205d7c 100644 --- a/generated/protobuf-es/transaction/v2/index.ts +++ b/generated/protobuf-es/transaction/v2/index.ts @@ -1,2 +1,2 @@ -export * from './transaction_service_pb'; export * from './transaction_service_connect'; +export * from './transaction_service_pb'; diff --git a/generated/protobuf-es/user/v1/index.ts b/generated/protobuf-es/user/v1/index.ts index 7c77b0d..da75451 100644 --- a/generated/protobuf-es/user/v1/index.ts +++ b/generated/protobuf-es/user/v1/index.ts @@ -1,2 +1,2 @@ -export * from './identity_service_pb'; export * from './identity_service_connect'; +export * from './identity_service_pb'; diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index b974a4f..e1b9640 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -12,6 +12,30 @@ import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; service Chat { + // StreamChatEvents streams all chat events for the requesting user. + // + // Chat events will include any update to a chat, including: + // 1. Metadata changes. + // 2. Membership changes. + // 3. Latest messages. + // + // The server will optionally filter out some events depending on load + // and chat type. For example, Broadcast chats will not receive latest + // messages. + // + // Clients should use GetMessages to backfill in any historical messages + // for a chat. It should be sufficient to rely on ChatEvents for some types + // of chats, but using StreamMessages provides a guarentee of message events + // for all chats. + rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + + // StreamMessages streams all messages/message states for the requested chat. + // + // By default, streams will resume messages from the last acknowledged delivery + // pointer of the caller. This can be overridden by setting 'last_message', + // 'latest_only'. + rpc StreamMessages(stream StreamMessagesRequest) returns (stream StreamMessagesResponse); + // GetChats gets the set of chats for an owner account using a paged API. // This RPC is aware of all identities tied to the owner account. rpc GetChats(GetChatsRequest) returns (GetChatsResponse); @@ -19,38 +43,6 @@ service Chat { // GetMessages gets the set of messages for a chat member using a paged API rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse); - // StreamChatEvents streams chat events in real-time. Chat events include - // messages, pointer updates, etc. - // - // The streaming protocol is follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. If an error is encoutered, a ChatStreamEventError message will be - // returned by server and the stream will be closed. - // 3. Server will immediately flush initial chat state. - // 4. New chat events will be pushed to the stream in real time as they - // are received. - // - // This RPC supports a keepalive protocol as follows: - // 1. Client initiates a stream by sending an OpenChatEventStream message. - // 2. Upon stream initialization, server begins the keepalive protocol. - // 3. Server sends a ping to the client. - // 4. Client responds with a pong as fast as possible, making note of - // the delay for when to expect the next ping. - // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated - // or is deemed to be unhealthy. - // - // Client notes: - // * Client should be careful to process events async, so any responses to pings are - // not delayed. - // * Clients should implement a reasonable backoff strategy upon continued timeout - // failures. - // * Clients that abuse pong messages may have their streams terminated by server. - // - // At any point in the stream, server will respond with events in real time as - // they are observed. Events sent over the stream should not affect the ping/pong - // protocol timings. - rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); - // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. rpc StartChat(StartChatRequest) returns (StartChatResponse); @@ -70,6 +62,97 @@ service Chat { rpc NotifyIsTyping(NotifyIsTypingRequest) returns (NotifyIsTypingResponse); } +message StreamChatEventsRequest { + oneof type { + option (validate.required) = true; + + Params params = 1; + common.v1.ClientPong pong = 2; + } + + message Params { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + } +} + +message StreamChatEventsResponse { + oneof type { + option (validate.required) = true; + + common.v1.ServerPing ping = 1; + StreamError error = 2; + EventBatch events = 3; + } + + message EventBatch { + repeated ChatUpdate updates = 1 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 // Arbitrary + }]; + } + + // ChatUpdate contains a set of updates for a given chat id. + // + // Only the relevant fields will be set on update. On initial + // stream open, all fields will be set, however. + message ChatUpdate { + common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; + + Metadata metadata = 2; + Message last_message = 3; + IsTyping is_typing = 4; + } +} + +message StreamMessagesRequest { + oneof type { + option (validate.required) = true; + + Params params = 1; + common.v1.ClientPong pong = 2; + } + + message Params { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + common.v1.ChatId chat_id = 3 [(validate.rules).message.required = true]; + + // Callers may optionally specify a resume mode other than last delivery pointer. + oneof resume { + // Server will return all messages newer than this message id. + MessageId last_known_message_id = 4; + + // Server will not load any previous messages. + bool latest_only = 5; + } + } +} + +message StreamMessagesResponse { + oneof type { + option (validate.required) = true; + + common.v1.ServerPing ping = 1; + StreamError error = 2; + MessageBatch messages = 3; + } + + message MessageBatch { + repeated Message messages = 1 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 // Arbitrary + }]; + } +} + +message StreamError { + Code code = 1; + enum Code { + DENIED = 0; + } +} + message GetChatsRequest { common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; @@ -129,57 +212,6 @@ message GetMessagesResponse { }]; } -message OpenChatEventStream { - common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; - - common.v1.SolanaAccountId owner = 2 [(validate.rules).message.required = true]; - - common.v1.Signature signature = 3 [(validate.rules).message.required = true]; -} - -message ChatStreamEvent { - oneof type { - option (validate.required) = true; - - Message message = 1; - Pointer pointer = 2; - IsTyping is_typing = 3; - } -} - -message ChatStreamEventBatch { - repeated ChatStreamEvent events = 2 [(validate.rules).repeated = { - min_items: 1 - max_items: 1024 - }]; -} - -message ChatStreamEventError { - Code code = 1; - enum Code { - DENIED = 0; - } -} - -message StreamChatEventsRequest { - oneof type { - option (validate.required) = true; - - OpenChatEventStream open_stream = 1; - common.v1.ClientPong pong = 2; - } -} - -message StreamChatEventsResponse { - oneof type { - option (validate.required) = true; - - ChatStreamEventBatch events = 1; - common.v1.ServerPing ping = 2; - ChatStreamEventError error = 3; - } -} - message StartChatRequest { common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; From 5dac31db232da87af273ead1d7ab0766154e3485 Mon Sep 17 00:00:00 2001 From: Mike Cheng Date: Thu, 10 Oct 2024 12:23:20 -0400 Subject: [PATCH 15/15] chat: add Pointer events to ChatEventStream --- generated/go/chat/v2/chat_service.pb.go | 1055 +++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 10 + .../protobuf-es/chat/v2/chat_service_pb.ts | 20 +- proto/chat/v2/chat_service.proto | 12 +- 4 files changed, 576 insertions(+), 521 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index c5cd32f..19890c6 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -3261,10 +3261,17 @@ type StreamChatEventsResponse_ChatUpdate struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` - LastMessage *Message `protobuf:"bytes,3,opt,name=last_message,json=lastMessage,proto3" json:"last_message,omitempty"` - IsTyping *IsTyping `protobuf:"bytes,4,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` + ChatId *v1.ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // metadata contains the latest (full) metadata of the chat. + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Message contains the last known message of the chat. + LastMessage *Message `protobuf:"bytes,3,opt,name=last_message,json=lastMessage,proto3" json:"last_message,omitempty"` + // Pointer contians the last known relevant pointer of the chat. + // where 'relevant' means "relevant to UI updates". For example, + // when a user has read the latest message. + Pointer *Pointer `protobuf:"bytes,4,opt,name=pointer,proto3" json:"pointer,omitempty"` + // IsTyping indicates whether or not someone is typing in the group. + IsTyping *IsTyping `protobuf:"bytes,5,opt,name=is_typing,json=isTyping,proto3" json:"is_typing,omitempty"` } func (x *StreamChatEventsResponse_ChatUpdate) Reset() { @@ -3320,6 +3327,13 @@ func (x *StreamChatEventsResponse_ChatUpdate) GetLastMessage() *Message { return nil } +func (x *StreamChatEventsResponse_ChatUpdate) GetPointer() *Pointer { + if x != nil { + return x.Pointer + } + return nil +} + func (x *StreamChatEventsResponse_ChatUpdate) GetIsTyping() *IsTyping { if x != nil { return x.IsTyping @@ -3515,7 +3529,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0d, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xb4, 0x04, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe5, 0x04, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, @@ -3535,7 +3549,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x07, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0xec, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x9d, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, @@ -3547,136 +3561,70 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x33, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x69, 0x73, 0x54, - 0x79, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe9, 0x03, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, - 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x1a, 0xc8, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x48, 0x00, - 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0b, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6f, - 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, - 0x65, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xaf, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, - 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x4f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, - 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x22, 0x55, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, - 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, - 0x10, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, - 0x74, 0x73, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x99, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, - 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, - 0x22, 0xb6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, - 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, + 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x12, 0x33, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x69, 0x73, + 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xe9, 0x03, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, + 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x1a, 0xc8, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x48, + 0x00, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0b, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, + 0x01, 0x22, 0xaf, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, + 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x4f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, + 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x22, 0x55, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, @@ -3685,126 +3633,116 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, 0x61, - 0x79, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, - 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x52, - 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x2a, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x6a, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, - 0x10, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, - 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x10, 0x02, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, - 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, + 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, + 0x43, 0x10, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, + 0x61, 0x74, 0x73, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, + 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x99, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x22, 0x92, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, - 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, - 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x86, - 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, - 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, 0x6f, + 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, + 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, + 0x01, 0x22, 0xb6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, + 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x77, 0x6f, 0x5f, 0x77, + 0x61, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x77, 0x6f, 0x57, 0x61, 0x79, + 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x2a, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x6a, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, + 0x0a, 0x10, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, + 0x54, 0x59, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x22, 0x98, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, + 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, @@ -3813,251 +3751,331 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, - 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, + 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, + 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, - 0x22, 0x2e, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0x86, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, + 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, + 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, + 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, + 0x01, 0x22, 0x2e, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x2d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0xe5, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x00, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, - 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, - 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, - 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x22, 0xdd, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, - 0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, - 0x66, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, - 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, - 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, 0x52, - 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, - 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, - 0x22, 0xc0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xe5, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x00, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x6d, 0x75, 0x74, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, + 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, + 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x22, 0xdd, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3f, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, + 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, - 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, + 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, + 0x73, 0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, + 0x6c, 0x66, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, + 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, 0xff, 0x01, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, + 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x72, 0x03, 0x18, + 0xff, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, + 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, + 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, + 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, + 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, + 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, + 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, + 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, + 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, - 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, - 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, - 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, - 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, - 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, - 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, - 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, - 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, - 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, - 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, - 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, - 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, - 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, - 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, - 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, - 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, - 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, - 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, - 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x2e, 0x0a, - 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, 0x2d, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, - 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, - 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, - 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xa0, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, - 0x74, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, - 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, - 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, - 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, - 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, - 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, + 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, + 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, + 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, + 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, + 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, + 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, + 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, + 0x12, 0x3f, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0x2e, + 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x01, 0x2a, 0x2d, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, + 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xa0, 0x06, 0x0a, 0x04, 0x43, 0x68, + 0x61, 0x74, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x0e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x49, 0x73, 0x54, 0x79, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4222,35 +4240,36 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 57, // 80: code.chat.v2.StreamChatEventsResponse.ChatUpdate.chat_id:type_name -> code.common.v1.ChatId 36, // 81: code.chat.v2.StreamChatEventsResponse.ChatUpdate.metadata:type_name -> code.chat.v2.Metadata 37, // 82: code.chat.v2.StreamChatEventsResponse.ChatUpdate.last_message:type_name -> code.chat.v2.Message - 47, // 83: code.chat.v2.StreamChatEventsResponse.ChatUpdate.is_typing:type_name -> code.chat.v2.IsTyping - 55, // 84: code.chat.v2.StreamMessagesRequest.Params.owner:type_name -> code.common.v1.SolanaAccountId - 56, // 85: code.chat.v2.StreamMessagesRequest.Params.signature:type_name -> code.common.v1.Signature - 57, // 86: code.chat.v2.StreamMessagesRequest.Params.chat_id:type_name -> code.common.v1.ChatId - 34, // 87: code.chat.v2.StreamMessagesRequest.Params.last_known_message_id:type_name -> code.chat.v2.MessageId - 37, // 88: code.chat.v2.StreamMessagesResponse.MessageBatch.messages:type_name -> code.chat.v2.Message - 14, // 89: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 16, // 90: code.chat.v2.Chat.StreamMessages:input_type -> code.chat.v2.StreamMessagesRequest - 19, // 91: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 21, // 92: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 23, // 93: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 26, // 94: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 28, // 95: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 30, // 96: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 32, // 97: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest - 15, // 98: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 17, // 99: code.chat.v2.Chat.StreamMessages:output_type -> code.chat.v2.StreamMessagesResponse - 20, // 100: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 22, // 101: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 25, // 102: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 27, // 103: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 29, // 104: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 31, // 105: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 33, // 106: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse - 98, // [98:107] is the sub-list for method output_type - 89, // [89:98] is the sub-list for method input_type - 89, // [89:89] is the sub-list for extension type_name - 89, // [89:89] is the sub-list for extension extendee - 0, // [0:89] is the sub-list for field type_name + 40, // 83: code.chat.v2.StreamChatEventsResponse.ChatUpdate.pointer:type_name -> code.chat.v2.Pointer + 47, // 84: code.chat.v2.StreamChatEventsResponse.ChatUpdate.is_typing:type_name -> code.chat.v2.IsTyping + 55, // 85: code.chat.v2.StreamMessagesRequest.Params.owner:type_name -> code.common.v1.SolanaAccountId + 56, // 86: code.chat.v2.StreamMessagesRequest.Params.signature:type_name -> code.common.v1.Signature + 57, // 87: code.chat.v2.StreamMessagesRequest.Params.chat_id:type_name -> code.common.v1.ChatId + 34, // 88: code.chat.v2.StreamMessagesRequest.Params.last_known_message_id:type_name -> code.chat.v2.MessageId + 37, // 89: code.chat.v2.StreamMessagesResponse.MessageBatch.messages:type_name -> code.chat.v2.Message + 14, // 90: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 16, // 91: code.chat.v2.Chat.StreamMessages:input_type -> code.chat.v2.StreamMessagesRequest + 19, // 92: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 21, // 93: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 94: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 26, // 95: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 28, // 96: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 30, // 97: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 32, // 98: code.chat.v2.Chat.NotifyIsTyping:input_type -> code.chat.v2.NotifyIsTypingRequest + 15, // 99: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 17, // 100: code.chat.v2.Chat.StreamMessages:output_type -> code.chat.v2.StreamMessagesResponse + 20, // 101: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 22, // 102: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 25, // 103: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 27, // 104: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 29, // 105: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 31, // 106: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 33, // 107: code.chat.v2.Chat.NotifyIsTyping:output_type -> code.chat.v2.NotifyIsTypingResponse + 99, // [99:108] is the sub-list for method output_type + 90, // [90:99] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 69f831d..67525f4 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -3689,6 +3689,16 @@ func (m *StreamChatEventsResponse_ChatUpdate) Validate() error { } } + if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponse_ChatUpdateValidationError{ + field: "Pointer", + reason: "embedded message failed validation", + cause: err, + } + } + } + if v, ok := interface{}(m.GetIsTyping()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return StreamChatEventsResponse_ChatUpdateValidationError{ diff --git a/generated/protobuf-es/chat/v2/chat_service_pb.ts b/generated/protobuf-es/chat/v2/chat_service_pb.ts index c4593b2..e56fe65 100644 --- a/generated/protobuf-es/chat/v2/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v2/chat_service_pb.ts @@ -286,17 +286,32 @@ export class StreamChatEventsResponse_ChatUpdate extends Message$1): StreamChatEventsResponse_ChatUpdate { diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index e1b9640..8c1c65f 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -99,9 +99,19 @@ message StreamChatEventsResponse { message ChatUpdate { common.v1.ChatId chat_id = 1 [(validate.rules).message.required = true]; + // metadata contains the latest (full) metadata of the chat. Metadata metadata = 2; + + // Message contains the last known message of the chat. Message last_message = 3; - IsTyping is_typing = 4; + + // Pointer contians the last known relevant pointer of the chat. + // where 'relevant' means "relevant to UI updates". For example, + // when a user has read the latest message. + Pointer pointer = 4; + + // IsTyping indicates whether or not someone is typing in the group. + IsTyping is_typing = 5; } }