diff --git a/api/proto/activity/v1/activity.pb.go b/api/proto/activity/v1/activity.pb.go index 97027647..0eeff0d6 100644 --- a/api/proto/activity/v1/activity.pb.go +++ b/api/proto/activity/v1/activity.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/activity/v1/activity.proto package activityv1 @@ -12,6 +12,7 @@ import ( v1 "hyapp.local/api/proto/events/room/v1" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,15 +24,14 @@ const ( // RequestMeta 是 activity-service 内部 RPC 的最小追踪元信息。 type RequestMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` + GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` + SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` - GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` - SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` - AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RequestMeta) Reset() { @@ -101,11 +101,10 @@ func (x *RequestMeta) GetAppCode() string { // PingActivityRequest 用于验证 activity-service gRPC 链路可用。 type PingActivityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PingActivityRequest) Reset() { @@ -147,12 +146,11 @@ func (x *PingActivityRequest) GetMeta() *RequestMeta { // PingActivityResponse 返回服务是否接受请求。 type PingActivityResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` unknownFields protoimpl.UnknownFields - - Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` - NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PingActivityResponse) Reset() { @@ -201,12 +199,11 @@ func (x *PingActivityResponse) GetNodeId() string { // GetActivityStatusRequest 查询活动服务底座状态。 type GetActivityStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ActivityId string `protobuf:"bytes,2,opt,name=activity_id,json=activityId,proto3" json:"activity_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ActivityId string `protobuf:"bytes,2,opt,name=activity_id,json=activityId,proto3" json:"activity_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetActivityStatusRequest) Reset() { @@ -255,12 +252,11 @@ func (x *GetActivityStatusRequest) GetActivityId() string { // GetActivityStatusResponse 返回活动是否启用。 type GetActivityStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActivityId string `protobuf:"bytes,1,opt,name=activity_id,json=activityId,proto3" json:"activity_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - ActivityId string `protobuf:"bytes,1,opt,name=activity_id,json=activityId,proto3" json:"activity_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetActivityStatusResponse) Reset() { @@ -309,14 +305,13 @@ func (x *GetActivityStatusResponse) GetStatus() string { // MessageTabSection 是 App 消息 tab 的一个分区摘要。 type MessageTabSection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + UnreadCount int64 `protobuf:"varint,3,opt,name=unread_count,json=unreadCount,proto3" json:"unread_count,omitempty"` + Source string `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` unknownFields protoimpl.UnknownFields - - Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - UnreadCount int64 `protobuf:"varint,3,opt,name=unread_count,json=unreadCount,proto3" json:"unread_count,omitempty"` - Source string `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageTabSection) Reset() { @@ -379,12 +374,11 @@ func (x *MessageTabSection) GetSource() string { // ListMessageTabsRequest 查询当前用户消息 tab 摘要。 type ListMessageTabsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListMessageTabsRequest) Reset() { @@ -433,11 +427,10 @@ func (x *ListMessageTabsRequest) GetUserId() int64 { // ListMessageTabsResponse 固定返回 user/system/activity 三个分区。 type ListMessageTabsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sections []*MessageTabSection `protobuf:"bytes,1,rep,name=sections,proto3" json:"sections,omitempty"` unknownFields protoimpl.UnknownFields - - Sections []*MessageTabSection `protobuf:"bytes,1,rep,name=sections,proto3" json:"sections,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListMessageTabsResponse) Reset() { @@ -479,21 +472,20 @@ func (x *ListMessageTabsResponse) GetSections() []*MessageTabSection { // InboxMessage 是 system/activity 分区列表可展示的消息快照。 type InboxMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + Section string `protobuf:"bytes,2,opt,name=section,proto3" json:"section,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Summary string `protobuf:"bytes,4,opt,name=summary,proto3" json:"summary,omitempty"` + Body string `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"` + IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + ImageUrl string `protobuf:"bytes,7,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` + ActionType string `protobuf:"bytes,8,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` + ActionParam string `protobuf:"bytes,9,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` + Read bool `protobuf:"varint,10,opt,name=read,proto3" json:"read,omitempty"` + SentAtMs int64 `protobuf:"varint,11,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - Section string `protobuf:"bytes,2,opt,name=section,proto3" json:"section,omitempty"` - Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` - Summary string `protobuf:"bytes,4,opt,name=summary,proto3" json:"summary,omitempty"` - Body string `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"` - IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - ImageUrl string `protobuf:"bytes,7,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` - ActionType string `protobuf:"bytes,8,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` - ActionParam string `protobuf:"bytes,9,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` - Read bool `protobuf:"varint,10,opt,name=read,proto3" json:"read,omitempty"` - SentAtMs int64 `protobuf:"varint,11,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InboxMessage) Reset() { @@ -605,15 +597,14 @@ func (x *InboxMessage) GetSentAtMs() int64 { // ListInboxMessagesRequest 按 section 和游标分页读取当前用户 inbox。 type ListInboxMessagesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Section string `protobuf:"bytes,3,opt,name=section,proto3" json:"section,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Section string `protobuf:"bytes,3,opt,name=section,proto3" json:"section,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInboxMessagesRequest) Reset() { @@ -683,13 +674,12 @@ func (x *ListInboxMessagesRequest) GetPageToken() string { // ListInboxMessagesResponse 返回当前页列表和下一页不透明游标。 type ListInboxMessagesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` + Items []*InboxMessage `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` unknownFields protoimpl.UnknownFields - - Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` - Items []*InboxMessage `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` - NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInboxMessagesResponse) Reset() { @@ -745,13 +735,12 @@ func (x *ListInboxMessagesResponse) GetNextPageToken() string { // MarkInboxMessageReadRequest 标记单条消息已读。 type MarkInboxMessageReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MarkInboxMessageReadRequest) Reset() { @@ -807,13 +796,12 @@ func (x *MarkInboxMessageReadRequest) GetMessageId() string { // MarkInboxMessageReadResponse 返回消息首次已读时间;重复请求不覆盖该时间。 type MarkInboxMessageReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + Read bool `protobuf:"varint,2,opt,name=read,proto3" json:"read,omitempty"` + ReadAtMs int64 `protobuf:"varint,3,opt,name=read_at_ms,json=readAtMs,proto3" json:"read_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - Read bool `protobuf:"varint,2,opt,name=read,proto3" json:"read,omitempty"` - ReadAtMs int64 `protobuf:"varint,3,opt,name=read_at_ms,json=readAtMs,proto3" json:"read_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MarkInboxMessageReadResponse) Reset() { @@ -869,13 +857,12 @@ func (x *MarkInboxMessageReadResponse) GetReadAtMs() int64 { // MarkInboxSectionReadRequest 标记一个 section 下当前可见未读消息全部已读。 type MarkInboxSectionReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Section string `protobuf:"bytes,3,opt,name=section,proto3" json:"section,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Section string `protobuf:"bytes,3,opt,name=section,proto3" json:"section,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MarkInboxSectionReadRequest) Reset() { @@ -931,12 +918,11 @@ func (x *MarkInboxSectionReadRequest) GetSection() string { // MarkInboxSectionReadResponse 返回本次实际变更的消息数量。 type MarkInboxSectionReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` + ReadCount int64 `protobuf:"varint,2,opt,name=read_count,json=readCount,proto3" json:"read_count,omitempty"` unknownFields protoimpl.UnknownFields - - Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` - ReadCount int64 `protobuf:"varint,2,opt,name=read_count,json=readCount,proto3" json:"read_count,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MarkInboxSectionReadResponse) Reset() { @@ -985,13 +971,12 @@ func (x *MarkInboxSectionReadResponse) GetReadCount() int64 { // DeleteInboxMessageRequest 删除当前用户可见消息,删除是用户侧隐藏。 type DeleteInboxMessageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteInboxMessageRequest) Reset() { @@ -1047,12 +1032,11 @@ func (x *DeleteInboxMessageRequest) GetMessageId() string { // DeleteInboxMessageResponse 返回被隐藏的消息 ID。 type DeleteInboxMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + Deleted bool `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"` unknownFields protoimpl.UnknownFields - - MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - Deleted bool `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteInboxMessageResponse) Reset() { @@ -1101,31 +1085,30 @@ func (x *DeleteInboxMessageResponse) GetDeleted() bool { // CreateInboxMessageRequest 是生产者入箱命令;producer_event_id 是幂等键。 type CreateInboxMessageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Producer string `protobuf:"bytes,3,opt,name=producer,proto3" json:"producer,omitempty"` - ProducerEventId string `protobuf:"bytes,4,opt,name=producer_event_id,json=producerEventId,proto3" json:"producer_event_id,omitempty"` - ProducerEventType string `protobuf:"bytes,5,opt,name=producer_event_type,json=producerEventType,proto3" json:"producer_event_type,omitempty"` - MessageType string `protobuf:"bytes,6,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` - AggregateType string `protobuf:"bytes,7,opt,name=aggregate_type,json=aggregateType,proto3" json:"aggregate_type,omitempty"` - AggregateId string `protobuf:"bytes,8,opt,name=aggregate_id,json=aggregateId,proto3" json:"aggregate_id,omitempty"` - TemplateId string `protobuf:"bytes,9,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - TemplateVersion string `protobuf:"bytes,10,opt,name=template_version,json=templateVersion,proto3" json:"template_version,omitempty"` - Title string `protobuf:"bytes,11,opt,name=title,proto3" json:"title,omitempty"` - Summary string `protobuf:"bytes,12,opt,name=summary,proto3" json:"summary,omitempty"` - Body string `protobuf:"bytes,13,opt,name=body,proto3" json:"body,omitempty"` - IconUrl string `protobuf:"bytes,14,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - ImageUrl string `protobuf:"bytes,15,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` - ActionType string `protobuf:"bytes,16,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` - ActionParam string `protobuf:"bytes,17,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` - Priority int32 `protobuf:"varint,18,opt,name=priority,proto3" json:"priority,omitempty"` - SentAtMs int64 `protobuf:"varint,19,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` - ExpireAtMs int64 `protobuf:"varint,20,opt,name=expire_at_ms,json=expireAtMs,proto3" json:"expire_at_ms,omitempty"` - MetadataJson string `protobuf:"bytes,21,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Producer string `protobuf:"bytes,3,opt,name=producer,proto3" json:"producer,omitempty"` + ProducerEventId string `protobuf:"bytes,4,opt,name=producer_event_id,json=producerEventId,proto3" json:"producer_event_id,omitempty"` + ProducerEventType string `protobuf:"bytes,5,opt,name=producer_event_type,json=producerEventType,proto3" json:"producer_event_type,omitempty"` + MessageType string `protobuf:"bytes,6,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` + AggregateType string `protobuf:"bytes,7,opt,name=aggregate_type,json=aggregateType,proto3" json:"aggregate_type,omitempty"` + AggregateId string `protobuf:"bytes,8,opt,name=aggregate_id,json=aggregateId,proto3" json:"aggregate_id,omitempty"` + TemplateId string `protobuf:"bytes,9,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateVersion string `protobuf:"bytes,10,opt,name=template_version,json=templateVersion,proto3" json:"template_version,omitempty"` + Title string `protobuf:"bytes,11,opt,name=title,proto3" json:"title,omitempty"` + Summary string `protobuf:"bytes,12,opt,name=summary,proto3" json:"summary,omitempty"` + Body string `protobuf:"bytes,13,opt,name=body,proto3" json:"body,omitempty"` + IconUrl string `protobuf:"bytes,14,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + ImageUrl string `protobuf:"bytes,15,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` + ActionType string `protobuf:"bytes,16,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` + ActionParam string `protobuf:"bytes,17,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` + Priority int32 `protobuf:"varint,18,opt,name=priority,proto3" json:"priority,omitempty"` + SentAtMs int64 `protobuf:"varint,19,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + ExpireAtMs int64 `protobuf:"varint,20,opt,name=expire_at_ms,json=expireAtMs,proto3" json:"expire_at_ms,omitempty"` + MetadataJson string `protobuf:"bytes,21,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateInboxMessageRequest) Reset() { @@ -1307,12 +1290,11 @@ func (x *CreateInboxMessageRequest) GetMetadataJson() string { // CreateInboxMessageResponse 返回入箱结果;重复同一 producer_event_id 时 created=false。 type CreateInboxMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateInboxMessageResponse) Reset() { @@ -1361,18 +1343,17 @@ func (x *CreateInboxMessageResponse) GetCreated() bool { // CreateFanoutJobRequest 创建后台 fanout 任务;command_id 是后台命令幂等键。 type CreateFanoutJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - MessageType string `protobuf:"bytes,3,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` - TargetScope string `protobuf:"bytes,4,opt,name=target_scope,json=targetScope,proto3" json:"target_scope,omitempty"` - TargetFilterJson string `protobuf:"bytes,5,opt,name=target_filter_json,json=targetFilterJson,proto3" json:"target_filter_json,omitempty"` - TemplateSnapshotJson string `protobuf:"bytes,6,opt,name=template_snapshot_json,json=templateSnapshotJson,proto3" json:"template_snapshot_json,omitempty"` - BatchSize int32 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - CreatedBy string `protobuf:"bytes,8,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + MessageType string `protobuf:"bytes,3,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` + TargetScope string `protobuf:"bytes,4,opt,name=target_scope,json=targetScope,proto3" json:"target_scope,omitempty"` + TargetFilterJson string `protobuf:"bytes,5,opt,name=target_filter_json,json=targetFilterJson,proto3" json:"target_filter_json,omitempty"` + TemplateSnapshotJson string `protobuf:"bytes,6,opt,name=template_snapshot_json,json=templateSnapshotJson,proto3" json:"template_snapshot_json,omitempty"` + BatchSize int32 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + CreatedBy string `protobuf:"bytes,8,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateFanoutJobRequest) Reset() { @@ -1463,13 +1444,12 @@ func (x *CreateFanoutJobRequest) GetCreatedBy() string { // CreateFanoutJobResponse 返回 fanout job 幂等创建结果。 type CreateFanoutJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateFanoutJobResponse) Reset() { @@ -1525,21 +1505,20 @@ func (x *CreateFanoutJobResponse) GetCreated() bool { // ActionConfirm 是 App C2C IM 操作按钮背后的后端确认事实。 type ActionConfirm struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ConfirmId string `protobuf:"bytes,1,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` - BusinessType string `protobuf:"bytes,2,opt,name=business_type,json=businessType,proto3" json:"business_type,omitempty"` - BusinessSubtype string `protobuf:"bytes,3,opt,name=business_subtype,json=businessSubtype,proto3" json:"business_subtype,omitempty"` - BusinessId string `protobuf:"bytes,4,opt,name=business_id,json=businessId,proto3" json:"business_id,omitempty"` - SenderUserId int64 `protobuf:"varint,5,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - ReceiverUserId int64 `protobuf:"varint,6,opt,name=receiver_user_id,json=receiverUserId,proto3" json:"receiver_user_id,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Action string `protobuf:"bytes,8,opt,name=action,proto3" json:"action,omitempty"` - ProcessedAtMs int64 `protobuf:"varint,9,opt,name=processed_at_ms,json=processedAtMs,proto3" json:"processed_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ConfirmId string `protobuf:"bytes,1,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` + BusinessType string `protobuf:"bytes,2,opt,name=business_type,json=businessType,proto3" json:"business_type,omitempty"` + BusinessSubtype string `protobuf:"bytes,3,opt,name=business_subtype,json=businessSubtype,proto3" json:"business_subtype,omitempty"` + BusinessId string `protobuf:"bytes,4,opt,name=business_id,json=businessId,proto3" json:"business_id,omitempty"` + SenderUserId int64 `protobuf:"varint,5,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + ReceiverUserId int64 `protobuf:"varint,6,opt,name=receiver_user_id,json=receiverUserId,proto3" json:"receiver_user_id,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Action string `protobuf:"bytes,8,opt,name=action,proto3" json:"action,omitempty"` + ProcessedAtMs int64 `protobuf:"varint,9,opt,name=processed_at_ms,json=processedAtMs,proto3" json:"processed_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ActionConfirm) Reset() { @@ -1650,14 +1629,13 @@ func (x *ActionConfirm) GetUpdatedAtMs() int64 { } type AcceptActionConfirmRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ConfirmId string `protobuf:"bytes,2,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` + ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ConfirmId string `protobuf:"bytes,2,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` - ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AcceptActionConfirmRequest) Reset() { @@ -1719,11 +1697,10 @@ func (x *AcceptActionConfirmRequest) GetCommandId() string { } type AcceptActionConfirmResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Confirm *ActionConfirm `protobuf:"bytes,1,opt,name=confirm,proto3" json:"confirm,omitempty"` unknownFields protoimpl.UnknownFields - - Confirm *ActionConfirm `protobuf:"bytes,1,opt,name=confirm,proto3" json:"confirm,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AcceptActionConfirmResponse) Reset() { @@ -1764,15 +1741,14 @@ func (x *AcceptActionConfirmResponse) GetConfirm() *ActionConfirm { } type RejectActionConfirmRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ConfirmId string `protobuf:"bytes,2,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` + ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ConfirmId string `protobuf:"bytes,2,opt,name=confirm_id,json=confirmId,proto3" json:"confirm_id,omitempty"` - ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RejectActionConfirmRequest) Reset() { @@ -1841,11 +1817,10 @@ func (x *RejectActionConfirmRequest) GetReason() string { } type RejectActionConfirmResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Confirm *ActionConfirm `protobuf:"bytes,1,opt,name=confirm,proto3" json:"confirm,omitempty"` unknownFields protoimpl.UnknownFields - - Confirm *ActionConfirm `protobuf:"bytes,1,opt,name=confirm,proto3" json:"confirm,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RejectActionConfirmResponse) Reset() { @@ -1886,13 +1861,12 @@ func (x *RejectActionConfirmResponse) GetConfirm() *ActionConfirm { } type BatchGetActionConfirmStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ConfirmIds []string `protobuf:"bytes,3,rep,name=confirm_ids,json=confirmIds,proto3" json:"confirm_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ConfirmIds []string `protobuf:"bytes,3,rep,name=confirm_ids,json=confirmIds,proto3" json:"confirm_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetActionConfirmStatusRequest) Reset() { @@ -1947,11 +1921,10 @@ func (x *BatchGetActionConfirmStatusRequest) GetConfirmIds() []string { } type BatchGetActionConfirmStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ActionConfirm `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*ActionConfirm `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetActionConfirmStatusResponse) Reset() { @@ -1992,15 +1965,14 @@ func (x *BatchGetActionConfirmStatusResponse) GetItems() []*ActionConfirm { } type ListConversationActionConfirmsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + PeerUserId int64 `protobuf:"varint,3,opt,name=peer_user_id,json=peerUserId,proto3" json:"peer_user_id,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - PeerUserId int64 `protobuf:"varint,3,opt,name=peer_user_id,json=peerUserId,proto3" json:"peer_user_id,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListConversationActionConfirmsRequest) Reset() { @@ -2069,12 +2041,11 @@ func (x *ListConversationActionConfirmsRequest) GetPageToken() string { } type ListConversationActionConfirmsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ActionConfirm `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*ActionConfirm `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListConversationActionConfirmsResponse) Reset() { @@ -2123,15 +2094,14 @@ func (x *ListConversationActionConfirmsResponse) GetNextPageToken() string { // CronBatchRequest 是 cron-service 触发 activity-service 后台批处理的统一请求。 type CronBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + WorkerId string `protobuf:"bytes,3,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` + BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + LockTtlMs int64 `protobuf:"varint,5,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - WorkerId string `protobuf:"bytes,3,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` - BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - LockTtlMs int64 `protobuf:"varint,5,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CronBatchRequest) Reset() { @@ -2201,15 +2171,14 @@ func (x *CronBatchRequest) GetLockTtlMs() int64 { // CronBatchResponse 返回一个批处理 run 的执行摘要。 type CronBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` - ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` - SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` - FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` - HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` + ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` + SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` + FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` + HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CronBatchResponse) Reset() { @@ -2279,35 +2248,34 @@ func (x *CronBatchResponse) GetHasMore() bool { // TaskItem 是 App 每日任务/专属任务列表里的单个可展示任务快照。 type TaskItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` - MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - TargetValue int64 `protobuf:"varint,7,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` - TargetUnit string `protobuf:"bytes,8,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` - ProgressValue int64 `protobuf:"varint,9,opt,name=progress_value,json=progressValue,proto3" json:"progress_value,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,10,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - Claimable bool `protobuf:"varint,12,opt,name=claimable,proto3" json:"claimable,omitempty"` - TaskDay string `protobuf:"bytes,13,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - ServerTimeMs int64 `protobuf:"varint,14,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - NextRefreshAtMs int64 `protobuf:"varint,15,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` - SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - Version int64 `protobuf:"varint,17,opt,name=version,proto3" json:"version,omitempty"` - AudienceType string `protobuf:"bytes,18,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` - IconKey string `protobuf:"bytes,19,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` - IconUrl string `protobuf:"bytes,20,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - ActionType string `protobuf:"bytes,21,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` - ActionParam string `protobuf:"bytes,22,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` - ActionPayloadJson string `protobuf:"bytes,23,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` - DimensionFilterJson string `protobuf:"bytes,24,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` - RewardAssetType string `protobuf:"bytes,25,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` + MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + TargetValue int64 `protobuf:"varint,7,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + TargetUnit string `protobuf:"bytes,8,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` + ProgressValue int64 `protobuf:"varint,9,opt,name=progress_value,json=progressValue,proto3" json:"progress_value,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,10,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + Claimable bool `protobuf:"varint,12,opt,name=claimable,proto3" json:"claimable,omitempty"` + TaskDay string `protobuf:"bytes,13,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + ServerTimeMs int64 `protobuf:"varint,14,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + NextRefreshAtMs int64 `protobuf:"varint,15,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Version int64 `protobuf:"varint,17,opt,name=version,proto3" json:"version,omitempty"` + AudienceType string `protobuf:"bytes,18,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + IconKey string `protobuf:"bytes,19,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` + IconUrl string `protobuf:"bytes,20,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + ActionType string `protobuf:"bytes,21,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` + ActionParam string `protobuf:"bytes,22,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` + ActionPayloadJson string `protobuf:"bytes,23,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` + DimensionFilterJson string `protobuf:"bytes,24,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` + RewardAssetType string `protobuf:"bytes,25,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TaskItem) Reset() { @@ -2517,14 +2485,13 @@ func (x *TaskItem) GetRewardAssetType() string { // TaskSection 固定表达 App 任务页的 daily/exclusive 两个分区。 type TaskSection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` - Items []*TaskItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - NextRefreshAtMs int64 `protobuf:"varint,4,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Section string `protobuf:"bytes,1,opt,name=section,proto3" json:"section,omitempty"` + Items []*TaskItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + NextRefreshAtMs int64 `protobuf:"varint,4,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TaskSection) Reset() { @@ -2587,12 +2554,11 @@ func (x *TaskSection) GetNextRefreshAtMs() int64 { // ListUserTasksRequest 查询当前用户任务进度;进度必须来自服务端事实事件。 type ListUserTasksRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListUserTasksRequest) Reset() { @@ -2641,13 +2607,12 @@ func (x *ListUserTasksRequest) GetUserId() int64 { // ListUserTasksResponse 返回 daily/exclusive 分区和服务器刷新时间。 type ListUserTasksResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Sections []*TaskSection `protobuf:"bytes,1,rep,name=sections,proto3" json:"sections,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - NextRefreshAtMs int64 `protobuf:"varint,3,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Sections []*TaskSection `protobuf:"bytes,1,rep,name=sections,proto3" json:"sections,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + NextRefreshAtMs int64 `protobuf:"varint,3,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListUserTasksResponse) Reset() { @@ -2703,16 +2668,15 @@ func (x *ListUserTasksResponse) GetNextRefreshAtMs() int64 { // ClaimTaskRewardRequest 领取已完成任务奖励;command_id 是领奖幂等键。 type ClaimTaskRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + TaskId string `protobuf:"bytes,3,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + TaskType string `protobuf:"bytes,4,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + TaskDay string `protobuf:"bytes,5,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + CommandId string `protobuf:"bytes,6,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - TaskId string `protobuf:"bytes,3,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - TaskType string `protobuf:"bytes,4,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - TaskDay string `protobuf:"bytes,5,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - CommandId string `protobuf:"bytes,6,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimTaskRewardRequest) Reset() { @@ -2789,20 +2753,19 @@ func (x *ClaimTaskRewardRequest) GetCommandId() string { // ClaimTaskRewardResponse 返回 activity 领奖状态和 wallet 入账回执。 type ClaimTaskRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - TaskType string `protobuf:"bytes,3,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - TaskDay string `protobuf:"bytes,4,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,5,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - WalletTransactionId string `protobuf:"bytes,7,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - GrantedAtMs int64 `protobuf:"varint,8,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - Claimed bool `protobuf:"varint,9,opt,name=claimed,proto3" json:"claimed,omitempty"` - RewardAssetType string `protobuf:"bytes,10,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + TaskType string `protobuf:"bytes,3,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + TaskDay string `protobuf:"bytes,4,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,5,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + WalletTransactionId string `protobuf:"bytes,7,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + GrantedAtMs int64 `protobuf:"varint,8,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + Claimed bool `protobuf:"varint,9,opt,name=claimed,proto3" json:"claimed,omitempty"` + RewardAssetType string `protobuf:"bytes,10,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClaimTaskRewardResponse) Reset() { @@ -2907,19 +2870,18 @@ func (x *ClaimTaskRewardResponse) GetRewardAssetType() string { // ConsumeTaskEventRequest 是异步 outbox consumer 投递给任务系统的事实事件。 type ConsumeTaskEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MetricType string `protobuf:"bytes,6,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Value int64 `protobuf:"varint,7,opt,name=value,proto3" json:"value,omitempty"` - OccurredAtMs int64 `protobuf:"varint,8,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - DimensionsJson string `protobuf:"bytes,9,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MetricType string `protobuf:"bytes,6,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Value int64 `protobuf:"varint,7,opt,name=value,proto3" json:"value,omitempty"` + OccurredAtMs int64 `protobuf:"varint,8,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + DimensionsJson string `protobuf:"bytes,9,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeTaskEventRequest) Reset() { @@ -3017,13 +2979,12 @@ func (x *ConsumeTaskEventRequest) GetDimensionsJson() string { // ConsumeTaskEventResponse 返回事件消费幂等结果;matched_task_count=0 表示合法跳过。 type ConsumeTaskEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - MatchedTaskCount int32 `protobuf:"varint,3,opt,name=matched_task_count,json=matchedTaskCount,proto3" json:"matched_task_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + MatchedTaskCount int32 `protobuf:"varint,3,opt,name=matched_task_count,json=matchedTaskCount,proto3" json:"matched_task_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeTaskEventResponse) Reset() { @@ -3079,13 +3040,12 @@ func (x *ConsumeTaskEventResponse) GetMatchedTaskCount() int32 { // BroadcastJoinGroup 是 gateway 下发给客户端的 IM 播报群信息在服务端的同源结构。 type BroadcastJoinGroup struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` unknownFields protoimpl.UnknownFields - - GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BroadcastJoinGroup) Reset() { @@ -3140,11 +3100,10 @@ func (x *BroadcastJoinGroup) GetRegionId() int64 { } type EnsureBroadcastGroupsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EnsureBroadcastGroupsRequest) Reset() { @@ -3185,11 +3144,10 @@ func (x *EnsureBroadcastGroupsRequest) GetMeta() *RequestMeta { } type EnsureBroadcastGroupsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EnsuredCount int32 `protobuf:"varint,1,opt,name=ensured_count,json=ensuredCount,proto3" json:"ensured_count,omitempty"` unknownFields protoimpl.UnknownFields - - EnsuredCount int32 `protobuf:"varint,1,opt,name=ensured_count,json=ensuredCount,proto3" json:"ensured_count,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EnsureBroadcastGroupsResponse) Reset() { @@ -3230,15 +3188,14 @@ func (x *EnsureBroadcastGroupsResponse) GetEnsuredCount() int32 { } type PublishRegionBroadcastRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + BroadcastType string `protobuf:"bytes,4,opt,name=broadcast_type,json=broadcastType,proto3" json:"broadcast_type,omitempty"` + PayloadJson string `protobuf:"bytes,5,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - BroadcastType string `protobuf:"bytes,4,opt,name=broadcast_type,json=broadcastType,proto3" json:"broadcast_type,omitempty"` - PayloadJson string `protobuf:"bytes,5,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PublishRegionBroadcastRequest) Reset() { @@ -3307,14 +3264,13 @@ func (x *PublishRegionBroadcastRequest) GetPayloadJson() string { } type PublishGlobalBroadcastRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + BroadcastType string `protobuf:"bytes,3,opt,name=broadcast_type,json=broadcastType,proto3" json:"broadcast_type,omitempty"` + PayloadJson string `protobuf:"bytes,4,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - BroadcastType string `protobuf:"bytes,3,opt,name=broadcast_type,json=broadcastType,proto3" json:"broadcast_type,omitempty"` - PayloadJson string `protobuf:"bytes,4,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PublishGlobalBroadcastRequest) Reset() { @@ -3376,14 +3332,13 @@ func (x *PublishGlobalBroadcastRequest) GetPayloadJson() string { } type PublishBroadcastResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Created bool `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Created bool `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PublishBroadcastResponse) Reset() { @@ -3446,14 +3401,13 @@ func (x *PublishBroadcastResponse) GetCreated() bool { // RemoveRegionBroadcastMemberRequest 只移除某个用户的旧区域群成员关系,不删除或解散区域群。 type RemoveRegionBroadcastMemberRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RemoveRegionBroadcastMemberRequest) Reset() { @@ -3515,12 +3469,11 @@ func (x *RemoveRegionBroadcastMemberRequest) GetReason() string { } type RemoveRegionBroadcastMemberResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Removed bool `protobuf:"varint,2,opt,name=removed,proto3" json:"removed,omitempty"` unknownFields protoimpl.UnknownFields - - GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Removed bool `protobuf:"varint,2,opt,name=removed,proto3" json:"removed,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RemoveRegionBroadcastMemberResponse) Reset() { @@ -3568,14 +3521,13 @@ func (x *RemoveRegionBroadcastMemberResponse) GetRemoved() bool { } type ProcessBroadcastOutboxBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` + SuccessCount int32 `protobuf:"varint,2,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` + FailureCount int32 `protobuf:"varint,3,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` + HasMore bool `protobuf:"varint,4,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` unknownFields protoimpl.UnknownFields - - ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` - SuccessCount int32 `protobuf:"varint,2,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` - FailureCount int32 `protobuf:"varint,3,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` - HasMore bool `protobuf:"varint,4,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ProcessBroadcastOutboxBatchResponse) Reset() { @@ -3637,12 +3589,11 @@ func (x *ProcessBroadcastOutboxBatchResponse) GetHasMore() bool { } type ConsumeRoomEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Envelope *v1.EventEnvelope `protobuf:"bytes,2,opt,name=envelope,proto3" json:"envelope,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Envelope *v1.EventEnvelope `protobuf:"bytes,2,opt,name=envelope,proto3" json:"envelope,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumeRoomEventRequest) Reset() { @@ -3690,14 +3641,13 @@ func (x *ConsumeRoomEventRequest) GetEnvelope() *v1.EventEnvelope { } type ConsumeRoomEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - BroadcastEventId string `protobuf:"bytes,3,opt,name=broadcast_event_id,json=broadcastEventId,proto3" json:"broadcast_event_id,omitempty"` - BroadcastCreated bool `protobuf:"varint,4,opt,name=broadcast_created,json=broadcastCreated,proto3" json:"broadcast_created,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + BroadcastEventId string `protobuf:"bytes,3,opt,name=broadcast_event_id,json=broadcastEventId,proto3" json:"broadcast_event_id,omitempty"` + BroadcastCreated bool `protobuf:"varint,4,opt,name=broadcast_created,json=broadcastCreated,proto3" json:"broadcast_created,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeRoomEventResponse) Reset() { @@ -3760,36 +3710,35 @@ func (x *ConsumeRoomEventResponse) GetBroadcastCreated() bool { // TaskDefinition 是后台管理任务配置的当前版本读模型。 type TaskDefinition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` - MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - TargetValue int64 `protobuf:"varint,7,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` - TargetUnit string `protobuf:"bytes,8,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,9,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,11,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - Version int64 `protobuf:"varint,12,opt,name=version,proto3" json:"version,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,13,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - EffectiveToMs int64 `protobuf:"varint,14,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,15,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,16,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - AudienceType string `protobuf:"bytes,19,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` - IconKey string `protobuf:"bytes,20,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` - IconUrl string `protobuf:"bytes,21,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - ActionType string `protobuf:"bytes,22,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` - ActionParam string `protobuf:"bytes,23,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` - ActionPayloadJson string `protobuf:"bytes,24,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` - DimensionFilterJson string `protobuf:"bytes,25,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` - RewardAssetType string `protobuf:"bytes,26,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` + MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + TargetValue int64 `protobuf:"varint,7,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + TargetUnit string `protobuf:"bytes,8,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,9,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,11,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Version int64 `protobuf:"varint,12,opt,name=version,proto3" json:"version,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,13,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,14,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,15,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,16,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + AudienceType string `protobuf:"bytes,19,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + IconKey string `protobuf:"bytes,20,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` + IconUrl string `protobuf:"bytes,21,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + ActionType string `protobuf:"bytes,22,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` + ActionParam string `protobuf:"bytes,23,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` + ActionPayloadJson string `protobuf:"bytes,24,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` + DimensionFilterJson string `protobuf:"bytes,25,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` + RewardAssetType string `protobuf:"bytes,26,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TaskDefinition) Reset() { @@ -4006,17 +3955,16 @@ func (x *TaskDefinition) GetRewardAssetType() string { // ListTaskDefinitionsRequest 是后台任务配置列表筛选条件。 type ListTaskDefinitionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListTaskDefinitionsRequest) Reset() { @@ -4099,12 +4047,11 @@ func (x *ListTaskDefinitionsRequest) GetPageSize() int32 { } type ListTaskDefinitionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tasks []*TaskDefinition `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Tasks []*TaskDefinition `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListTaskDefinitionsResponse) Reset() { @@ -4153,33 +4100,32 @@ func (x *ListTaskDefinitionsResponse) GetTotal() int64 { // UpsertTaskDefinitionRequest 创建或编辑任务;active 关键字段变更由服务端生成新版本。 type UpsertTaskDefinitionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - TaskType string `protobuf:"bytes,3,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` - MetricType string `protobuf:"bytes,5,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Title string `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` - TargetValue int64 `protobuf:"varint,8,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` - TargetUnit string `protobuf:"bytes,9,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,10,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,12,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,13,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - EffectiveToMs int64 `protobuf:"varint,14,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` - OperatorAdminId int64 `protobuf:"varint,15,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` - AudienceType string `protobuf:"bytes,16,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` - IconKey string `protobuf:"bytes,17,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` - IconUrl string `protobuf:"bytes,18,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - ActionType string `protobuf:"bytes,19,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` - ActionParam string `protobuf:"bytes,20,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` - ActionPayloadJson string `protobuf:"bytes,21,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` - DimensionFilterJson string `protobuf:"bytes,22,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` - RewardAssetType string `protobuf:"bytes,23,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + TaskType string `protobuf:"bytes,3,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + MetricType string `protobuf:"bytes,5,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Title string `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` + TargetValue int64 `protobuf:"varint,8,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + TargetUnit string `protobuf:"bytes,9,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,10,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,12,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,13,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,14,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + OperatorAdminId int64 `protobuf:"varint,15,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + AudienceType string `protobuf:"bytes,16,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + IconKey string `protobuf:"bytes,17,opt,name=icon_key,json=iconKey,proto3" json:"icon_key,omitempty"` + IconUrl string `protobuf:"bytes,18,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + ActionType string `protobuf:"bytes,19,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` + ActionParam string `protobuf:"bytes,20,opt,name=action_param,json=actionParam,proto3" json:"action_param,omitempty"` + ActionPayloadJson string `protobuf:"bytes,21,opt,name=action_payload_json,json=actionPayloadJson,proto3" json:"action_payload_json,omitempty"` + DimensionFilterJson string `protobuf:"bytes,22,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` + RewardAssetType string `protobuf:"bytes,23,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertTaskDefinitionRequest) Reset() { @@ -4374,12 +4320,11 @@ func (x *UpsertTaskDefinitionRequest) GetRewardAssetType() string { } type UpsertTaskDefinitionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Task *TaskDefinition `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Task *TaskDefinition `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertTaskDefinitionResponse) Reset() { @@ -4428,14 +4373,13 @@ func (x *UpsertTaskDefinitionResponse) GetCreated() bool { // SetTaskDefinitionStatusRequest 后台启停或归档任务,不做物理删除。 type SetTaskDefinitionStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetTaskDefinitionStatusRequest) Reset() { @@ -4497,11 +4441,10 @@ func (x *SetTaskDefinitionStatusRequest) GetOperatorAdminId() int64 { } type SetTaskDefinitionStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Task *TaskDefinition `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` unknownFields protoimpl.UnknownFields - - Task *TaskDefinition `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetTaskDefinitionStatusResponse) Reset() { @@ -4543,19 +4486,18 @@ func (x *SetTaskDefinitionStatusResponse) GetTask() *TaskDefinition { // PublishTaskRewardPolicyRequest 是后台策略发布写入 activity 运行侧任务奖励默认资产的命令。 type PublishTaskRewardPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - InstanceCode string `protobuf:"bytes,2,opt,name=instance_code,json=instanceCode,proto3" json:"instance_code,omitempty"` - TemplateCode string `protobuf:"bytes,3,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` - TemplateVersion string `protobuf:"bytes,4,opt,name=template_version,json=templateVersion,proto3" json:"template_version,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - RewardAssetType string `protobuf:"bytes,6,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` - RuleJson string `protobuf:"bytes,7,opt,name=rule_json,json=ruleJson,proto3" json:"rule_json,omitempty"` - OperatorAdminId int64 `protobuf:"varint,8,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` - PublishedAtMs int64 `protobuf:"varint,9,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + InstanceCode string `protobuf:"bytes,2,opt,name=instance_code,json=instanceCode,proto3" json:"instance_code,omitempty"` + TemplateCode string `protobuf:"bytes,3,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + TemplateVersion string `protobuf:"bytes,4,opt,name=template_version,json=templateVersion,proto3" json:"template_version,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + RewardAssetType string `protobuf:"bytes,6,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + RuleJson string `protobuf:"bytes,7,opt,name=rule_json,json=ruleJson,proto3" json:"rule_json,omitempty"` + OperatorAdminId int64 `protobuf:"varint,8,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + PublishedAtMs int64 `protobuf:"varint,9,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishTaskRewardPolicyRequest) Reset() { @@ -4652,15 +4594,14 @@ func (x *PublishTaskRewardPolicyRequest) GetPublishedAtMs() int64 { } type PublishTaskRewardPolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - InstanceCode string `protobuf:"bytes,2,opt,name=instance_code,json=instanceCode,proto3" json:"instance_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - RewardAssetType string `protobuf:"bytes,4,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` - PublishedAtMs int64 `protobuf:"varint,5,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + InstanceCode string `protobuf:"bytes,2,opt,name=instance_code,json=instanceCode,proto3" json:"instance_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + RewardAssetType string `protobuf:"bytes,4,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + PublishedAtMs int64 `protobuf:"varint,5,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishTaskRewardPolicyResponse) Reset() { @@ -4730,19 +4671,18 @@ func (x *PublishTaskRewardPolicyResponse) GetPublishedAtMs() int64 { // RegistrationRewardConfig 是注册奖励的当前配置;enabled=false 时保留配置但不自动发放。 type RegistrationRewardConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - DailyLimit int64 `protobuf:"varint,6,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,7,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + DailyLimit int64 `protobuf:"varint,6,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,7,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegistrationRewardConfig) Reset() { @@ -4840,25 +4780,24 @@ func (x *RegistrationRewardConfig) GetUpdatedAtMs() int64 { // RegistrationRewardClaim 是每个用户注册奖励的领取事实;user_id 唯一保证“没有领过”。 type RegistrationRewardClaim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RewardDay string `protobuf:"bytes,4,opt,name=reward_day,json=rewardDay,proto3" json:"reward_day,omitempty"` - RewardType string `protobuf:"bytes,5,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ResourceGroupId int64 `protobuf:"varint,7,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletTransactionId string `protobuf:"bytes,10,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - ResourceGrantId string `protobuf:"bytes,11,opt,name=resource_grant_id,json=resourceGrantId,proto3" json:"resource_grant_id,omitempty"` - FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - ClaimedAtMs int64 `protobuf:"varint,13,opt,name=claimed_at_ms,json=claimedAtMs,proto3" json:"claimed_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardDay string `protobuf:"bytes,4,opt,name=reward_day,json=rewardDay,proto3" json:"reward_day,omitempty"` + RewardType string `protobuf:"bytes,5,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ResourceGroupId int64 `protobuf:"varint,7,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletTransactionId string `protobuf:"bytes,10,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + ResourceGrantId string `protobuf:"bytes,11,opt,name=resource_grant_id,json=resourceGrantId,proto3" json:"resource_grant_id,omitempty"` + FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + ClaimedAtMs int64 `protobuf:"varint,13,opt,name=claimed_at_ms,json=claimedAtMs,proto3" json:"claimed_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegistrationRewardClaim) Reset() { @@ -4998,21 +4937,20 @@ func (x *RegistrationRewardClaim) GetUpdatedAtMs() int64 { // RegistrationRewardEligibility 返回 App 可直接展示的资格判断;每日份数按 UTC reward_day 统计。 type RegistrationRewardEligibility struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CanReceive bool `protobuf:"varint,1,opt,name=can_receive,json=canReceive,proto3" json:"can_receive,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` - RewardType string `protobuf:"bytes,4,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - DailyLimit int64 `protobuf:"varint,7,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` - DailyUsed int64 `protobuf:"varint,8,opt,name=daily_used,json=dailyUsed,proto3" json:"daily_used,omitempty"` - DailyRemaining int64 `protobuf:"varint,9,opt,name=daily_remaining,json=dailyRemaining,proto3" json:"daily_remaining,omitempty"` - RewardDay string `protobuf:"bytes,10,opt,name=reward_day,json=rewardDay,proto3" json:"reward_day,omitempty"` - ServerTimeMs int64 `protobuf:"varint,11,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CanReceive bool `protobuf:"varint,1,opt,name=can_receive,json=canReceive,proto3" json:"can_receive,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + RewardType string `protobuf:"bytes,4,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + DailyLimit int64 `protobuf:"varint,7,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` + DailyUsed int64 `protobuf:"varint,8,opt,name=daily_used,json=dailyUsed,proto3" json:"daily_used,omitempty"` + DailyRemaining int64 `protobuf:"varint,9,opt,name=daily_remaining,json=dailyRemaining,proto3" json:"daily_remaining,omitempty"` + RewardDay string `protobuf:"bytes,10,opt,name=reward_day,json=rewardDay,proto3" json:"reward_day,omitempty"` + ServerTimeMs int64 `protobuf:"varint,11,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegistrationRewardEligibility) Reset() { @@ -5124,12 +5062,11 @@ func (x *RegistrationRewardEligibility) GetServerTimeMs() int64 { // GetRegistrationRewardEligibilityRequest 给 App 查询当前用户是否还有注册奖励资格。 type GetRegistrationRewardEligibilityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegistrationRewardEligibilityRequest) Reset() { @@ -5177,11 +5114,10 @@ func (x *GetRegistrationRewardEligibilityRequest) GetUserId() int64 { } type GetRegistrationRewardEligibilityResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Eligibility *RegistrationRewardEligibility `protobuf:"bytes,1,opt,name=eligibility,proto3" json:"eligibility,omitempty"` unknownFields protoimpl.UnknownFields - - Eligibility *RegistrationRewardEligibility `protobuf:"bytes,1,opt,name=eligibility,proto3" json:"eligibility,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegistrationRewardEligibilityResponse) Reset() { @@ -5223,13 +5159,12 @@ func (x *GetRegistrationRewardEligibilityResponse) GetEligibility() *Registratio // IssueRegistrationRewardRequest 是 user-service 注册成功后调用的幂等发放命令。 type IssueRegistrationRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *IssueRegistrationRewardRequest) Reset() { @@ -5284,13 +5219,12 @@ func (x *IssueRegistrationRewardRequest) GetCommandId() string { } type IssueRegistrationRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claim *RegistrationRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + Eligibility *RegistrationRewardEligibility `protobuf:"bytes,2,opt,name=eligibility,proto3" json:"eligibility,omitempty"` + Issued bool `protobuf:"varint,3,opt,name=issued,proto3" json:"issued,omitempty"` unknownFields protoimpl.UnknownFields - - Claim *RegistrationRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` - Eligibility *RegistrationRewardEligibility `protobuf:"bytes,2,opt,name=eligibility,proto3" json:"eligibility,omitempty"` - Issued bool `protobuf:"varint,3,opt,name=issued,proto3" json:"issued,omitempty"` + sizeCache protoimpl.SizeCache } func (x *IssueRegistrationRewardResponse) Reset() { @@ -5346,11 +5280,10 @@ func (x *IssueRegistrationRewardResponse) GetIssued() bool { // GetRegistrationRewardConfigRequest 返回后台注册奖励配置;未配置时服务端返回默认 disabled 配置。 type GetRegistrationRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegistrationRewardConfigRequest) Reset() { @@ -5391,11 +5324,10 @@ func (x *GetRegistrationRewardConfigRequest) GetMeta() *RequestMeta { } type GetRegistrationRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RegistrationRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RegistrationRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegistrationRewardConfigResponse) Reset() { @@ -5437,17 +5369,16 @@ func (x *GetRegistrationRewardConfigResponse) GetConfig() *RegistrationRewardCon // UpdateRegistrationRewardConfigRequest 更新注册奖励开关、奖励内容和每日限制。 type UpdateRegistrationRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - DailyLimit int64 `protobuf:"varint,6,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` - OperatorAdminId int64 `protobuf:"varint,7,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + DailyLimit int64 `protobuf:"varint,6,opt,name=daily_limit,json=dailyLimit,proto3" json:"daily_limit,omitempty"` + OperatorAdminId int64 `protobuf:"varint,7,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRegistrationRewardConfigRequest) Reset() { @@ -5530,11 +5461,10 @@ func (x *UpdateRegistrationRewardConfigRequest) GetOperatorAdminId() int64 { } type UpdateRegistrationRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RegistrationRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RegistrationRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRegistrationRewardConfigResponse) Reset() { @@ -5576,17 +5506,16 @@ func (x *UpdateRegistrationRewardConfigResponse) GetConfig() *RegistrationReward // ListRegistrationRewardClaimsRequest 是后台领取记录分页筛选;keyword 由 admin-server 结合用户库扩展。 type ListRegistrationRewardClaimsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ClaimedStartMs int64 `protobuf:"varint,6,opt,name=claimed_start_ms,json=claimedStartMs,proto3" json:"claimed_start_ms,omitempty"` - ClaimedEndMs int64 `protobuf:"varint,7,opt,name=claimed_end_ms,json=claimedEndMs,proto3" json:"claimed_end_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ClaimedStartMs int64 `protobuf:"varint,6,opt,name=claimed_start_ms,json=claimedStartMs,proto3" json:"claimed_start_ms,omitempty"` + ClaimedEndMs int64 `protobuf:"varint,7,opt,name=claimed_end_ms,json=claimedEndMs,proto3" json:"claimed_end_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRegistrationRewardClaimsRequest) Reset() { @@ -5669,13 +5598,12 @@ func (x *ListRegistrationRewardClaimsRequest) GetClaimedEndMs() int64 { } type ListRegistrationRewardClaimsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Claims []*RegistrationRewardClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` TodayClaimedCount int64 `protobuf:"varint,3,opt,name=today_claimed_count,json=todayClaimedCount,proto3" json:"today_claimed_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRegistrationRewardClaimsResponse) Reset() { @@ -5731,23 +5659,22 @@ func (x *ListRegistrationRewardClaimsResponse) GetTodayClaimedCount() int64 { // FirstRechargeRewardTier 是首冲奖励的一个 Google 商品档位;旧金币区间字段仅保留兼容。 type FirstRechargeRewardTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` - MinCoinAmount int64 `protobuf:"varint,4,opt,name=min_coin_amount,json=minCoinAmount,proto3" json:"min_coin_amount,omitempty"` - MaxCoinAmount int64 `protobuf:"varint,5,opt,name=max_coin_amount,json=maxCoinAmount,proto3" json:"max_coin_amount,omitempty"` - ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,8,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,11,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` - GoogleProductId string `protobuf:"bytes,12,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` - DiscountPercent int32 `protobuf:"varint,13,opt,name=discount_percent,json=discountPercent,proto3" json:"discount_percent,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` + MinCoinAmount int64 `protobuf:"varint,4,opt,name=min_coin_amount,json=minCoinAmount,proto3" json:"min_coin_amount,omitempty"` + MaxCoinAmount int64 `protobuf:"varint,5,opt,name=max_coin_amount,json=maxCoinAmount,proto3" json:"max_coin_amount,omitempty"` + ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,8,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,11,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + GoogleProductId string `protobuf:"bytes,12,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` + DiscountPercent int32 `protobuf:"varint,13,opt,name=discount_percent,json=discountPercent,proto3" json:"discount_percent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FirstRechargeRewardTier) Reset() { @@ -5873,16 +5800,15 @@ func (x *FirstRechargeRewardTier) GetDiscountPercent() int32 { // FirstRechargeRewardConfig 是当前 App 的首冲奖励配置;档位内容在 activity-service 内保持版本一致。 type FirstRechargeRewardConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*FirstRechargeRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` UpdatedByAdminId int64 `protobuf:"varint,4,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FirstRechargeRewardConfig) Reset() { @@ -5959,32 +5885,31 @@ func (x *FirstRechargeRewardConfig) GetUpdatedAtMs() int64 { // FirstRechargeRewardClaim 是某个用户购买某个首充档位后的发奖事实;同一用户同一档位只处理一次。 type FirstRechargeRewardClaim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - TierId int64 `protobuf:"varint,6,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,7,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - RechargeCoinAmount int64 `protobuf:"varint,9,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` - RechargeSequence int64 `protobuf:"varint,10,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` - RechargeType string `protobuf:"bytes,11,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - WalletCommandId string `protobuf:"bytes,13,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,14,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - FailureReason string `protobuf:"bytes,15,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - RechargedAtMs int64 `protobuf:"varint,16,opt,name=recharged_at_ms,json=rechargedAtMs,proto3" json:"recharged_at_ms,omitempty"` - GrantedAtMs int64 `protobuf:"varint,17,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - TierUsdMinorAmount int64 `protobuf:"varint,20,opt,name=tier_usd_minor_amount,json=tierUsdMinorAmount,proto3" json:"tier_usd_minor_amount,omitempty"` - GoogleProductId string `protobuf:"bytes,21,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` - RechargeUsdMinor int64 `protobuf:"varint,22,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + TierId int64 `protobuf:"varint,6,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,7,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + RechargeCoinAmount int64 `protobuf:"varint,9,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` + RechargeSequence int64 `protobuf:"varint,10,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` + RechargeType string `protobuf:"bytes,11,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + WalletCommandId string `protobuf:"bytes,13,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,14,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + FailureReason string `protobuf:"bytes,15,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + RechargedAtMs int64 `protobuf:"varint,16,opt,name=recharged_at_ms,json=rechargedAtMs,proto3" json:"recharged_at_ms,omitempty"` + GrantedAtMs int64 `protobuf:"varint,17,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + TierUsdMinorAmount int64 `protobuf:"varint,20,opt,name=tier_usd_minor_amount,json=tierUsdMinorAmount,proto3" json:"tier_usd_minor_amount,omitempty"` + GoogleProductId string `protobuf:"bytes,21,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` + RechargeUsdMinor int64 `protobuf:"varint,22,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FirstRechargeRewardClaim) Reset() { @@ -6173,16 +6098,15 @@ func (x *FirstRechargeRewardClaim) GetRechargeUsdMinor() int64 { // FirstRechargeRewardStatus 是 App 首冲奖励面板可直接展示的当前状态。 type FirstRechargeRewardStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + Tiers []*FirstRechargeRewardTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` + Rewarded bool `protobuf:"varint,3,opt,name=rewarded,proto3" json:"rewarded,omitempty"` + Claim *FirstRechargeRewardClaim `protobuf:"bytes,4,opt,name=claim,proto3" json:"claim,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + Claims []*FirstRechargeRewardClaim `protobuf:"bytes,6,rep,name=claims,proto3" json:"claims,omitempty"` unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - Tiers []*FirstRechargeRewardTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` - Rewarded bool `protobuf:"varint,3,opt,name=rewarded,proto3" json:"rewarded,omitempty"` - Claim *FirstRechargeRewardClaim `protobuf:"bytes,4,opt,name=claim,proto3" json:"claim,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - Claims []*FirstRechargeRewardClaim `protobuf:"bytes,6,rep,name=claims,proto3" json:"claims,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FirstRechargeRewardStatus) Reset() { @@ -6258,12 +6182,11 @@ func (x *FirstRechargeRewardStatus) GetClaims() []*FirstRechargeRewardClaim { } type GetFirstRechargeRewardStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFirstRechargeRewardStatusRequest) Reset() { @@ -6311,11 +6234,10 @@ func (x *GetFirstRechargeRewardStatusRequest) GetUserId() int64 { } type GetFirstRechargeRewardStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status *FirstRechargeRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status *FirstRechargeRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFirstRechargeRewardStatusResponse) Reset() { @@ -6357,21 +6279,20 @@ func (x *GetFirstRechargeRewardStatusResponse) GetStatus() *FirstRechargeRewardS // ConsumeFirstRechargeRewardRequest 是 wallet 充值事实消费入口;Google 商品 ID 命中档位后发奖。 type ConsumeFirstRechargeRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RechargeCoinAmount int64 `protobuf:"varint,6,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` - RechargeSequence int64 `protobuf:"varint,7,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` - RechargeType string `protobuf:"bytes,8,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - OccurredAtMs int64 `protobuf:"varint,9,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - RechargeUsdMinor int64 `protobuf:"varint,10,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` - GoogleProductId string `protobuf:"bytes,11,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RechargeCoinAmount int64 `protobuf:"varint,6,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` + RechargeSequence int64 `protobuf:"varint,7,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` + RechargeType string `protobuf:"bytes,8,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + OccurredAtMs int64 `protobuf:"varint,9,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + RechargeUsdMinor int64 `protobuf:"varint,10,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` + GoogleProductId string `protobuf:"bytes,11,opt,name=google_product_id,json=googleProductId,proto3" json:"google_product_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeFirstRechargeRewardRequest) Reset() { @@ -6482,13 +6403,12 @@ func (x *ConsumeFirstRechargeRewardRequest) GetGoogleProductId() string { } type ConsumeFirstRechargeRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claim *FirstRechargeRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + Consumed bool `protobuf:"varint,2,opt,name=consumed,proto3" json:"consumed,omitempty"` + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Claim *FirstRechargeRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` - Consumed bool `protobuf:"varint,2,opt,name=consumed,proto3" json:"consumed,omitempty"` - Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumeFirstRechargeRewardResponse) Reset() { @@ -6543,11 +6463,10 @@ func (x *ConsumeFirstRechargeRewardResponse) GetReason() string { } type GetFirstRechargeRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFirstRechargeRewardConfigRequest) Reset() { @@ -6588,11 +6507,10 @@ func (x *GetFirstRechargeRewardConfigRequest) GetMeta() *RequestMeta { } type GetFirstRechargeRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *FirstRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *FirstRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFirstRechargeRewardConfigResponse) Reset() { @@ -6633,14 +6551,13 @@ func (x *GetFirstRechargeRewardConfigResponse) GetConfig() *FirstRechargeRewardC } type UpdateFirstRechargeRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*FirstRechargeRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateFirstRechargeRewardConfigRequest) Reset() { @@ -6702,11 +6619,10 @@ func (x *UpdateFirstRechargeRewardConfigRequest) GetOperatorAdminId() int64 { } type UpdateFirstRechargeRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *FirstRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *FirstRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateFirstRechargeRewardConfigResponse) Reset() { @@ -6747,15 +6663,14 @@ func (x *UpdateFirstRechargeRewardConfigResponse) GetConfig() *FirstRechargeRewa } type ListFirstRechargeRewardClaimsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListFirstRechargeRewardClaimsRequest) Reset() { @@ -6824,12 +6739,11 @@ func (x *ListFirstRechargeRewardClaimsRequest) GetPageSize() int32 { } type ListFirstRechargeRewardClaimsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claims []*FirstRechargeRewardClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Claims []*FirstRechargeRewardClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListFirstRechargeRewardClaimsResponse) Reset() { @@ -6878,19 +6792,18 @@ func (x *ListFirstRechargeRewardClaimsResponse) GetTotal() int64 { // CumulativeRechargeRewardTier 是累充奖励的单个 USD 档位;threshold_usd_minor 以美分存储。 type CumulativeRechargeRewardTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` - ThresholdUsdMinor int64 `protobuf:"varint,4,opt,name=threshold_usd_minor,json=thresholdUsdMinor,proto3" json:"threshold_usd_minor,omitempty"` - ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` + ThresholdUsdMinor int64 `protobuf:"varint,4,opt,name=threshold_usd_minor,json=thresholdUsdMinor,proto3" json:"threshold_usd_minor,omitempty"` + ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CumulativeRechargeRewardTier) Reset() { @@ -6988,16 +6901,15 @@ func (x *CumulativeRechargeRewardTier) GetUpdatedAtMs() int64 { // CumulativeRechargeRewardConfig 是当前 App 的累充奖励配置。 type CumulativeRechargeRewardConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*CumulativeRechargeRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` UpdatedByAdminId int64 `protobuf:"varint,4,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CumulativeRechargeRewardConfig) Reset() { @@ -7074,32 +6986,31 @@ func (x *CumulativeRechargeRewardConfig) GetUpdatedAtMs() int64 { // CumulativeRechargeRewardGrant 是用户在一个 UTC 自然周内达成某个档位后的发放事实。 type CumulativeRechargeRewardGrant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GrantId string `protobuf:"bytes,1,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - EventId string `protobuf:"bytes,5,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - TransactionId string `protobuf:"bytes,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CommandId string `protobuf:"bytes,7,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - TierId int64 `protobuf:"varint,8,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,9,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - ThresholdUsdMinor int64 `protobuf:"varint,10,opt,name=threshold_usd_minor,json=thresholdUsdMinor,proto3" json:"threshold_usd_minor,omitempty"` - ResourceGroupId int64 `protobuf:"varint,11,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - ReachedUsdMinor int64 `protobuf:"varint,12,opt,name=reached_usd_minor,json=reachedUsdMinor,proto3" json:"reached_usd_minor,omitempty"` - QualifyingUsdMinor int64 `protobuf:"varint,13,opt,name=qualifying_usd_minor,json=qualifyingUsdMinor,proto3" json:"qualifying_usd_minor,omitempty"` - RechargeCoinAmount int64 `protobuf:"varint,14,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` - RechargeType string `protobuf:"bytes,15,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,16,opt,name=status,proto3" json:"status,omitempty"` - WalletCommandId string `protobuf:"bytes,17,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,18,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - FailureReason string `protobuf:"bytes,19,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - GrantedAtMs int64 `protobuf:"varint,20,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,21,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,22,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GrantId string `protobuf:"bytes,1,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + EventId string `protobuf:"bytes,5,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + TransactionId string `protobuf:"bytes,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CommandId string `protobuf:"bytes,7,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TierId int64 `protobuf:"varint,8,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,9,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + ThresholdUsdMinor int64 `protobuf:"varint,10,opt,name=threshold_usd_minor,json=thresholdUsdMinor,proto3" json:"threshold_usd_minor,omitempty"` + ResourceGroupId int64 `protobuf:"varint,11,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + ReachedUsdMinor int64 `protobuf:"varint,12,opt,name=reached_usd_minor,json=reachedUsdMinor,proto3" json:"reached_usd_minor,omitempty"` + QualifyingUsdMinor int64 `protobuf:"varint,13,opt,name=qualifying_usd_minor,json=qualifyingUsdMinor,proto3" json:"qualifying_usd_minor,omitempty"` + RechargeCoinAmount int64 `protobuf:"varint,14,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` + RechargeType string `protobuf:"bytes,15,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,16,opt,name=status,proto3" json:"status,omitempty"` + WalletCommandId string `protobuf:"bytes,17,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,18,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + FailureReason string `protobuf:"bytes,19,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + GrantedAtMs int64 `protobuf:"varint,20,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,21,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,22,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CumulativeRechargeRewardGrant) Reset() { @@ -7288,18 +7199,17 @@ func (x *CumulativeRechargeRewardGrant) GetUpdatedAtMs() int64 { // CumulativeRechargeRewardProgress 是用户在当前 UTC 周期内的累充累计投影。 type CumulativeRechargeRewardProgress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - TotalUsdMinor int64 `protobuf:"varint,4,opt,name=total_usd_minor,json=totalUsdMinor,proto3" json:"total_usd_minor,omitempty"` - TotalCoinAmount int64 `protobuf:"varint,5,opt,name=total_coin_amount,json=totalCoinAmount,proto3" json:"total_coin_amount,omitempty"` - FirstRechargedAtMs int64 `protobuf:"varint,6,opt,name=first_recharged_at_ms,json=firstRechargedAtMs,proto3" json:"first_recharged_at_ms,omitempty"` - LastRechargedAtMs int64 `protobuf:"varint,7,opt,name=last_recharged_at_ms,json=lastRechargedAtMs,proto3" json:"last_recharged_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + TotalUsdMinor int64 `protobuf:"varint,4,opt,name=total_usd_minor,json=totalUsdMinor,proto3" json:"total_usd_minor,omitempty"` + TotalCoinAmount int64 `protobuf:"varint,5,opt,name=total_coin_amount,json=totalCoinAmount,proto3" json:"total_coin_amount,omitempty"` + FirstRechargedAtMs int64 `protobuf:"varint,6,opt,name=first_recharged_at_ms,json=firstRechargedAtMs,proto3" json:"first_recharged_at_ms,omitempty"` + LastRechargedAtMs int64 `protobuf:"varint,7,opt,name=last_recharged_at_ms,json=lastRechargedAtMs,proto3" json:"last_recharged_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CumulativeRechargeRewardProgress) Reset() { @@ -7390,10 +7300,7 @@ func (x *CumulativeRechargeRewardProgress) GetUpdatedAtMs() int64 { // CumulativeRechargeRewardStatus 是 App 累充奖励 H5 可直接展示的当前状态。 type CumulativeRechargeRewardStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Config *CumulativeRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` Progress *CumulativeRechargeRewardProgress `protobuf:"bytes,2,opt,name=progress,proto3" json:"progress,omitempty"` Grants []*CumulativeRechargeRewardGrant `protobuf:"bytes,3,rep,name=grants,proto3" json:"grants,omitempty"` @@ -7401,6 +7308,8 @@ type CumulativeRechargeRewardStatus struct { PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` PeriodEndMs int64 `protobuf:"varint,6,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` ServerTimeMs int64 `protobuf:"varint,7,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CumulativeRechargeRewardStatus) Reset() { @@ -7483,12 +7392,11 @@ func (x *CumulativeRechargeRewardStatus) GetServerTimeMs() int64 { } type GetCumulativeRechargeRewardStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCumulativeRechargeRewardStatusRequest) Reset() { @@ -7536,11 +7444,10 @@ func (x *GetCumulativeRechargeRewardStatusRequest) GetUserId() int64 { } type GetCumulativeRechargeRewardStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status *CumulativeRechargeRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status *CumulativeRechargeRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCumulativeRechargeRewardStatusResponse) Reset() { @@ -7582,21 +7489,20 @@ func (x *GetCumulativeRechargeRewardStatusResponse) GetStatus() *CumulativeRecha // ConsumeCumulativeRechargeRewardRequest 是 wallet 充值事实消费入口;所有成功充值都会按 UTC 周期累计。 type ConsumeCumulativeRechargeRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RechargeCoinAmount int64 `protobuf:"varint,6,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` - RechargeSequence int64 `protobuf:"varint,7,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` - RechargeType string `protobuf:"bytes,8,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - QualifyingUsdMinor int64 `protobuf:"varint,9,opt,name=qualifying_usd_minor,json=qualifyingUsdMinor,proto3" json:"qualifying_usd_minor,omitempty"` - PayloadJson string `protobuf:"bytes,10,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` - OccurredAtMs int64 `protobuf:"varint,11,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CommandId string `protobuf:"bytes,4,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RechargeCoinAmount int64 `protobuf:"varint,6,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` + RechargeSequence int64 `protobuf:"varint,7,opt,name=recharge_sequence,json=rechargeSequence,proto3" json:"recharge_sequence,omitempty"` + RechargeType string `protobuf:"bytes,8,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + QualifyingUsdMinor int64 `protobuf:"varint,9,opt,name=qualifying_usd_minor,json=qualifyingUsdMinor,proto3" json:"qualifying_usd_minor,omitempty"` + PayloadJson string `protobuf:"bytes,10,opt,name=payload_json,json=payloadJson,proto3" json:"payload_json,omitempty"` + OccurredAtMs int64 `protobuf:"varint,11,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeCumulativeRechargeRewardRequest) Reset() { @@ -7707,13 +7613,12 @@ func (x *ConsumeCumulativeRechargeRewardRequest) GetOccurredAtMs() int64 { } type ConsumeCumulativeRechargeRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Grants []*CumulativeRechargeRewardGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` + Consumed bool `protobuf:"varint,2,opt,name=consumed,proto3" json:"consumed,omitempty"` + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Grants []*CumulativeRechargeRewardGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` - Consumed bool `protobuf:"varint,2,opt,name=consumed,proto3" json:"consumed,omitempty"` - Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumeCumulativeRechargeRewardResponse) Reset() { @@ -7768,11 +7673,10 @@ func (x *ConsumeCumulativeRechargeRewardResponse) GetReason() string { } type GetCumulativeRechargeRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCumulativeRechargeRewardConfigRequest) Reset() { @@ -7813,11 +7717,10 @@ func (x *GetCumulativeRechargeRewardConfigRequest) GetMeta() *RequestMeta { } type GetCumulativeRechargeRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *CumulativeRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *CumulativeRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCumulativeRechargeRewardConfigResponse) Reset() { @@ -7858,14 +7761,13 @@ func (x *GetCumulativeRechargeRewardConfigResponse) GetConfig() *CumulativeRecha } type UpdateCumulativeRechargeRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*CumulativeRechargeRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateCumulativeRechargeRewardConfigRequest) Reset() { @@ -7927,11 +7829,10 @@ func (x *UpdateCumulativeRechargeRewardConfigRequest) GetOperatorAdminId() int64 } type UpdateCumulativeRechargeRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *CumulativeRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *CumulativeRechargeRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateCumulativeRechargeRewardConfigResponse) Reset() { @@ -7972,16 +7873,15 @@ func (x *UpdateCumulativeRechargeRewardConfigResponse) GetConfig() *CumulativeRe } type ListCumulativeRechargeRewardGrantsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CycleKey string `protobuf:"bytes,4,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CycleKey string `protobuf:"bytes,4,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCumulativeRechargeRewardGrantsRequest) Reset() { @@ -8057,12 +7957,11 @@ func (x *ListCumulativeRechargeRewardGrantsRequest) GetPageSize() int32 { } type ListCumulativeRechargeRewardGrantsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Grants []*CumulativeRechargeRewardGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Grants []*CumulativeRechargeRewardGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCumulativeRechargeRewardGrantsResponse) Reset() { @@ -8111,21 +8010,20 @@ func (x *ListCumulativeRechargeRewardGrantsResponse) GetTotal() int64 { // InviteActivityRewardTier 是邀请活动的金币奖励档位;recharge 使用充值门槛,valid_invite 使用有效邀请人数门槛。 type InviteActivityRewardTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - RewardType string `protobuf:"bytes,2,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - TierCode string `protobuf:"bytes,3,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - TierName string `protobuf:"bytes,4,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` - ThresholdCoinAmount int64 `protobuf:"varint,5,opt,name=threshold_coin_amount,json=thresholdCoinAmount,proto3" json:"threshold_coin_amount,omitempty"` - ThresholdValidInviteCount int64 `protobuf:"varint,6,opt,name=threshold_valid_invite_count,json=thresholdValidInviteCount,proto3" json:"threshold_valid_invite_count,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,7,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + RewardType string `protobuf:"bytes,2,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + TierCode string `protobuf:"bytes,3,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + TierName string `protobuf:"bytes,4,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` + ThresholdCoinAmount int64 `protobuf:"varint,5,opt,name=threshold_coin_amount,json=thresholdCoinAmount,proto3" json:"threshold_coin_amount,omitempty"` + ThresholdValidInviteCount int64 `protobuf:"varint,6,opt,name=threshold_valid_invite_count,json=thresholdValidInviteCount,proto3" json:"threshold_valid_invite_count,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,7,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardTier) Reset() { @@ -8237,10 +8135,7 @@ func (x *InviteActivityRewardTier) GetUpdatedAtMs() int64 { // InviteActivityRewardConfig 是当前 App 的邀请活动配置;关闭时保留档位但 App 不允许领取。 type InviteActivityRewardConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*InviteActivityRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` @@ -8249,6 +8144,8 @@ type InviteActivityRewardConfig struct { UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` PerInviteInviterRewardCoinAmount int64 `protobuf:"varint,7,opt,name=per_invite_inviter_reward_coin_amount,json=perInviteInviterRewardCoinAmount,proto3" json:"per_invite_inviter_reward_coin_amount,omitempty"` PerInviteInviteeRewardCoinAmount int64 `protobuf:"varint,8,opt,name=per_invite_invitee_reward_coin_amount,json=perInviteInviteeRewardCoinAmount,proto3" json:"per_invite_invitee_reward_coin_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardConfig) Reset() { @@ -8339,17 +8236,16 @@ func (x *InviteActivityRewardConfig) GetPerInviteInviteeRewardCoinAmount() int64 // InviteActivityRewardProgress 是邀请人在 UTC 自然月内的充值和有效邀请累计。 type InviteActivityRewardProgress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - TotalRechargeCoinAmount int64 `protobuf:"varint,4,opt,name=total_recharge_coin_amount,json=totalRechargeCoinAmount,proto3" json:"total_recharge_coin_amount,omitempty"` - ValidInviteCount int64 `protobuf:"varint,5,opt,name=valid_invite_count,json=validInviteCount,proto3" json:"valid_invite_count,omitempty"` - ClaimedRewardCoinAmount int64 `protobuf:"varint,6,opt,name=claimed_reward_coin_amount,json=claimedRewardCoinAmount,proto3" json:"claimed_reward_coin_amount,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + TotalRechargeCoinAmount int64 `protobuf:"varint,4,opt,name=total_recharge_coin_amount,json=totalRechargeCoinAmount,proto3" json:"total_recharge_coin_amount,omitempty"` + ValidInviteCount int64 `protobuf:"varint,5,opt,name=valid_invite_count,json=validInviteCount,proto3" json:"valid_invite_count,omitempty"` + ClaimedRewardCoinAmount int64 `protobuf:"varint,6,opt,name=claimed_reward_coin_amount,json=claimedRewardCoinAmount,proto3" json:"claimed_reward_coin_amount,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardProgress) Reset() { @@ -8433,30 +8329,29 @@ func (x *InviteActivityRewardProgress) GetUpdatedAtMs() int64 { // InviteActivityRewardClaim 是用户点击领取后创建的钱包发奖事实。 type InviteActivityRewardClaim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RewardType string `protobuf:"bytes,5,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - CommandId string `protobuf:"bytes,6,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - TierId int64 `protobuf:"varint,7,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,8,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - TierName string `protobuf:"bytes,9,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` - ThresholdCoinAmount int64 `protobuf:"varint,10,opt,name=threshold_coin_amount,json=thresholdCoinAmount,proto3" json:"threshold_coin_amount,omitempty"` - ThresholdValidInviteCount int64 `protobuf:"varint,11,opt,name=threshold_valid_invite_count,json=thresholdValidInviteCount,proto3" json:"threshold_valid_invite_count,omitempty"` - ReachedValue int64 `protobuf:"varint,12,opt,name=reached_value,json=reachedValue,proto3" json:"reached_value,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,13,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,14,opt,name=status,proto3" json:"status,omitempty"` - WalletCommandId string `protobuf:"bytes,15,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - FailureReason string `protobuf:"bytes,17,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - GrantedAtMs int64 `protobuf:"varint,18,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,19,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,20,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardType string `protobuf:"bytes,5,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + CommandId string `protobuf:"bytes,6,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TierId int64 `protobuf:"varint,7,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,8,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + TierName string `protobuf:"bytes,9,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` + ThresholdCoinAmount int64 `protobuf:"varint,10,opt,name=threshold_coin_amount,json=thresholdCoinAmount,proto3" json:"threshold_coin_amount,omitempty"` + ThresholdValidInviteCount int64 `protobuf:"varint,11,opt,name=threshold_valid_invite_count,json=thresholdValidInviteCount,proto3" json:"threshold_valid_invite_count,omitempty"` + ReachedValue int64 `protobuf:"varint,12,opt,name=reached_value,json=reachedValue,proto3" json:"reached_value,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,13,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,14,opt,name=status,proto3" json:"status,omitempty"` + WalletCommandId string `protobuf:"bytes,15,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + FailureReason string `protobuf:"bytes,17,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + GrantedAtMs int64 `protobuf:"varint,18,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,19,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,20,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardClaim) Reset() { @@ -8631,10 +8526,7 @@ func (x *InviteActivityRewardClaim) GetUpdatedAtMs() int64 { // InviteActivityRewardStatus 是 App 邀请奖励页可直接展示的当前周期状态。 type InviteActivityRewardStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Config *InviteActivityRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` Progress *InviteActivityRewardProgress `protobuf:"bytes,2,opt,name=progress,proto3" json:"progress,omitempty"` Claims []*InviteActivityRewardClaim `protobuf:"bytes,3,rep,name=claims,proto3" json:"claims,omitempty"` @@ -8642,6 +8534,8 @@ type InviteActivityRewardStatus struct { PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` PeriodEndMs int64 `protobuf:"varint,6,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` ServerTimeMs int64 `protobuf:"varint,7,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardStatus) Reset() { @@ -8724,12 +8618,11 @@ func (x *InviteActivityRewardStatus) GetServerTimeMs() int64 { } type GetInviteActivityRewardStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetInviteActivityRewardStatusRequest) Reset() { @@ -8777,11 +8670,10 @@ func (x *GetInviteActivityRewardStatusRequest) GetUserId() int64 { } type GetInviteActivityRewardStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status *InviteActivityRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status *InviteActivityRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetInviteActivityRewardStatusResponse) Reset() { @@ -8822,15 +8714,14 @@ func (x *GetInviteActivityRewardStatusResponse) GetStatus() *InviteActivityRewar } type ClaimInviteActivityRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + TierId int64 `protobuf:"varint,4,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + CommandId string `protobuf:"bytes,5,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - TierId int64 `protobuf:"varint,4,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - CommandId string `protobuf:"bytes,5,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimInviteActivityRewardRequest) Reset() { @@ -8899,12 +8790,11 @@ func (x *ClaimInviteActivityRewardRequest) GetCommandId() string { } type ClaimInviteActivityRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claim *InviteActivityRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + Status *InviteActivityRewardStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Claim *InviteActivityRewardClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` - Status *InviteActivityRewardStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimInviteActivityRewardResponse) Reset() { @@ -8953,14 +8843,13 @@ func (x *ClaimInviteActivityRewardResponse) GetStatus() *InviteActivityRewardSta // InviteActivityLeaderboardEntry 是邀请活动月榜的一行;用户资料由 gateway 出口补齐。 type InviteActivityLeaderboardEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ValidInviteCount int64 `protobuf:"varint,3,opt,name=valid_invite_count,json=validInviteCount,proto3" json:"valid_invite_count,omitempty"` - TotalRechargeCoinAmount int64 `protobuf:"varint,4,opt,name=total_recharge_coin_amount,json=totalRechargeCoinAmount,proto3" json:"total_recharge_coin_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ValidInviteCount int64 `protobuf:"varint,3,opt,name=valid_invite_count,json=validInviteCount,proto3" json:"valid_invite_count,omitempty"` + TotalRechargeCoinAmount int64 `protobuf:"varint,4,opt,name=total_recharge_coin_amount,json=totalRechargeCoinAmount,proto3" json:"total_recharge_coin_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityLeaderboardEntry) Reset() { @@ -9022,14 +8911,13 @@ func (x *InviteActivityLeaderboardEntry) GetTotalRechargeCoinAmount() int64 { } type ListInviteActivityLeaderboardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityLeaderboardRequest) Reset() { @@ -9091,14 +8979,13 @@ func (x *ListInviteActivityLeaderboardRequest) GetPageSize() int32 { } type ListInviteActivityLeaderboardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Entries []*InviteActivityLeaderboardEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Entries []*InviteActivityLeaderboardEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityLeaderboardResponse) Reset() { @@ -9160,11 +9047,10 @@ func (x *ListInviteActivityLeaderboardResponse) GetServerTimeMs() int64 { } type GetInviteActivityRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetInviteActivityRewardConfigRequest) Reset() { @@ -9205,11 +9091,10 @@ func (x *GetInviteActivityRewardConfigRequest) GetMeta() *RequestMeta { } type GetInviteActivityRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *InviteActivityRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *InviteActivityRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetInviteActivityRewardConfigResponse) Reset() { @@ -9250,16 +9135,15 @@ func (x *GetInviteActivityRewardConfigResponse) GetConfig() *InviteActivityRewar } type UpdateInviteActivityRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*InviteActivityRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` PerInviteInviterRewardCoinAmount int64 `protobuf:"varint,5,opt,name=per_invite_inviter_reward_coin_amount,json=perInviteInviterRewardCoinAmount,proto3" json:"per_invite_inviter_reward_coin_amount,omitempty"` PerInviteInviteeRewardCoinAmount int64 `protobuf:"varint,6,opt,name=per_invite_invitee_reward_coin_amount,json=perInviteInviteeRewardCoinAmount,proto3" json:"per_invite_invitee_reward_coin_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateInviteActivityRewardConfigRequest) Reset() { @@ -9335,11 +9219,10 @@ func (x *UpdateInviteActivityRewardConfigRequest) GetPerInviteInviteeRewardCoinA } type UpdateInviteActivityRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *InviteActivityRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *InviteActivityRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateInviteActivityRewardConfigResponse) Reset() { @@ -9380,17 +9263,16 @@ func (x *UpdateInviteActivityRewardConfigResponse) GetConfig() *InviteActivityRe } type ListInviteActivityRewardClaimsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CycleKey string `protobuf:"bytes,5,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CycleKey string `protobuf:"bytes,5,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityRewardClaimsRequest) Reset() { @@ -9473,12 +9355,11 @@ func (x *ListInviteActivityRewardClaimsRequest) GetPageSize() int32 { } type ListInviteActivityRewardClaimsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claims []*InviteActivityRewardClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Claims []*InviteActivityRewardClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityRewardClaimsResponse) Reset() { @@ -9527,13 +9408,12 @@ func (x *ListInviteActivityRewardClaimsResponse) GetTotal() int64 { // InviteActivityRewardInviteeSummary 是后台邀请活动聚合行展开后的被邀请人明细。 type InviteActivityRewardInviteeSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - InvitedUserId int64 `protobuf:"varint,1,opt,name=invited_user_id,json=invitedUserId,proto3" json:"invited_user_id,omitempty"` - RechargeCoinAmount int64 `protobuf:"varint,2,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` - InvitedAtMs int64 `protobuf:"varint,3,opt,name=invited_at_ms,json=invitedAtMs,proto3" json:"invited_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + InvitedUserId int64 `protobuf:"varint,1,opt,name=invited_user_id,json=invitedUserId,proto3" json:"invited_user_id,omitempty"` + RechargeCoinAmount int64 `protobuf:"varint,2,opt,name=recharge_coin_amount,json=rechargeCoinAmount,proto3" json:"recharge_coin_amount,omitempty"` + InvitedAtMs int64 `protobuf:"varint,3,opt,name=invited_at_ms,json=invitedAtMs,proto3" json:"invited_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardInviteeSummary) Reset() { @@ -9589,10 +9469,7 @@ func (x *InviteActivityRewardInviteeSummary) GetInvitedAtMs() int64 { // InviteActivityRewardSummary 是后台邀请活动列表的一行,按邀请人和周期聚合。 type InviteActivityRewardSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` @@ -9602,6 +9479,8 @@ type InviteActivityRewardSummary struct { TotalRewardCoinAmount int64 `protobuf:"varint,7,opt,name=total_reward_coin_amount,json=totalRewardCoinAmount,proto3" json:"total_reward_coin_amount,omitempty"` UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` Invitees []*InviteActivityRewardInviteeSummary `protobuf:"bytes,9,rep,name=invitees,proto3" json:"invitees,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InviteActivityRewardSummary) Reset() { @@ -9698,15 +9577,14 @@ func (x *InviteActivityRewardSummary) GetInvitees() []*InviteActivityRewardInvit } type ListInviteActivityRewardSummariesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CycleKey string `protobuf:"bytes,3,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityRewardSummariesRequest) Reset() { @@ -9775,12 +9653,11 @@ func (x *ListInviteActivityRewardSummariesRequest) GetPageSize() int32 { } type ListInviteActivityRewardSummariesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Summaries []*InviteActivityRewardSummary `protobuf:"bytes,1,rep,name=summaries,proto3" json:"summaries,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Summaries []*InviteActivityRewardSummary `protobuf:"bytes,1,rep,name=summaries,proto3" json:"summaries,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListInviteActivityRewardSummariesResponse) Reset() { @@ -9829,19 +9706,18 @@ func (x *ListInviteActivityRewardSummariesResponse) GetTotal() int64 { // RoomTurnoverRewardTier 是房间流水奖励的单个档位;达到 threshold_coin_spent 后可命中奖励。 type RoomTurnoverRewardTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` - ThresholdCoinSpent int64 `protobuf:"varint,4,opt,name=threshold_coin_spent,json=thresholdCoinSpent,proto3" json:"threshold_coin_spent,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,5,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,2,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + TierName string `protobuf:"bytes,3,opt,name=tier_name,json=tierName,proto3" json:"tier_name,omitempty"` + ThresholdCoinSpent int64 `protobuf:"varint,4,opt,name=threshold_coin_spent,json=thresholdCoinSpent,proto3" json:"threshold_coin_spent,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,5,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomTurnoverRewardTier) Reset() { @@ -9939,16 +9815,15 @@ func (x *RoomTurnoverRewardTier) GetUpdatedAtMs() int64 { // RoomTurnoverRewardConfig 是当前 App 的房间流水奖励配置;结算只命中最高有效档。 type RoomTurnoverRewardConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*RoomTurnoverRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` UpdatedByAdminId int64 `protobuf:"varint,4,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomTurnoverRewardConfig) Reset() { @@ -10025,28 +9900,27 @@ func (x *RoomTurnoverRewardConfig) GetUpdatedAtMs() int64 { // RoomTurnoverRewardSettlement 是某个房间单个 UTC 周期的结算事实。 type RoomTurnoverRewardSettlement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - PeriodEndMs int64 `protobuf:"varint,6,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` - CoinSpent int64 `protobuf:"varint,7,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - TierId int64 `protobuf:"varint,8,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,9,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - ThresholdCoinSpent int64 `protobuf:"varint,10,opt,name=threshold_coin_spent,json=thresholdCoinSpent,proto3" json:"threshold_coin_spent,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,11,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - WalletCommandId string `protobuf:"bytes,13,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletTransactionId string `protobuf:"bytes,14,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - FailureReason string `protobuf:"bytes,15,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - SettledAtMs int64 `protobuf:"varint,16,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,6,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + CoinSpent int64 `protobuf:"varint,7,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + TierId int64 `protobuf:"varint,8,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,9,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + ThresholdCoinSpent int64 `protobuf:"varint,10,opt,name=threshold_coin_spent,json=thresholdCoinSpent,proto3" json:"threshold_coin_spent,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,11,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + WalletCommandId string `protobuf:"bytes,13,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletTransactionId string `protobuf:"bytes,14,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + FailureReason string `protobuf:"bytes,15,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + SettledAtMs int64 `protobuf:"varint,16,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomTurnoverRewardSettlement) Reset() { @@ -10207,10 +10081,7 @@ func (x *RoomTurnoverRewardSettlement) GetUpdatedAtMs() int64 { // RoomTurnoverRewardStatus 给 App H5 返回当前 UTC 周期、房间流水、预计奖励和上一期结算。 type RoomTurnoverRewardStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Config *RoomTurnoverRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` OwnerUserId int64 `protobuf:"varint,3,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` @@ -10221,6 +10092,8 @@ type RoomTurnoverRewardStatus struct { MatchedTier *RoomTurnoverRewardTier `protobuf:"bytes,8,opt,name=matched_tier,json=matchedTier,proto3" json:"matched_tier,omitempty"` LatestSettlement *RoomTurnoverRewardSettlement `protobuf:"bytes,9,opt,name=latest_settlement,json=latestSettlement,proto3" json:"latest_settlement,omitempty"` ServerTimeMs int64 `protobuf:"varint,10,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomTurnoverRewardStatus) Reset() { @@ -10324,14 +10197,13 @@ func (x *RoomTurnoverRewardStatus) GetServerTimeMs() int64 { } type GetRoomTurnoverRewardStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomTurnoverRewardStatusRequest) Reset() { @@ -10393,11 +10265,10 @@ func (x *GetRoomTurnoverRewardStatusRequest) GetOwnerUserId() int64 { } type GetRoomTurnoverRewardStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status *RoomTurnoverRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status *RoomTurnoverRewardStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomTurnoverRewardStatusResponse) Reset() { @@ -10438,11 +10309,10 @@ func (x *GetRoomTurnoverRewardStatusResponse) GetStatus() *RoomTurnoverRewardSta } type GetRoomTurnoverRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomTurnoverRewardConfigRequest) Reset() { @@ -10483,11 +10353,10 @@ func (x *GetRoomTurnoverRewardConfigRequest) GetMeta() *RequestMeta { } type GetRoomTurnoverRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RoomTurnoverRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RoomTurnoverRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomTurnoverRewardConfigResponse) Reset() { @@ -10528,14 +10397,13 @@ func (x *GetRoomTurnoverRewardConfigResponse) GetConfig() *RoomTurnoverRewardCon } type UpdateRoomTurnoverRewardConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Tiers []*RoomTurnoverRewardTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRoomTurnoverRewardConfigRequest) Reset() { @@ -10597,11 +10465,10 @@ func (x *UpdateRoomTurnoverRewardConfigRequest) GetOperatorAdminId() int64 { } type UpdateRoomTurnoverRewardConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RoomTurnoverRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RoomTurnoverRewardConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRoomTurnoverRewardConfigResponse) Reset() { @@ -10642,17 +10509,16 @@ func (x *UpdateRoomTurnoverRewardConfigResponse) GetConfig() *RoomTurnoverReward } type ListRoomTurnoverRewardSettlementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - PeriodStartMs int64 `protobuf:"varint,5,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomTurnoverRewardSettlementsRequest) Reset() { @@ -10735,12 +10601,11 @@ func (x *ListRoomTurnoverRewardSettlementsRequest) GetPageSize() int32 { } type ListRoomTurnoverRewardSettlementsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Settlements []*RoomTurnoverRewardSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Settlements []*RoomTurnoverRewardSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomTurnoverRewardSettlementsResponse) Reset() { @@ -10788,13 +10653,12 @@ func (x *ListRoomTurnoverRewardSettlementsResponse) GetTotal() int64 { } type RetryRoomTurnoverRewardSettlementRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - SettlementId string `protobuf:"bytes,2,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + SettlementId string `protobuf:"bytes,2,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RetryRoomTurnoverRewardSettlementRequest) Reset() { @@ -10849,11 +10713,10 @@ func (x *RetryRoomTurnoverRewardSettlementRequest) GetOperatorAdminId() int64 { } type RetryRoomTurnoverRewardSettlementResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Settlement *RoomTurnoverRewardSettlement `protobuf:"bytes,1,opt,name=settlement,proto3" json:"settlement,omitempty"` unknownFields protoimpl.UnknownFields - - Settlement *RoomTurnoverRewardSettlement `protobuf:"bytes,1,opt,name=settlement,proto3" json:"settlement,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RetryRoomTurnoverRewardSettlementResponse) Reset() { @@ -10895,12 +10758,11 @@ func (x *RetryRoomTurnoverRewardSettlementResponse) GetSettlement() *RoomTurnove // SevenDayCheckInReward 是七日签到配置中某一天的资源组奖励。 type SevenDayCheckInReward struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DayIndex int32 `protobuf:"varint,1,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` - ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DayIndex int32 `protobuf:"varint,1,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` + ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SevenDayCheckInReward) Reset() { @@ -10949,10 +10811,7 @@ func (x *SevenDayCheckInReward) GetResourceGroupId() int64 { // SevenDayCheckInConfig 是当前 App 的七日签到配置;资源组内容仍由 wallet-service 拥有。 type SevenDayCheckInConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` ConfigVersion int64 `protobuf:"varint,3,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` @@ -10960,6 +10819,8 @@ type SevenDayCheckInConfig struct { UpdatedByAdminId int64 `protobuf:"varint,5,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SevenDayCheckInConfig) Reset() { @@ -11043,16 +10904,15 @@ func (x *SevenDayCheckInConfig) GetUpdatedAtMs() int64 { // SevenDayCheckInRewardStatus 是 App 面板中某一天奖励的用户侧状态。 type SevenDayCheckInRewardStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DayIndex int32 `protobuf:"varint,1,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` - ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - ClaimId string `protobuf:"bytes,4,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - WalletGrantId string `protobuf:"bytes,5,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - GrantedAtMs int64 `protobuf:"varint,6,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DayIndex int32 `protobuf:"varint,1,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` + ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ClaimId string `protobuf:"bytes,4,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + WalletGrantId string `protobuf:"bytes,5,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + GrantedAtMs int64 `protobuf:"varint,6,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SevenDayCheckInRewardStatus) Reset() { @@ -11128,12 +10988,11 @@ func (x *SevenDayCheckInRewardStatus) GetGrantedAtMs() int64 { } type GetSevenDayCheckInStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSevenDayCheckInStatusRequest) Reset() { @@ -11181,10 +11040,7 @@ func (x *GetSevenDayCheckInStatusRequest) GetUserId() int64 { } type GetSevenDayCheckInStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` CanSign bool `protobuf:"varint,2,opt,name=can_sign,json=canSign,proto3" json:"can_sign,omitempty"` Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` @@ -11197,6 +11053,8 @@ type GetSevenDayCheckInStatusResponse struct { Rewards []*SevenDayCheckInRewardStatus `protobuf:"bytes,10,rep,name=rewards,proto3" json:"rewards,omitempty"` ServerTimeMs int64 `protobuf:"varint,11,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` NextRefreshAtMs int64 `protobuf:"varint,12,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetSevenDayCheckInStatusResponse) Reset() { @@ -11314,13 +11172,12 @@ func (x *GetSevenDayCheckInStatusResponse) GetNextRefreshAtMs() int64 { } type SignSevenDayCheckInRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SignSevenDayCheckInRequest) Reset() { @@ -11375,19 +11232,18 @@ func (x *SignSevenDayCheckInRequest) GetCommandId() string { } type SignSevenDayCheckInResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - CycleNo int64 `protobuf:"varint,2,opt,name=cycle_no,json=cycleNo,proto3" json:"cycle_no,omitempty"` - CheckinDay string `protobuf:"bytes,3,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` - DayIndex int32 `protobuf:"varint,4,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` - ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - WalletGrantId string `protobuf:"bytes,7,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - GrantedAtMs int64 `protobuf:"varint,8,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,9,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + CycleNo int64 `protobuf:"varint,2,opt,name=cycle_no,json=cycleNo,proto3" json:"cycle_no,omitempty"` + CheckinDay string `protobuf:"bytes,3,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` + DayIndex int32 `protobuf:"varint,4,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` + ResourceGroupId int64 `protobuf:"varint,5,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + WalletGrantId string `protobuf:"bytes,7,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + GrantedAtMs int64 `protobuf:"varint,8,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,9,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SignSevenDayCheckInResponse) Reset() { @@ -11484,11 +11340,10 @@ func (x *SignSevenDayCheckInResponse) GetServerTimeMs() int64 { } type GetSevenDayCheckInConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSevenDayCheckInConfigRequest) Reset() { @@ -11529,11 +11384,10 @@ func (x *GetSevenDayCheckInConfigRequest) GetMeta() *RequestMeta { } type GetSevenDayCheckInConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *SevenDayCheckInConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *SevenDayCheckInConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSevenDayCheckInConfigResponse) Reset() { @@ -11574,14 +11428,13 @@ func (x *GetSevenDayCheckInConfigResponse) GetConfig() *SevenDayCheckInConfig { } type UpdateSevenDayCheckInConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` Rewards []*SevenDayCheckInReward `protobuf:"bytes,3,rep,name=rewards,proto3" json:"rewards,omitempty"` OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateSevenDayCheckInConfigRequest) Reset() { @@ -11643,11 +11496,10 @@ func (x *UpdateSevenDayCheckInConfigRequest) GetOperatorAdminId() int64 { } type UpdateSevenDayCheckInConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *SevenDayCheckInConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *SevenDayCheckInConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateSevenDayCheckInConfigResponse) Reset() { @@ -11689,26 +11541,25 @@ func (x *UpdateSevenDayCheckInConfigResponse) GetConfig() *SevenDayCheckInConfig // SevenDayCheckInClaim 是后台领取记录页使用的签到和资源组发放事实。 type SevenDayCheckInClaim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CycleNo int64 `protobuf:"varint,4,opt,name=cycle_no,json=cycleNo,proto3" json:"cycle_no,omitempty"` - CheckinDay string `protobuf:"bytes,5,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` - DayIndex int32 `protobuf:"varint,6,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` - ConfigVersion int64 `protobuf:"varint,7,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` - ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,10,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - SignedAtMs int64 `protobuf:"varint,13,opt,name=signed_at_ms,json=signedAtMs,proto3" json:"signed_at_ms,omitempty"` - GrantedAtMs int64 `protobuf:"varint,14,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CycleNo int64 `protobuf:"varint,4,opt,name=cycle_no,json=cycleNo,proto3" json:"cycle_no,omitempty"` + CheckinDay string `protobuf:"bytes,5,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` + DayIndex int32 `protobuf:"varint,6,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` + ConfigVersion int64 `protobuf:"varint,7,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,10,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + SignedAtMs int64 `protobuf:"varint,13,opt,name=signed_at_ms,json=signedAtMs,proto3" json:"signed_at_ms,omitempty"` + GrantedAtMs int64 `protobuf:"varint,14,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SevenDayCheckInClaim) Reset() { @@ -11854,17 +11705,16 @@ func (x *SevenDayCheckInClaim) GetUpdatedAtMs() int64 { } type ListSevenDayCheckInClaimsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CheckinDay string `protobuf:"bytes,4,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` + DayIndex int32 `protobuf:"varint,5,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CheckinDay string `protobuf:"bytes,4,opt,name=checkin_day,json=checkinDay,proto3" json:"checkin_day,omitempty"` - DayIndex int32 `protobuf:"varint,5,opt,name=day_index,json=dayIndex,proto3" json:"day_index,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSevenDayCheckInClaimsRequest) Reset() { @@ -11947,12 +11797,11 @@ func (x *ListSevenDayCheckInClaimsRequest) GetPageSize() int32 { } type ListSevenDayCheckInClaimsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claims []*SevenDayCheckInClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Claims []*SevenDayCheckInClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSevenDayCheckInClaimsResponse) Reset() { @@ -12001,17 +11850,16 @@ func (x *ListSevenDayCheckInClaimsResponse) GetTotal() int64 { // LevelTrack 是等级体系的一条成长轨道,例如 wealth/game/charm。 type LevelTrack struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,4,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - DisplayConfigJson string `protobuf:"bytes,5,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` - CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,4,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + DisplayConfigJson string `protobuf:"bytes,5,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelTrack) Reset() { @@ -12095,22 +11943,21 @@ func (x *LevelTrack) GetUpdatedAtMs() int64 { // LevelRule 是某条轨道的单级阈值和可选奖励配置。 type LevelRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - RequiredValue int64 `protobuf:"varint,3,opt,name=required_value,json=requiredValue,proto3" json:"required_value,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - DisplayConfigJson string `protobuf:"bytes,8,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,9,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,10,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + RequiredValue int64 `protobuf:"varint,3,opt,name=required_value,json=requiredValue,proto3" json:"required_value,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + DisplayConfigJson string `protobuf:"bytes,8,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,9,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,10,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelRule) Reset() { @@ -12229,24 +12076,23 @@ func (x *LevelRule) GetUpdatedAtMs() int64 { // LevelTier 是等级段展示和等级段奖励配置,例如 1-10 或 11-20。 type LevelTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` - MinLevel int32 `protobuf:"varint,3,opt,name=min_level,json=minLevel,proto3" json:"min_level,omitempty"` - MaxLevel int32 `protobuf:"varint,4,opt,name=max_level,json=maxLevel,proto3" json:"max_level,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - DisplayAvatarFrameResourceId int64 `protobuf:"varint,6,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` - DisplayBadgeResourceId int64 `protobuf:"varint,7,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,8,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` - DisplayConfigJson string `protobuf:"bytes,10,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,11,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,12,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TierId int64 `protobuf:"varint,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` + MinLevel int32 `protobuf:"varint,3,opt,name=min_level,json=minLevel,proto3" json:"min_level,omitempty"` + MaxLevel int32 `protobuf:"varint,4,opt,name=max_level,json=maxLevel,proto3" json:"max_level,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + DisplayAvatarFrameResourceId int64 `protobuf:"varint,6,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` + DisplayBadgeResourceId int64 `protobuf:"varint,7,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,8,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + DisplayConfigJson string `protobuf:"bytes,10,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,11,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,12,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelTier) Reset() { @@ -12379,23 +12225,22 @@ func (x *LevelTier) GetUpdatedAtMs() int64 { // LevelTrackOverview 是 App 等级总览里的单轨道进度。 type LevelTrackOverview struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` - TierId int64 `protobuf:"varint,4,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TotalValue int64 `protobuf:"varint,5,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` - CurrentLevelRequiredValue int64 `protobuf:"varint,6,opt,name=current_level_required_value,json=currentLevelRequiredValue,proto3" json:"current_level_required_value,omitempty"` - NextLevel int32 `protobuf:"varint,7,opt,name=next_level,json=nextLevel,proto3" json:"next_level,omitempty"` - NextLevelRequiredValue int64 `protobuf:"varint,8,opt,name=next_level_required_value,json=nextLevelRequiredValue,proto3" json:"next_level_required_value,omitempty"` - DisplayAvatarFrameResourceId int64 `protobuf:"varint,9,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` - DisplayBadgeResourceId int64 `protobuf:"varint,10,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` - RewardPendingCount int64 `protobuf:"varint,11,opt,name=reward_pending_count,json=rewardPendingCount,proto3" json:"reward_pending_count,omitempty"` - SortOrder int32 `protobuf:"varint,12,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - DisplayBadgeSourceLevel int32 `protobuf:"varint,13,opt,name=display_badge_source_level,json=displayBadgeSourceLevel,proto3" json:"display_badge_source_level,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` + TierId int64 `protobuf:"varint,4,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TotalValue int64 `protobuf:"varint,5,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` + CurrentLevelRequiredValue int64 `protobuf:"varint,6,opt,name=current_level_required_value,json=currentLevelRequiredValue,proto3" json:"current_level_required_value,omitempty"` + NextLevel int32 `protobuf:"varint,7,opt,name=next_level,json=nextLevel,proto3" json:"next_level,omitempty"` + NextLevelRequiredValue int64 `protobuf:"varint,8,opt,name=next_level_required_value,json=nextLevelRequiredValue,proto3" json:"next_level_required_value,omitempty"` + DisplayAvatarFrameResourceId int64 `protobuf:"varint,9,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` + DisplayBadgeResourceId int64 `protobuf:"varint,10,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` + RewardPendingCount int64 `protobuf:"varint,11,opt,name=reward_pending_count,json=rewardPendingCount,proto3" json:"reward_pending_count,omitempty"` + SortOrder int32 `protobuf:"varint,12,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + DisplayBadgeSourceLevel int32 `protobuf:"varint,13,opt,name=display_badge_source_level,json=displayBadgeSourceLevel,proto3" json:"display_badge_source_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelTrackOverview) Reset() { @@ -12520,12 +12365,11 @@ func (x *LevelTrackOverview) GetDisplayBadgeSourceLevel() int32 { } type GetMyLevelOverviewRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyLevelOverviewRequest) Reset() { @@ -12573,12 +12417,11 @@ func (x *GetMyLevelOverviewRequest) GetUserId() int64 { } type GetMyLevelOverviewResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tracks []*LevelTrackOverview `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Tracks []*LevelTrackOverview `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyLevelOverviewResponse) Reset() { @@ -12626,13 +12469,12 @@ func (x *GetMyLevelOverviewResponse) GetServerTimeMs() int64 { } type GetLevelTrackRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLevelTrackRequest) Reset() { @@ -12687,14 +12529,13 @@ func (x *GetLevelTrackRequest) GetTrack() string { } type GetLevelTrackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Overview *LevelTrackOverview `protobuf:"bytes,1,opt,name=overview,proto3" json:"overview,omitempty"` + Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` + Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Overview *LevelTrackOverview `protobuf:"bytes,1,opt,name=overview,proto3" json:"overview,omitempty"` - Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` - Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLevelTrackResponse) Reset() { @@ -12757,17 +12598,16 @@ func (x *GetLevelTrackResponse) GetServerTimeMs() int64 { // LevelDisplayTrackProfile 是资料卡和房间展示使用的单轨道等级投影。 type LevelDisplayTrackProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - TierId int64 `protobuf:"varint,3,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - AvatarFrameResourceId int64 `protobuf:"varint,4,opt,name=avatar_frame_resource_id,json=avatarFrameResourceId,proto3" json:"avatar_frame_resource_id,omitempty"` - BadgeResourceId int64 `protobuf:"varint,5,opt,name=badge_resource_id,json=badgeResourceId,proto3" json:"badge_resource_id,omitempty"` - BadgeSourceLevel int32 `protobuf:"varint,6,opt,name=badge_source_level,json=badgeSourceLevel,proto3" json:"badge_source_level,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + TierId int64 `protobuf:"varint,3,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + AvatarFrameResourceId int64 `protobuf:"varint,4,opt,name=avatar_frame_resource_id,json=avatarFrameResourceId,proto3" json:"avatar_frame_resource_id,omitempty"` + BadgeResourceId int64 `protobuf:"varint,5,opt,name=badge_resource_id,json=badgeResourceId,proto3" json:"badge_resource_id,omitempty"` + BadgeSourceLevel int32 `protobuf:"varint,6,opt,name=badge_source_level,json=badgeSourceLevel,proto3" json:"badge_source_level,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelDisplayTrackProfile) Reset() { @@ -12851,14 +12691,13 @@ func (x *LevelDisplayTrackProfile) GetUpdatedAtMs() int64 { // UserLevelDisplayProfile 固定返回财富、游戏、魅力三条轨道,避免客户端按数组猜槽位。 type UserLevelDisplayProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Wealth *LevelDisplayTrackProfile `protobuf:"bytes,2,opt,name=wealth,proto3" json:"wealth,omitempty"` + Game *LevelDisplayTrackProfile `protobuf:"bytes,3,opt,name=game,proto3" json:"game,omitempty"` + Charm *LevelDisplayTrackProfile `protobuf:"bytes,4,opt,name=charm,proto3" json:"charm,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Wealth *LevelDisplayTrackProfile `protobuf:"bytes,2,opt,name=wealth,proto3" json:"wealth,omitempty"` - Game *LevelDisplayTrackProfile `protobuf:"bytes,3,opt,name=game,proto3" json:"game,omitempty"` - Charm *LevelDisplayTrackProfile `protobuf:"bytes,4,opt,name=charm,proto3" json:"charm,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UserLevelDisplayProfile) Reset() { @@ -12920,12 +12759,11 @@ func (x *UserLevelDisplayProfile) GetCharm() *LevelDisplayTrackProfile { } type BatchGetUserLevelDisplayProfilesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserLevelDisplayProfilesRequest) Reset() { @@ -12973,12 +12811,11 @@ func (x *BatchGetUserLevelDisplayProfilesRequest) GetUserIds() []int64 { } type BatchGetUserLevelDisplayProfilesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Profiles []*UserLevelDisplayProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Profiles []*UserLevelDisplayProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserLevelDisplayProfilesResponse) Reset() { @@ -13027,30 +12864,29 @@ func (x *BatchGetUserLevelDisplayProfilesResponse) GetServerTimeMs() int64 { // LevelRewardJob 是等级或等级段奖励的发放状态。 type LevelRewardJob struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RewardJobId string `protobuf:"bytes,1,opt,name=reward_job_id,json=rewardJobId,proto3" json:"reward_job_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` - RewardSourceType string `protobuf:"bytes,4,opt,name=reward_source_type,json=rewardSourceType,proto3" json:"reward_source_type,omitempty"` - RewardSourceId string `protobuf:"bytes,5,opt,name=reward_source_id,json=rewardSourceId,proto3" json:"reward_source_id,omitempty"` - ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - WalletCommandId string `protobuf:"bytes,7,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,8,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` - AttemptCount int32 `protobuf:"varint,10,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` - FailureReason string `protobuf:"bytes,11,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - RewardOrigin string `protobuf:"bytes,14,opt,name=reward_origin,json=rewardOrigin,proto3" json:"reward_origin,omitempty"` - TemporaryLevelId string `protobuf:"bytes,15,opt,name=temporary_level_id,json=temporaryLevelId,proto3" json:"temporary_level_id,omitempty"` - GrantGeneration int32 `protobuf:"varint,16,opt,name=grant_generation,json=grantGeneration,proto3" json:"grant_generation,omitempty"` - RewardLevel int32 `protobuf:"varint,17,opt,name=reward_level,json=rewardLevel,proto3" json:"reward_level,omitempty"` - Permanent bool `protobuf:"varint,18,opt,name=permanent,proto3" json:"permanent,omitempty"` - TemporaryExpiresAtMs int64 `protobuf:"varint,19,opt,name=temporary_expires_at_ms,json=temporaryExpiresAtMs,proto3" json:"temporary_expires_at_ms,omitempty"` - RevokeStatus string `protobuf:"bytes,20,opt,name=revoke_status,json=revokeStatus,proto3" json:"revoke_status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RewardJobId string `protobuf:"bytes,1,opt,name=reward_job_id,json=rewardJobId,proto3" json:"reward_job_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` + RewardSourceType string `protobuf:"bytes,4,opt,name=reward_source_type,json=rewardSourceType,proto3" json:"reward_source_type,omitempty"` + RewardSourceId string `protobuf:"bytes,5,opt,name=reward_source_id,json=rewardSourceId,proto3" json:"reward_source_id,omitempty"` + ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,7,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,8,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + AttemptCount int32 `protobuf:"varint,10,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` + FailureReason string `protobuf:"bytes,11,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + RewardOrigin string `protobuf:"bytes,14,opt,name=reward_origin,json=rewardOrigin,proto3" json:"reward_origin,omitempty"` + TemporaryLevelId string `protobuf:"bytes,15,opt,name=temporary_level_id,json=temporaryLevelId,proto3" json:"temporary_level_id,omitempty"` + GrantGeneration int32 `protobuf:"varint,16,opt,name=grant_generation,json=grantGeneration,proto3" json:"grant_generation,omitempty"` + RewardLevel int32 `protobuf:"varint,17,opt,name=reward_level,json=rewardLevel,proto3" json:"reward_level,omitempty"` + Permanent bool `protobuf:"varint,18,opt,name=permanent,proto3" json:"permanent,omitempty"` + TemporaryExpiresAtMs int64 `protobuf:"varint,19,opt,name=temporary_expires_at_ms,json=temporaryExpiresAtMs,proto3" json:"temporary_expires_at_ms,omitempty"` + RevokeStatus string `protobuf:"bytes,20,opt,name=revoke_status,json=revokeStatus,proto3" json:"revoke_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LevelRewardJob) Reset() { @@ -13224,16 +13060,15 @@ func (x *LevelRewardJob) GetRevokeStatus() string { } type ListLevelRewardsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLevelRewardsRequest) Reset() { @@ -13309,12 +13144,11 @@ func (x *ListLevelRewardsRequest) GetPageSize() int32 { } type ListLevelRewardsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rewards []*LevelRewardJob `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Rewards []*LevelRewardJob `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLevelRewardsResponse) Reset() { @@ -13363,21 +13197,20 @@ func (x *ListLevelRewardsResponse) GetTotal() int64 { // ConsumeLevelEventRequest 是内部事件 relay 投递给等级系统的幂等增量。 type ConsumeLevelEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - SourceEventId string `protobuf:"bytes,3,opt,name=source_event_id,json=sourceEventId,proto3" json:"source_event_id,omitempty"` - SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` - SourceEventType string `protobuf:"bytes,5,opt,name=source_event_type,json=sourceEventType,proto3" json:"source_event_type,omitempty"` - UserId int64 `protobuf:"varint,6,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Track string `protobuf:"bytes,7,opt,name=track,proto3" json:"track,omitempty"` - MetricType string `protobuf:"bytes,8,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - ValueDelta int64 `protobuf:"varint,9,opt,name=value_delta,json=valueDelta,proto3" json:"value_delta,omitempty"` - OccurredAtMs int64 `protobuf:"varint,10,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - DimensionsJson string `protobuf:"bytes,11,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + SourceEventId string `protobuf:"bytes,3,opt,name=source_event_id,json=sourceEventId,proto3" json:"source_event_id,omitempty"` + SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` + SourceEventType string `protobuf:"bytes,5,opt,name=source_event_type,json=sourceEventType,proto3" json:"source_event_type,omitempty"` + UserId int64 `protobuf:"varint,6,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Track string `protobuf:"bytes,7,opt,name=track,proto3" json:"track,omitempty"` + MetricType string `protobuf:"bytes,8,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + ValueDelta int64 `protobuf:"varint,9,opt,name=value_delta,json=valueDelta,proto3" json:"value_delta,omitempty"` + OccurredAtMs int64 `protobuf:"varint,10,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + DimensionsJson string `protobuf:"bytes,11,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeLevelEventRequest) Reset() { @@ -13488,16 +13321,15 @@ func (x *ConsumeLevelEventRequest) GetDimensionsJson() string { } type ConsumeLevelEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - LevelChanged bool `protobuf:"varint,3,opt,name=level_changed,json=levelChanged,proto3" json:"level_changed,omitempty"` - PreviousLevel int32 `protobuf:"varint,4,opt,name=previous_level,json=previousLevel,proto3" json:"previous_level,omitempty"` - NewLevel int32 `protobuf:"varint,5,opt,name=new_level,json=newLevel,proto3" json:"new_level,omitempty"` - RewardJobCount int64 `protobuf:"varint,6,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + LevelChanged bool `protobuf:"varint,3,opt,name=level_changed,json=levelChanged,proto3" json:"level_changed,omitempty"` + PreviousLevel int32 `protobuf:"varint,4,opt,name=previous_level,json=previousLevel,proto3" json:"previous_level,omitempty"` + NewLevel int32 `protobuf:"varint,5,opt,name=new_level,json=newLevel,proto3" json:"new_level,omitempty"` + RewardJobCount int64 `protobuf:"varint,6,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeLevelEventResponse) Reset() { @@ -13573,17 +13405,16 @@ func (x *ConsumeLevelEventResponse) GetRewardJobCount() int64 { } type SetUserLevelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Track string `protobuf:"bytes,4,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` - OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Track string `protobuf:"bytes,4,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` + OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetUserLevelRequest) Reset() { @@ -13666,18 +13497,17 @@ func (x *SetUserLevelRequest) GetReason() string { } type SetUserLevelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` - PreviousLevel int32 `protobuf:"varint,4,opt,name=previous_level,json=previousLevel,proto3" json:"previous_level,omitempty"` - NewLevel int32 `protobuf:"varint,5,opt,name=new_level,json=newLevel,proto3" json:"new_level,omitempty"` - TotalValue int64 `protobuf:"varint,6,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` - RewardJobCount int64 `protobuf:"varint,7,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` - ServerTimeMs int64 `protobuf:"varint,8,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` + PreviousLevel int32 `protobuf:"varint,4,opt,name=previous_level,json=previousLevel,proto3" json:"previous_level,omitempty"` + NewLevel int32 `protobuf:"varint,5,opt,name=new_level,json=newLevel,proto3" json:"new_level,omitempty"` + TotalValue int64 `protobuf:"varint,6,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` + RewardJobCount int64 `protobuf:"varint,7,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` + ServerTimeMs int64 `protobuf:"varint,8,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetUserLevelResponse) Reset() { @@ -13768,19 +13598,18 @@ func (x *SetUserLevelResponse) GetServerTimeMs() int64 { // AdminLevelTrackProfile keeps the permanent account and the currently effective display overlay separate. type AdminLevelTrackProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - RealLevel int32 `protobuf:"varint,2,opt,name=real_level,json=realLevel,proto3" json:"real_level,omitempty"` - RealTotalValue int64 `protobuf:"varint,3,opt,name=real_total_value,json=realTotalValue,proto3" json:"real_total_value,omitempty"` - DisplayLevel int32 `protobuf:"varint,4,opt,name=display_level,json=displayLevel,proto3" json:"display_level,omitempty"` - DisplayValue int64 `protobuf:"varint,5,opt,name=display_value,json=displayValue,proto3" json:"display_value,omitempty"` - TemporaryLevelId string `protobuf:"bytes,6,opt,name=temporary_level_id,json=temporaryLevelId,proto3" json:"temporary_level_id,omitempty"` - TemporaryTargetLevel int32 `protobuf:"varint,7,opt,name=temporary_target_level,json=temporaryTargetLevel,proto3" json:"temporary_target_level,omitempty"` - StartedAtMs int64 `protobuf:"varint,8,opt,name=started_at_ms,json=startedAtMs,proto3" json:"started_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + RealLevel int32 `protobuf:"varint,2,opt,name=real_level,json=realLevel,proto3" json:"real_level,omitempty"` + RealTotalValue int64 `protobuf:"varint,3,opt,name=real_total_value,json=realTotalValue,proto3" json:"real_total_value,omitempty"` + DisplayLevel int32 `protobuf:"varint,4,opt,name=display_level,json=displayLevel,proto3" json:"display_level,omitempty"` + DisplayValue int64 `protobuf:"varint,5,opt,name=display_value,json=displayValue,proto3" json:"display_value,omitempty"` + TemporaryLevelId string `protobuf:"bytes,6,opt,name=temporary_level_id,json=temporaryLevelId,proto3" json:"temporary_level_id,omitempty"` + TemporaryTargetLevel int32 `protobuf:"varint,7,opt,name=temporary_target_level,json=temporaryTargetLevel,proto3" json:"temporary_target_level,omitempty"` + StartedAtMs int64 `protobuf:"varint,8,opt,name=started_at_ms,json=startedAtMs,proto3" json:"started_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminLevelTrackProfile) Reset() { @@ -13877,12 +13706,11 @@ func (x *AdminLevelTrackProfile) GetExpiresAtMs() int64 { } type AdminUserLevelProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Tracks []*AdminLevelTrackProfile `protobuf:"bytes,2,rep,name=tracks,proto3" json:"tracks,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Tracks []*AdminLevelTrackProfile `protobuf:"bytes,2,rep,name=tracks,proto3" json:"tracks,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUserLevelProfile) Reset() { @@ -13930,12 +13758,11 @@ func (x *AdminUserLevelProfile) GetTracks() []*AdminLevelTrackProfile { } type BatchGetUserLevelAdminProfilesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserLevelAdminProfilesRequest) Reset() { @@ -13983,12 +13810,11 @@ func (x *BatchGetUserLevelAdminProfilesRequest) GetUserIds() []int64 { } type BatchGetUserLevelAdminProfilesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Profiles []*AdminUserLevelProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Profiles []*AdminUserLevelProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserLevelAdminProfilesResponse) Reset() { @@ -14037,13 +13863,12 @@ func (x *BatchGetUserLevelAdminProfilesResponse) GetServerTimeMs() int64 { // TemporaryLevelAdjustment is limited to wealth/charm; duration_days must be positive and level is 1..50. type TemporaryLevelAdjustment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + DurationDays int32 `protobuf:"varint,3,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - DurationDays int32 `protobuf:"varint,3,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TemporaryLevelAdjustment) Reset() { @@ -14098,16 +13923,15 @@ func (x *TemporaryLevelAdjustment) GetDurationDays() int32 { } type AdjustTemporaryUserLevelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` Adjustments []*TemporaryLevelAdjustment `protobuf:"bytes,4,rep,name=adjustments,proto3" json:"adjustments,omitempty"` OperatorAdminId int64 `protobuf:"varint,5,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdjustTemporaryUserLevelsRequest) Reset() { @@ -14183,12 +14007,11 @@ func (x *AdjustTemporaryUserLevelsRequest) GetReason() string { } type AdjustTemporaryUserLevelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Profile *AdminUserLevelProfile `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Profile *AdminUserLevelProfile `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdjustTemporaryUserLevelsResponse) Reset() { @@ -14236,14 +14059,13 @@ func (x *AdjustTemporaryUserLevelsResponse) GetServerTimeMs() int64 { } type RegistrationLevelBadgeGrant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + GrantId string `protobuf:"bytes,4,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` unknownFields protoimpl.UnknownFields - - Track string `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - GrantId string `protobuf:"bytes,4,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegistrationLevelBadgeGrant) Reset() { @@ -14305,13 +14127,12 @@ func (x *RegistrationLevelBadgeGrant) GetGrantId() string { } type IssueRegistrationLevelBadgesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *IssueRegistrationLevelBadgesRequest) Reset() { @@ -14366,12 +14187,11 @@ func (x *IssueRegistrationLevelBadgesRequest) GetCommandId() string { } type IssueRegistrationLevelBadgesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Grants []*RegistrationLevelBadgeGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Grants []*RegistrationLevelBadgeGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *IssueRegistrationLevelBadgesResponse) Reset() { @@ -14419,16 +14239,15 @@ func (x *IssueRegistrationLevelBadgesResponse) GetServerTimeMs() int64 { } type UpsertLevelTrackRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - DisplayConfigJson string `protobuf:"bytes,6,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + DisplayConfigJson string `protobuf:"bytes,6,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertLevelTrackRequest) Reset() { @@ -14504,12 +14323,11 @@ func (x *UpsertLevelTrackRequest) GetDisplayConfigJson() string { } type UpsertLevelTrackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Track *LevelTrack `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Track *LevelTrack `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertLevelTrackResponse) Reset() { @@ -14557,20 +14375,19 @@ func (x *UpsertLevelTrackResponse) GetCreated() bool { } type UpsertLevelRuleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` - Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` - RequiredValue int64 `protobuf:"varint,4,opt,name=required_value,json=requiredValue,proto3" json:"required_value,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,7,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - SortOrder int32 `protobuf:"varint,8,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - DisplayConfigJson string `protobuf:"bytes,9,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` - OperatorAdminId int64 `protobuf:"varint,10,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` + Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` + RequiredValue int64 `protobuf:"varint,4,opt,name=required_value,json=requiredValue,proto3" json:"required_value,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,7,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + SortOrder int32 `protobuf:"varint,8,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + DisplayConfigJson string `protobuf:"bytes,9,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + OperatorAdminId int64 `protobuf:"varint,10,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertLevelRuleRequest) Reset() { @@ -14674,12 +14491,11 @@ func (x *UpsertLevelRuleRequest) GetOperatorAdminId() int64 { } type UpsertLevelRuleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rule *LevelRule `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Rule *LevelRule `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertLevelRuleResponse) Reset() { @@ -14727,22 +14543,21 @@ func (x *UpsertLevelRuleResponse) GetCreated() bool { } type UpsertLevelTierRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TierId int64 `protobuf:"varint,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` - MinLevel int32 `protobuf:"varint,4,opt,name=min_level,json=minLevel,proto3" json:"min_level,omitempty"` - MaxLevel int32 `protobuf:"varint,5,opt,name=max_level,json=maxLevel,proto3" json:"max_level,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - DisplayAvatarFrameResourceId int64 `protobuf:"varint,7,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` - DisplayBadgeResourceId int64 `protobuf:"varint,8,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,9,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` - DisplayConfigJson string `protobuf:"bytes,11,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` - OperatorAdminId int64 `protobuf:"varint,12,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TierId int64 `protobuf:"varint,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + Track string `protobuf:"bytes,3,opt,name=track,proto3" json:"track,omitempty"` + MinLevel int32 `protobuf:"varint,4,opt,name=min_level,json=minLevel,proto3" json:"min_level,omitempty"` + MaxLevel int32 `protobuf:"varint,5,opt,name=max_level,json=maxLevel,proto3" json:"max_level,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + DisplayAvatarFrameResourceId int64 `protobuf:"varint,7,opt,name=display_avatar_frame_resource_id,json=displayAvatarFrameResourceId,proto3" json:"display_avatar_frame_resource_id,omitempty"` + DisplayBadgeResourceId int64 `protobuf:"varint,8,opt,name=display_badge_resource_id,json=displayBadgeResourceId,proto3" json:"display_badge_resource_id,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,9,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` + DisplayConfigJson string `protobuf:"bytes,11,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + OperatorAdminId int64 `protobuf:"varint,12,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertLevelTierRequest) Reset() { @@ -14860,12 +14675,11 @@ func (x *UpsertLevelTierRequest) GetOperatorAdminId() int64 { } type UpsertLevelTierResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tier *LevelTier `protobuf:"bytes,1,opt,name=tier,proto3" json:"tier,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Tier *LevelTier `protobuf:"bytes,1,opt,name=tier,proto3" json:"tier,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertLevelTierResponse) Reset() { @@ -14915,14 +14729,13 @@ func (x *UpsertLevelTierResponse) GetCreated() bool { // BatchUpsertLevelConfigRequest 把同一次运营编辑中的规则和等级段合并成一个原子命令。 // rules/tiers 复用完整配置 DTO;服务端忽略其中审计和时间字段,统一使用外层操作人。 type BatchUpsertLevelConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` - Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` - OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` + Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchUpsertLevelConfigRequest) Reset() { @@ -14984,13 +14797,12 @@ func (x *BatchUpsertLevelConfigRequest) GetOperatorAdminId() int64 { } type BatchUpsertLevelConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rules []*LevelRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + Tiers []*LevelTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rules []*LevelRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` - Tiers []*LevelTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchUpsertLevelConfigResponse) Reset() { @@ -15046,13 +14858,12 @@ func (x *BatchUpsertLevelConfigResponse) GetServerTimeMs() int64 { // ListLevelConfigRequest 是后台等级配置页的配置读取请求;不绑定具体用户进度。 type ListLevelConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Track string `protobuf:"bytes,2,opt,name=track,proto3" json:"track,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLevelConfigRequest) Reset() { @@ -15107,14 +14918,13 @@ func (x *ListLevelConfigRequest) GetStatus() string { } type ListLevelConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tracks []*LevelTrack `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"` + Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` + Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Tracks []*LevelTrack `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"` - Rules []*LevelRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` - Tiers []*LevelTier `protobuf:"bytes,3,rep,name=tiers,proto3" json:"tiers,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLevelConfigResponse) Reset() { @@ -15176,17 +14986,16 @@ func (x *ListLevelConfigResponse) GetServerTimeMs() int64 { } type AchievementCondition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ConditionId string `protobuf:"bytes,1,opt,name=condition_id,json=conditionId,proto3" json:"condition_id,omitempty"` - AchievementId string `protobuf:"bytes,2,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` - Version int64 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` - MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - TargetValue int64 `protobuf:"varint,5,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` - TargetUnit string `protobuf:"bytes,6,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` - DimensionFilterJson string `protobuf:"bytes,7,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ConditionId string `protobuf:"bytes,1,opt,name=condition_id,json=conditionId,proto3" json:"condition_id,omitempty"` + AchievementId string `protobuf:"bytes,2,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` + Version int64 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` + MetricType string `protobuf:"bytes,4,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + TargetValue int64 `protobuf:"varint,5,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + TargetUnit string `protobuf:"bytes,6,opt,name=target_unit,json=targetUnit,proto3" json:"target_unit,omitempty"` + DimensionFilterJson string `protobuf:"bytes,7,opt,name=dimension_filter_json,json=dimensionFilterJson,proto3" json:"dimension_filter_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AchievementCondition) Reset() { @@ -15269,10 +15078,7 @@ func (x *AchievementCondition) GetDimensionFilterJson() string { } type AchievementDefinition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AchievementId string `protobuf:"bytes,1,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` CollectionType string `protobuf:"bytes,3,opt,name=collection_type,json=collectionType,proto3" json:"collection_type,omitempty"` @@ -15294,6 +15100,8 @@ type AchievementDefinition struct { CreatedAtMs int64 `protobuf:"varint,19,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,20,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` Conditions []*AchievementCondition `protobuf:"bytes,21,rep,name=conditions,proto3" json:"conditions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AchievementDefinition) Reset() { @@ -15474,10 +15282,7 @@ func (x *AchievementDefinition) GetConditions() []*AchievementCondition { } type UserAchievement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Definition *AchievementDefinition `protobuf:"bytes,1,opt,name=definition,proto3" json:"definition,omitempty"` CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` ProgressValue int64 `protobuf:"varint,3,opt,name=progress_value,json=progressValue,proto3" json:"progress_value,omitempty"` @@ -15485,6 +15290,8 @@ type UserAchievement struct { UserStatus string `protobuf:"bytes,5,opt,name=user_status,json=userStatus,proto3" json:"user_status,omitempty"` UnlockedAtMs int64 `protobuf:"varint,6,opt,name=unlocked_at_ms,json=unlockedAtMs,proto3" json:"unlocked_at_ms,omitempty"` RewardStatus string `protobuf:"bytes,7,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserAchievement) Reset() { @@ -15567,16 +15374,15 @@ func (x *UserAchievement) GetRewardStatus() string { } type ListAchievementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CollectionType string `protobuf:"bytes,3,opt,name=collection_type,json=collectionType,proto3" json:"collection_type,omitempty"` - CollectionId string `protobuf:"bytes,4,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CollectionType string `protobuf:"bytes,3,opt,name=collection_type,json=collectionType,proto3" json:"collection_type,omitempty"` + CollectionId string `protobuf:"bytes,4,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListAchievementsRequest) Reset() { @@ -15652,13 +15458,12 @@ func (x *ListAchievementsRequest) GetPageSize() int32 { } type ListAchievementsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Achievements []*UserAchievement `protobuf:"bytes,1,rep,name=achievements,proto3" json:"achievements,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Achievements []*UserAchievement `protobuf:"bytes,1,rep,name=achievements,proto3" json:"achievements,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAchievementsResponse) Reset() { @@ -15713,19 +15518,18 @@ func (x *ListAchievementsResponse) GetServerTimeMs() int64 { } type ConsumeAchievementEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MetricType string `protobuf:"bytes,6,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Value int64 `protobuf:"varint,7,opt,name=value,proto3" json:"value,omitempty"` - OccurredAtMs int64 `protobuf:"varint,8,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - DimensionsJson string `protobuf:"bytes,9,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + SourceService string `protobuf:"bytes,4,opt,name=source_service,json=sourceService,proto3" json:"source_service,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MetricType string `protobuf:"bytes,6,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Value int64 `protobuf:"varint,7,opt,name=value,proto3" json:"value,omitempty"` + OccurredAtMs int64 `protobuf:"varint,8,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + DimensionsJson string `protobuf:"bytes,9,opt,name=dimensions_json,json=dimensionsJson,proto3" json:"dimensions_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeAchievementEventRequest) Reset() { @@ -15822,15 +15626,14 @@ func (x *ConsumeAchievementEventRequest) GetDimensionsJson() string { } type ConsumeAchievementEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - MatchedAchievementCount int32 `protobuf:"varint,3,opt,name=matched_achievement_count,json=matchedAchievementCount,proto3" json:"matched_achievement_count,omitempty"` - UnlockedAchievementCount int32 `protobuf:"varint,4,opt,name=unlocked_achievement_count,json=unlockedAchievementCount,proto3" json:"unlocked_achievement_count,omitempty"` - RewardJobCount int64 `protobuf:"varint,5,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + MatchedAchievementCount int32 `protobuf:"varint,3,opt,name=matched_achievement_count,json=matchedAchievementCount,proto3" json:"matched_achievement_count,omitempty"` + UnlockedAchievementCount int32 `protobuf:"varint,4,opt,name=unlocked_achievement_count,json=unlockedAchievementCount,proto3" json:"unlocked_achievement_count,omitempty"` + RewardJobCount int64 `protobuf:"varint,5,opt,name=reward_job_count,json=rewardJobCount,proto3" json:"reward_job_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumeAchievementEventResponse) Reset() { @@ -15899,19 +15702,18 @@ func (x *ConsumeAchievementEventResponse) GetRewardJobCount() int64 { } type BadgeDisplayItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Slot string `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"` + Position int32 `protobuf:"varint,2,opt,name=position,proto3" json:"position,omitempty"` + BadgeForm string `protobuf:"bytes,3,opt,name=badge_form,json=badgeForm,proto3" json:"badge_form,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + EntitlementId string `protobuf:"bytes,5,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + SourceType string `protobuf:"bytes,6,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"` + SourceId string `protobuf:"bytes,7,opt,name=source_id,json=sourceId,proto3" json:"source_id,omitempty"` + PinMode string `protobuf:"bytes,8,opt,name=pin_mode,json=pinMode,proto3" json:"pin_mode,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Slot string `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"` - Position int32 `protobuf:"varint,2,opt,name=position,proto3" json:"position,omitempty"` - BadgeForm string `protobuf:"bytes,3,opt,name=badge_form,json=badgeForm,proto3" json:"badge_form,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - EntitlementId string `protobuf:"bytes,5,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - SourceType string `protobuf:"bytes,6,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"` - SourceId string `protobuf:"bytes,7,opt,name=source_id,json=sourceId,proto3" json:"source_id,omitempty"` - PinMode string `protobuf:"bytes,8,opt,name=pin_mode,json=pinMode,proto3" json:"pin_mode,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BadgeDisplayItem) Reset() { @@ -16008,12 +15810,11 @@ func (x *BadgeDisplayItem) GetUpdatedAtMs() int64 { } type ListMyBadgesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListMyBadgesRequest) Reset() { @@ -16061,14 +15862,13 @@ func (x *ListMyBadgesRequest) GetUserId() int64 { } type ListMyBadgesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StripBadges []*BadgeDisplayItem `protobuf:"bytes,1,rep,name=strip_badges,json=stripBadges,proto3" json:"strip_badges,omitempty"` - ProfileTileBadges []*BadgeDisplayItem `protobuf:"bytes,2,rep,name=profile_tile_badges,json=profileTileBadges,proto3" json:"profile_tile_badges,omitempty"` - HonorBadges []*BadgeDisplayItem `protobuf:"bytes,3,rep,name=honor_badges,json=honorBadges,proto3" json:"honor_badges,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StripBadges []*BadgeDisplayItem `protobuf:"bytes,1,rep,name=strip_badges,json=stripBadges,proto3" json:"strip_badges,omitempty"` + ProfileTileBadges []*BadgeDisplayItem `protobuf:"bytes,2,rep,name=profile_tile_badges,json=profileTileBadges,proto3" json:"profile_tile_badges,omitempty"` + HonorBadges []*BadgeDisplayItem `protobuf:"bytes,3,rep,name=honor_badges,json=honorBadges,proto3" json:"honor_badges,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListMyBadgesResponse) Reset() { @@ -16130,15 +15930,14 @@ func (x *ListMyBadgesResponse) GetServerTimeMs() int64 { } type SetBadgeDisplayRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Slot string `protobuf:"bytes,3,opt,name=slot,proto3" json:"slot,omitempty"` + Items []*BadgeDisplayItem `protobuf:"bytes,4,rep,name=items,proto3" json:"items,omitempty"` + CommandId string `protobuf:"bytes,5,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Slot string `protobuf:"bytes,3,opt,name=slot,proto3" json:"slot,omitempty"` - Items []*BadgeDisplayItem `protobuf:"bytes,4,rep,name=items,proto3" json:"items,omitempty"` - CommandId string `protobuf:"bytes,5,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetBadgeDisplayRequest) Reset() { @@ -16207,11 +16006,10 @@ func (x *SetBadgeDisplayRequest) GetCommandId() string { } type SetBadgeDisplayResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Profile *ListMyBadgesResponse `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"` unknownFields protoimpl.UnknownFields - - Profile *ListMyBadgesResponse `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetBadgeDisplayResponse) Reset() { @@ -16252,10 +16050,7 @@ func (x *SetBadgeDisplayResponse) GetProfile() *ListMyBadgesResponse { } type UpsertAchievementDefinitionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` AchievementId string `protobuf:"bytes,2,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` CollectionId string `protobuf:"bytes,3,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` @@ -16274,6 +16069,8 @@ type UpsertAchievementDefinitionRequest struct { DisplayConfigJson string `protobuf:"bytes,16,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` OperatorAdminId int64 `protobuf:"varint,17,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` Conditions []*AchievementCondition `protobuf:"bytes,18,rep,name=conditions,proto3" json:"conditions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertAchievementDefinitionRequest) Reset() { @@ -16433,12 +16230,11 @@ func (x *UpsertAchievementDefinitionRequest) GetConditions() []*AchievementCondi } type UpsertAchievementDefinitionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Achievement *AchievementDefinition `protobuf:"bytes,1,opt,name=achievement,proto3" json:"achievement,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Achievement *AchievementDefinition `protobuf:"bytes,1,opt,name=achievement,proto3" json:"achievement,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertAchievementDefinitionResponse) Reset() { @@ -16486,13 +16282,12 @@ func (x *UpsertAchievementDefinitionResponse) GetCreated() bool { } type DeleteAchievementDefinitionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AchievementId string `protobuf:"bytes,2,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AchievementId string `protobuf:"bytes,2,opt,name=achievement_id,json=achievementId,proto3" json:"achievement_id,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteAchievementDefinitionRequest) Reset() { @@ -16547,11 +16342,10 @@ func (x *DeleteAchievementDefinitionRequest) GetOperatorAdminId() int64 { } type DeleteAchievementDefinitionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Achievement *AchievementDefinition `protobuf:"bytes,1,opt,name=achievement,proto3" json:"achievement,omitempty"` unknownFields protoimpl.UnknownFields - - Achievement *AchievementDefinition `protobuf:"bytes,1,opt,name=achievement,proto3" json:"achievement,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteAchievementDefinitionResponse) Reset() { @@ -16592,20 +16386,19 @@ func (x *DeleteAchievementDefinitionResponse) GetAchievement() *AchievementDefin } type WheelPrizeTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TierId string `protobuf:"bytes,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + RewardId string `protobuf:"bytes,4,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` + RewardCount int64 `protobuf:"varint,5,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` + RewardCoins int64 `protobuf:"varint,6,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + RtpValueCoins int64 `protobuf:"varint,7,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` + WeightPpm int64 `protobuf:"varint,8,opt,name=weight_ppm,json=weightPpm,proto3" json:"weight_ppm,omitempty"` + Enabled bool `protobuf:"varint,9,opt,name=enabled,proto3" json:"enabled,omitempty"` + MetadataJson string `protobuf:"bytes,10,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` unknownFields protoimpl.UnknownFields - - TierId string `protobuf:"bytes,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - RewardType string `protobuf:"bytes,3,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - RewardId string `protobuf:"bytes,4,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` - RewardCount int64 `protobuf:"varint,5,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` - RewardCoins int64 `protobuf:"varint,6,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` - RtpValueCoins int64 `protobuf:"varint,7,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` - WeightPpm int64 `protobuf:"varint,8,opt,name=weight_ppm,json=weightPpm,proto3" json:"weight_ppm,omitempty"` - Enabled bool `protobuf:"varint,9,opt,name=enabled,proto3" json:"enabled,omitempty"` - MetadataJson string `protobuf:"bytes,10,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WheelPrizeTier) Reset() { @@ -16709,25 +16502,24 @@ func (x *WheelPrizeTier) GetMetadataJson() string { } type WheelRuleConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - RuleVersion int64 `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` - DrawPriceCoins int64 `protobuf:"varint,5,opt,name=draw_price_coins,json=drawPriceCoins,proto3" json:"draw_price_coins,omitempty"` - TargetRtpPpm int64 `protobuf:"varint,6,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` - PoolRatePpm int64 `protobuf:"varint,7,opt,name=pool_rate_ppm,json=poolRatePpm,proto3" json:"pool_rate_ppm,omitempty"` - SettlementWindowDraws int64 `protobuf:"varint,8,opt,name=settlement_window_draws,json=settlementWindowDraws,proto3" json:"settlement_window_draws,omitempty"` - InitialPoolCoins int64 `protobuf:"varint,9,opt,name=initial_pool_coins,json=initialPoolCoins,proto3" json:"initial_pool_coins,omitempty"` - PoolReserveCoins int64 `protobuf:"varint,10,opt,name=pool_reserve_coins,json=poolReserveCoins,proto3" json:"pool_reserve_coins,omitempty"` - MaxSingleRtpPayout int64 `protobuf:"varint,11,opt,name=max_single_rtp_payout,json=maxSingleRtpPayout,proto3" json:"max_single_rtp_payout,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,12,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - Tiers []*WheelPrizeTier `protobuf:"bytes,15,rep,name=tiers,proto3" json:"tiers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + RuleVersion int64 `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` + DrawPriceCoins int64 `protobuf:"varint,5,opt,name=draw_price_coins,json=drawPriceCoins,proto3" json:"draw_price_coins,omitempty"` + TargetRtpPpm int64 `protobuf:"varint,6,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` + PoolRatePpm int64 `protobuf:"varint,7,opt,name=pool_rate_ppm,json=poolRatePpm,proto3" json:"pool_rate_ppm,omitempty"` + SettlementWindowDraws int64 `protobuf:"varint,8,opt,name=settlement_window_draws,json=settlementWindowDraws,proto3" json:"settlement_window_draws,omitempty"` + InitialPoolCoins int64 `protobuf:"varint,9,opt,name=initial_pool_coins,json=initialPoolCoins,proto3" json:"initial_pool_coins,omitempty"` + PoolReserveCoins int64 `protobuf:"varint,10,opt,name=pool_reserve_coins,json=poolReserveCoins,proto3" json:"pool_reserve_coins,omitempty"` + MaxSingleRtpPayout int64 `protobuf:"varint,11,opt,name=max_single_rtp_payout,json=maxSingleRtpPayout,proto3" json:"max_single_rtp_payout,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,12,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + Tiers []*WheelPrizeTier `protobuf:"bytes,15,rep,name=tiers,proto3" json:"tiers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WheelRuleConfig) Reset() { @@ -16866,19 +16658,18 @@ func (x *WheelRuleConfig) GetTiers() []*WheelPrizeTier { } type WheelDrawMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - WheelId string `protobuf:"bytes,3,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DeviceId string `protobuf:"bytes,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - DrawCount int32 `protobuf:"varint,6,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"` - CoinSpent int64 `protobuf:"varint,7,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - PaidAtMs int64 `protobuf:"varint,8,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` - VisibleRegionId int64 `protobuf:"varint,9,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + WheelId string `protobuf:"bytes,3,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DeviceId string `protobuf:"bytes,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + DrawCount int32 `protobuf:"varint,6,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"` + CoinSpent int64 `protobuf:"varint,7,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + PaidAtMs int64 `protobuf:"varint,8,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` + VisibleRegionId int64 `protobuf:"varint,9,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WheelDrawMeta) Reset() { @@ -16975,29 +16766,28 @@ func (x *WheelDrawMeta) GetVisibleRegionId() int64 { } type WheelDrawResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - DrawIds []string `protobuf:"bytes,2,rep,name=draw_ids,json=drawIds,proto3" json:"draw_ids,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - WheelId string `protobuf:"bytes,4,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - RuleVersion int64 `protobuf:"varint,5,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - SelectedTierId string `protobuf:"bytes,6,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - RewardType string `protobuf:"bytes,7,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - RewardId string `protobuf:"bytes,8,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` - RewardCount int64 `protobuf:"varint,9,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` - RewardCoins int64 `protobuf:"varint,10,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` - RtpValueCoins int64 `protobuf:"varint,11,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` - RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - RtpWindowIndex int64 `protobuf:"varint,13,opt,name=rtp_window_index,json=rtpWindowIndex,proto3" json:"rtp_window_index,omitempty"` - ActualRtpPpm int64 `protobuf:"varint,14,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,17,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - MetadataJson string `protobuf:"bytes,18,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - Rewards []*WheelDrawReward `protobuf:"bytes,19,rep,name=rewards,proto3" json:"rewards,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + DrawIds []string `protobuf:"bytes,2,rep,name=draw_ids,json=drawIds,proto3" json:"draw_ids,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + WheelId string `protobuf:"bytes,4,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + RuleVersion int64 `protobuf:"varint,5,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + SelectedTierId string `protobuf:"bytes,6,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + RewardType string `protobuf:"bytes,7,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + RewardId string `protobuf:"bytes,8,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` + RewardCount int64 `protobuf:"varint,9,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` + RewardCoins int64 `protobuf:"varint,10,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + RtpValueCoins int64 `protobuf:"varint,11,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` + RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + RtpWindowIndex int64 `protobuf:"varint,13,opt,name=rtp_window_index,json=rtpWindowIndex,proto3" json:"rtp_window_index,omitempty"` + ActualRtpPpm int64 `protobuf:"varint,14,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,17,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + MetadataJson string `protobuf:"bytes,18,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + Rewards []*WheelDrawReward `protobuf:"bytes,19,rep,name=rewards,proto3" json:"rewards,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WheelDrawResult) Reset() { @@ -17164,18 +16954,17 @@ func (x *WheelDrawResult) GetRewards() []*WheelDrawReward { } type WheelDrawReward struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SelectedTierId string `protobuf:"bytes,1,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - RewardType string `protobuf:"bytes,2,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - RewardId string `protobuf:"bytes,3,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` - RewardCount int64 `protobuf:"varint,4,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` - RewardCoins int64 `protobuf:"varint,5,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` - RtpValueCoins int64 `protobuf:"varint,6,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` - RewardStatus string `protobuf:"bytes,7,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - MetadataJson string `protobuf:"bytes,8,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SelectedTierId string `protobuf:"bytes,1,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + RewardType string `protobuf:"bytes,2,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + RewardId string `protobuf:"bytes,3,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` + RewardCount int64 `protobuf:"varint,4,opt,name=reward_count,json=rewardCount,proto3" json:"reward_count,omitempty"` + RewardCoins int64 `protobuf:"varint,5,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + RtpValueCoins int64 `protobuf:"varint,6,opt,name=rtp_value_coins,json=rtpValueCoins,proto3" json:"rtp_value_coins,omitempty"` + RewardStatus string `protobuf:"bytes,7,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + MetadataJson string `protobuf:"bytes,8,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WheelDrawReward) Reset() { @@ -17265,11 +17054,10 @@ func (x *WheelDrawReward) GetMetadataJson() string { } type ExecuteWheelDrawRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Wheel *WheelDrawMeta `protobuf:"bytes,1,opt,name=wheel,proto3" json:"wheel,omitempty"` unknownFields protoimpl.UnknownFields - - Wheel *WheelDrawMeta `protobuf:"bytes,1,opt,name=wheel,proto3" json:"wheel,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExecuteWheelDrawRequest) Reset() { @@ -17310,11 +17098,10 @@ func (x *ExecuteWheelDrawRequest) GetWheel() *WheelDrawMeta { } type ExecuteWheelDrawResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *WheelDrawResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields - - Result *WheelDrawResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExecuteWheelDrawResponse) Reset() { @@ -17355,12 +17142,11 @@ func (x *ExecuteWheelDrawResponse) GetResult() *WheelDrawResult { } type GetWheelConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWheelConfigRequest) Reset() { @@ -17408,11 +17194,10 @@ func (x *GetWheelConfigRequest) GetWheelId() string { } type GetWheelConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *WheelRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *WheelRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWheelConfigResponse) Reset() { @@ -17453,13 +17238,12 @@ func (x *GetWheelConfigResponse) GetConfig() *WheelRuleConfig { } type UpsertWheelConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *WheelRuleConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *WheelRuleConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertWheelConfigRequest) Reset() { @@ -17514,11 +17298,10 @@ func (x *UpsertWheelConfigRequest) GetOperatorAdminId() int64 { } type UpsertWheelConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *WheelRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *WheelRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertWheelConfigResponse) Reset() { @@ -17559,16 +17342,15 @@ func (x *UpsertWheelConfigResponse) GetConfig() *WheelRuleConfig { } type ListWheelDrawsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWheelDrawsRequest) Reset() { @@ -17644,12 +17426,11 @@ func (x *ListWheelDrawsRequest) GetPageSize() int32 { } type ListWheelDrawsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Draws []*WheelDrawResult `protobuf:"bytes,1,rep,name=draws,proto3" json:"draws,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Draws []*WheelDrawResult `protobuf:"bytes,1,rep,name=draws,proto3" json:"draws,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWheelDrawsResponse) Reset() { @@ -17697,19 +17478,18 @@ func (x *ListWheelDrawsResponse) GetTotal() int64 { } type WheelDrawSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WheelId string `protobuf:"bytes,1,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - TotalDraws int64 `protobuf:"varint,2,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"` - UniqueUsers int64 `protobuf:"varint,3,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"` - TotalSpentCoins int64 `protobuf:"varint,4,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"` - TotalRtpValueCoins int64 `protobuf:"varint,5,opt,name=total_rtp_value_coins,json=totalRtpValueCoins,proto3" json:"total_rtp_value_coins,omitempty"` - ActualRtpPpm int64 `protobuf:"varint,6,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` - PendingDraws int64 `protobuf:"varint,7,opt,name=pending_draws,json=pendingDraws,proto3" json:"pending_draws,omitempty"` - GrantedDraws int64 `protobuf:"varint,8,opt,name=granted_draws,json=grantedDraws,proto3" json:"granted_draws,omitempty"` - FailedDraws int64 `protobuf:"varint,9,opt,name=failed_draws,json=failedDraws,proto3" json:"failed_draws,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + WheelId string `protobuf:"bytes,1,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + TotalDraws int64 `protobuf:"varint,2,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"` + UniqueUsers int64 `protobuf:"varint,3,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"` + TotalSpentCoins int64 `protobuf:"varint,4,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"` + TotalRtpValueCoins int64 `protobuf:"varint,5,opt,name=total_rtp_value_coins,json=totalRtpValueCoins,proto3" json:"total_rtp_value_coins,omitempty"` + ActualRtpPpm int64 `protobuf:"varint,6,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` + PendingDraws int64 `protobuf:"varint,7,opt,name=pending_draws,json=pendingDraws,proto3" json:"pending_draws,omitempty"` + GrantedDraws int64 `protobuf:"varint,8,opt,name=granted_draws,json=grantedDraws,proto3" json:"granted_draws,omitempty"` + FailedDraws int64 `protobuf:"varint,9,opt,name=failed_draws,json=failedDraws,proto3" json:"failed_draws,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WheelDrawSummary) Reset() { @@ -17806,14 +17586,13 @@ func (x *WheelDrawSummary) GetFailedDraws() int64 { } type GetWheelDrawSummaryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - WheelId string `protobuf:"bytes,2,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWheelDrawSummaryRequest) Reset() { @@ -17875,11 +17654,10 @@ func (x *GetWheelDrawSummaryRequest) GetStatus() string { } type GetWheelDrawSummaryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Summary *WheelDrawSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` unknownFields protoimpl.UnknownFields - - Summary *WheelDrawSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWheelDrawSummaryResponse) Reset() { @@ -17921,12 +17699,11 @@ func (x *GetWheelDrawSummaryResponse) GetSummary() *WheelDrawSummary { // WeeklyStarGift 是周星周期内参与积分的指定礼物。 type WeeklyStarGift struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GiftId string `protobuf:"bytes,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + SortOrder int32 `protobuf:"varint,2,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` unknownFields protoimpl.UnknownFields - - GiftId string `protobuf:"bytes,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - SortOrder int32 `protobuf:"varint,2,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WeeklyStarGift) Reset() { @@ -17975,12 +17752,11 @@ func (x *WeeklyStarGift) GetSortOrder() int32 { // WeeklyStarReward 是周星 Top 排名对应的资源组奖励。 type WeeklyStarReward struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WeeklyStarReward) Reset() { @@ -18029,25 +17805,24 @@ func (x *WeeklyStarReward) GetResourceGroupId() int64 { // WeeklyStarCycle 是一个按 UTC epoch ms 生效的周星配置周期。 type WeeklyStarCycle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CycleId string `protobuf:"bytes,1,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - ActivityCode string `protobuf:"bytes,2,opt,name=activity_code,json=activityCode,proto3" json:"activity_code,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - StartMs int64 `protobuf:"varint,6,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` - EndMs int64 `protobuf:"varint,7,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` - Gifts []*WeeklyStarGift `protobuf:"bytes,8,rep,name=gifts,proto3" json:"gifts,omitempty"` - Rewards []*WeeklyStarReward `protobuf:"bytes,9,rep,name=rewards,proto3" json:"rewards,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,10,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,11,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - SettledAtMs int64 `protobuf:"varint,12,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - AppCode string `protobuf:"bytes,15,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CycleId string `protobuf:"bytes,1,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + ActivityCode string `protobuf:"bytes,2,opt,name=activity_code,json=activityCode,proto3" json:"activity_code,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + StartMs int64 `protobuf:"varint,6,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,7,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + Gifts []*WeeklyStarGift `protobuf:"bytes,8,rep,name=gifts,proto3" json:"gifts,omitempty"` + Rewards []*WeeklyStarReward `protobuf:"bytes,9,rep,name=rewards,proto3" json:"rewards,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,10,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,11,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + SettledAtMs int64 `protobuf:"varint,12,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + AppCode string `protobuf:"bytes,15,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WeeklyStarCycle) Reset() { @@ -18187,15 +17962,14 @@ func (x *WeeklyStarCycle) GetAppCode() string { // WeeklyStarLeaderboardEntry 是一个周期内用户维度的积分排名。 type WeeklyStarLeaderboardEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` - FirstScoredAtMs int64 `protobuf:"varint,4,opt,name=first_scored_at_ms,json=firstScoredAtMs,proto3" json:"first_scored_at_ms,omitempty"` - LastScoredAtMs int64 `protobuf:"varint,5,opt,name=last_scored_at_ms,json=lastScoredAtMs,proto3" json:"last_scored_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` + FirstScoredAtMs int64 `protobuf:"varint,4,opt,name=first_scored_at_ms,json=firstScoredAtMs,proto3" json:"first_scored_at_ms,omitempty"` + LastScoredAtMs int64 `protobuf:"varint,5,opt,name=last_scored_at_ms,json=lastScoredAtMs,proto3" json:"last_scored_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WeeklyStarLeaderboardEntry) Reset() { @@ -18265,23 +18039,22 @@ func (x *WeeklyStarLeaderboardEntry) GetLastScoredAtMs() int64 { // WeeklyStarSettlement 是周期结束后 Top 奖励发放的幂等记录。 type WeeklyStarSettlement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - RankNo int32 `protobuf:"varint,3,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,5,opt,name=score,proto3" json:"score,omitempty"` - ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - WalletCommandId string `protobuf:"bytes,7,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,8,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` - FailureReason string `protobuf:"bytes,10,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - AttemptCount int32 `protobuf:"varint,11,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` - CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + RankNo int32 `protobuf:"varint,3,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,5,opt,name=score,proto3" json:"score,omitempty"` + ResourceGroupId int64 `protobuf:"varint,6,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,7,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,8,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,10,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + AttemptCount int32 `protobuf:"varint,11,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` + CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WeeklyStarSettlement) Reset() { @@ -18406,17 +18179,16 @@ func (x *WeeklyStarSettlement) GetUpdatedAtMs() int64 { } type ListWeeklyStarCyclesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RegionId int64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + StartMs int64 `protobuf:"varint,4,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,5,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RegionId int64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - StartMs int64 `protobuf:"varint,4,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` - EndMs int64 `protobuf:"varint,5,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarCyclesRequest) Reset() { @@ -18499,12 +18271,11 @@ func (x *ListWeeklyStarCyclesRequest) GetPageSize() int32 { } type ListWeeklyStarCyclesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycles []*WeeklyStarCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Cycles []*WeeklyStarCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarCyclesResponse) Reset() { @@ -18552,12 +18323,11 @@ func (x *ListWeeklyStarCyclesResponse) GetTotal() int64 { } type GetWeeklyStarCycleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWeeklyStarCycleRequest) Reset() { @@ -18605,11 +18375,10 @@ func (x *GetWeeklyStarCycleRequest) GetCycleId() string { } type GetWeeklyStarCycleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWeeklyStarCycleResponse) Reset() { @@ -18650,13 +18419,12 @@ func (x *GetWeeklyStarCycleResponse) GetCycle() *WeeklyStarCycle { } type UpsertWeeklyStarCycleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Cycle *WeeklyStarCycle `protobuf:"bytes,2,opt,name=cycle,proto3" json:"cycle,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Cycle *WeeklyStarCycle `protobuf:"bytes,2,opt,name=cycle,proto3" json:"cycle,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertWeeklyStarCycleRequest) Reset() { @@ -18711,12 +18479,11 @@ func (x *UpsertWeeklyStarCycleRequest) GetOperatorAdminId() int64 { } type UpsertWeeklyStarCycleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertWeeklyStarCycleResponse) Reset() { @@ -18764,14 +18531,13 @@ func (x *UpsertWeeklyStarCycleResponse) GetCreated() bool { } type SetWeeklyStarCycleStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetWeeklyStarCycleStatusRequest) Reset() { @@ -18833,11 +18599,10 @@ func (x *SetWeeklyStarCycleStatusRequest) GetOperatorAdminId() int64 { } type SetWeeklyStarCycleStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetWeeklyStarCycleStatusResponse) Reset() { @@ -18878,15 +18643,14 @@ func (x *SetWeeklyStarCycleStatusResponse) GetCycle() *WeeklyStarCycle { } type ListWeeklyStarLeaderboardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarLeaderboardRequest) Reset() { @@ -18955,14 +18719,13 @@ func (x *ListWeeklyStarLeaderboardRequest) GetPageToken() string { } type ListWeeklyStarLeaderboardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` Entries []*WeeklyStarLeaderboardEntry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` Total int64 `protobuf:"varint,4,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarLeaderboardResponse) Reset() { @@ -19024,12 +18787,11 @@ func (x *ListWeeklyStarLeaderboardResponse) GetTotal() int64 { } type ListWeeklyStarSettlementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarSettlementsRequest) Reset() { @@ -19077,11 +18839,10 @@ func (x *ListWeeklyStarSettlementsRequest) GetCycleId() string { } type ListWeeklyStarSettlementsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Settlements []*WeeklyStarSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` unknownFields protoimpl.UnknownFields - - Settlements []*WeeklyStarSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarSettlementsResponse) Reset() { @@ -19122,13 +18883,12 @@ func (x *ListWeeklyStarSettlementsResponse) GetSettlements() []*WeeklyStarSettle } type GetWeeklyStarCurrentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWeeklyStarCurrentRequest) Reset() { @@ -19183,14 +18943,13 @@ func (x *GetWeeklyStarCurrentRequest) GetRegionId() int64 { } type GetWeeklyStarCurrentResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + TopEntries []*WeeklyStarLeaderboardEntry `protobuf:"bytes,2,rep,name=top_entries,json=topEntries,proto3" json:"top_entries,omitempty"` + MyEntry *WeeklyStarLeaderboardEntry `protobuf:"bytes,3,opt,name=my_entry,json=myEntry,proto3" json:"my_entry,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` - TopEntries []*WeeklyStarLeaderboardEntry `protobuf:"bytes,2,rep,name=top_entries,json=topEntries,proto3" json:"top_entries,omitempty"` - MyEntry *WeeklyStarLeaderboardEntry `protobuf:"bytes,3,opt,name=my_entry,json=myEntry,proto3" json:"my_entry,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWeeklyStarCurrentResponse) Reset() { @@ -19252,13 +19011,12 @@ func (x *GetWeeklyStarCurrentResponse) GetServerTimeMs() int64 { } type ListWeeklyStarHistoryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RegionId int64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RegionId int64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarHistoryRequest) Reset() { @@ -19313,12 +19071,11 @@ func (x *ListWeeklyStarHistoryRequest) GetLimit() int32 { } type WeeklyStarHistoryCycle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + TopEntries []*WeeklyStarLeaderboardEntry `protobuf:"bytes,2,rep,name=top_entries,json=topEntries,proto3" json:"top_entries,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *WeeklyStarCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` - TopEntries []*WeeklyStarLeaderboardEntry `protobuf:"bytes,2,rep,name=top_entries,json=topEntries,proto3" json:"top_entries,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WeeklyStarHistoryCycle) Reset() { @@ -19366,12 +19123,11 @@ func (x *WeeklyStarHistoryCycle) GetTopEntries() []*WeeklyStarLeaderboardEntry { } type ListWeeklyStarHistoryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycles []*WeeklyStarHistoryCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Cycles []*WeeklyStarHistoryCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWeeklyStarHistoryResponse) Reset() { @@ -19420,12 +19176,11 @@ func (x *ListWeeklyStarHistoryResponse) GetServerTimeMs() int64 { // CPWeeklyRankReward 是 CP 周榜名次对应的资源组奖励。 type CPWeeklyRankReward struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CPWeeklyRankReward) Reset() { @@ -19474,19 +19229,18 @@ func (x *CPWeeklyRankReward) GetResourceGroupId() int64 { // CPWeeklyRankConfig 是 CP 周榜的全局启停和 Top 奖励配置。 type CPWeeklyRankConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ActivityCode string `protobuf:"bytes,1,opt,name=activity_code,json=activityCode,proto3" json:"activity_code,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - RelationType string `protobuf:"bytes,3,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` - TopCount int32 `protobuf:"varint,4,opt,name=top_count,json=topCount,proto3" json:"top_count,omitempty"` - Rewards []*CPWeeklyRankReward `protobuf:"bytes,5,rep,name=rewards,proto3" json:"rewards,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,6,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - AppCode string `protobuf:"bytes,9,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ActivityCode string `protobuf:"bytes,1,opt,name=activity_code,json=activityCode,proto3" json:"activity_code,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + RelationType string `protobuf:"bytes,3,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` + TopCount int32 `protobuf:"varint,4,opt,name=top_count,json=topCount,proto3" json:"top_count,omitempty"` + Rewards []*CPWeeklyRankReward `protobuf:"bytes,5,rep,name=rewards,proto3" json:"rewards,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,6,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + AppCode string `protobuf:"bytes,9,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CPWeeklyRankConfig) Reset() { @@ -19584,14 +19338,13 @@ func (x *CPWeeklyRankConfig) GetAppCode() string { // CPWeeklyRankUser 是 H5 周榜展示的一方用户快照。 type CPWeeklyRankUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CPWeeklyRankUser) Reset() { @@ -19654,20 +19407,19 @@ func (x *CPWeeklyRankUser) GetAvatar() string { // CPWeeklyRankEntry 是 activity-service 从 user-service 读取并返回 H5 的周榜条目。 type CPWeeklyRankEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` - RelationshipId string `protobuf:"bytes,2,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` - RelationType string `protobuf:"bytes,3,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` - Score int64 `protobuf:"varint,4,opt,name=score,proto3" json:"score,omitempty"` - UserA *CPWeeklyRankUser `protobuf:"bytes,5,opt,name=user_a,json=userA,proto3" json:"user_a,omitempty"` - UserB *CPWeeklyRankUser `protobuf:"bytes,6,opt,name=user_b,json=userB,proto3" json:"user_b,omitempty"` - FormedAtMs int64 `protobuf:"varint,7,opt,name=formed_at_ms,json=formedAtMs,proto3" json:"formed_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - FirstScoredAtMs int64 `protobuf:"varint,9,opt,name=first_scored_at_ms,json=firstScoredAtMs,proto3" json:"first_scored_at_ms,omitempty"` - LastScoredAtMs int64 `protobuf:"varint,10,opt,name=last_scored_at_ms,json=lastScoredAtMs,proto3" json:"last_scored_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` + RelationshipId string `protobuf:"bytes,2,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` + RelationType string `protobuf:"bytes,3,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` + Score int64 `protobuf:"varint,4,opt,name=score,proto3" json:"score,omitempty"` + UserA *CPWeeklyRankUser `protobuf:"bytes,5,opt,name=user_a,json=userA,proto3" json:"user_a,omitempty"` + UserB *CPWeeklyRankUser `protobuf:"bytes,6,opt,name=user_b,json=userB,proto3" json:"user_b,omitempty"` + FormedAtMs int64 `protobuf:"varint,7,opt,name=formed_at_ms,json=formedAtMs,proto3" json:"formed_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + FirstScoredAtMs int64 `protobuf:"varint,9,opt,name=first_scored_at_ms,json=firstScoredAtMs,proto3" json:"first_scored_at_ms,omitempty"` + LastScoredAtMs int64 `protobuf:"varint,10,opt,name=last_scored_at_ms,json=lastScoredAtMs,proto3" json:"last_scored_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CPWeeklyRankEntry) Reset() { @@ -19772,25 +19524,24 @@ func (x *CPWeeklyRankEntry) GetLastScoredAtMs() int64 { // CPWeeklyRankSettlement 是每周 cron 固化的一条用户发奖事实。 type CPWeeklyRankSettlement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` - PeriodStartMs int64 `protobuf:"varint,2,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - PeriodEndMs int64 `protobuf:"varint,3,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` - RankNo int32 `protobuf:"varint,4,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - RelationshipId string `protobuf:"bytes,5,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` - UserId int64 `protobuf:"varint,6,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,7,opt,name=score,proto3" json:"score,omitempty"` - ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletGrantId string `protobuf:"bytes,10,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - AttemptCount int32 `protobuf:"varint,13,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SettlementId string `protobuf:"bytes,1,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` + PeriodStartMs int64 `protobuf:"varint,2,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,3,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + RankNo int32 `protobuf:"varint,4,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + RelationshipId string `protobuf:"bytes,5,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` + UserId int64 `protobuf:"varint,6,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,7,opt,name=score,proto3" json:"score,omitempty"` + ResourceGroupId int64 `protobuf:"varint,8,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,9,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,10,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + AttemptCount int32 `protobuf:"varint,13,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CPWeeklyRankSettlement) Reset() { @@ -19929,13 +19680,12 @@ func (x *CPWeeklyRankSettlement) GetUpdatedAtMs() int64 { } type GetCPWeeklyRankStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + NowMs int64 `protobuf:"varint,2,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - NowMs int64 `protobuf:"varint,2,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` - Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCPWeeklyRankStatusRequest) Reset() { @@ -19990,16 +19740,15 @@ func (x *GetCPWeeklyRankStatusRequest) GetLimit() int32 { } type GetCPWeeklyRankStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - Entries []*CPWeeklyRankEntry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` - PeriodStartMs int64 `protobuf:"varint,3,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - PeriodEndMs int64 `protobuf:"varint,4,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - PreviousEntries []*CPWeeklyRankEntry `protobuf:"bytes,6,rep,name=previous_entries,json=previousEntries,proto3" json:"previous_entries,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + Entries []*CPWeeklyRankEntry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` + PeriodStartMs int64 `protobuf:"varint,3,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,4,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + PreviousEntries []*CPWeeklyRankEntry `protobuf:"bytes,6,rep,name=previous_entries,json=previousEntries,proto3" json:"previous_entries,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetCPWeeklyRankStatusResponse) Reset() { @@ -20075,11 +19824,10 @@ func (x *GetCPWeeklyRankStatusResponse) GetPreviousEntries() []*CPWeeklyRankEntr } type GetCPWeeklyRankConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCPWeeklyRankConfigRequest) Reset() { @@ -20120,11 +19868,10 @@ func (x *GetCPWeeklyRankConfigRequest) GetMeta() *RequestMeta { } type GetCPWeeklyRankConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCPWeeklyRankConfigResponse) Reset() { @@ -20165,13 +19912,12 @@ func (x *GetCPWeeklyRankConfigResponse) GetConfig() *CPWeeklyRankConfig { } type UpdateCPWeeklyRankConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *CPWeeklyRankConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *CPWeeklyRankConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateCPWeeklyRankConfigRequest) Reset() { @@ -20226,11 +19972,10 @@ func (x *UpdateCPWeeklyRankConfigRequest) GetOperatorAdminId() int64 { } type UpdateCPWeeklyRankConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *CPWeeklyRankConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateCPWeeklyRankConfigResponse) Reset() { @@ -20271,13 +20016,12 @@ func (x *UpdateCPWeeklyRankConfigResponse) GetConfig() *CPWeeklyRankConfig { } type ListCPWeeklyRankSettlementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PeriodStartMs int64 `protobuf:"varint,2,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,3,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PeriodStartMs int64 `protobuf:"varint,2,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - PeriodEndMs int64 `protobuf:"varint,3,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCPWeeklyRankSettlementsRequest) Reset() { @@ -20332,11 +20076,10 @@ func (x *ListCPWeeklyRankSettlementsRequest) GetPeriodEndMs() int64 { } type ListCPWeeklyRankSettlementsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Settlements []*CPWeeklyRankSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` unknownFields protoimpl.UnknownFields - - Settlements []*CPWeeklyRankSettlement `protobuf:"bytes,1,rep,name=settlements,proto3" json:"settlements,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCPWeeklyRankSettlementsResponse) Reset() { @@ -20378,14 +20121,13 @@ func (x *ListCPWeeklyRankSettlementsResponse) GetSettlements() []*CPWeeklyRankSe // AgencyOpeningReward 是代理开业活动房间流水档位对应的金币奖励。 type AgencyOpeningReward struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // rank_no 保留为档位展示顺序和旧字段兼容,结算不再按榜单名次发奖。 RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` RewardCoinAmount int64 `protobuf:"varint,2,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` ThresholdCoinSpent int64 `protobuf:"varint,3,opt,name=threshold_coin_spent,json=thresholdCoinSpent,proto3" json:"threshold_coin_spent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyOpeningReward) Reset() { @@ -20441,10 +20183,7 @@ func (x *AgencyOpeningReward) GetThresholdCoinSpent() int64 { // AgencyOpeningCycle 是后台配置的代理开业活动周期。 type AgencyOpeningCycle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` CycleId string `protobuf:"bytes,1,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` ActivityCode string `protobuf:"bytes,2,opt,name=activity_code,json=activityCode,proto3" json:"activity_code,omitempty"` Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` @@ -20460,6 +20199,8 @@ type AgencyOpeningCycle struct { CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` AppCode string `protobuf:"bytes,15,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyOpeningCycle) Reset() { @@ -20599,32 +20340,31 @@ func (x *AgencyOpeningCycle) GetAppCode() string { // AgencyOpeningApplication 是代理提交开业活动申请后的流水和发奖事实。 type AgencyOpeningApplication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - AgencyId int64 `protobuf:"varint,3,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - AgencyOwnerUserId int64 `protobuf:"varint,4,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` - AgencyName string `protobuf:"bytes,5,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` - HostCount int32 `protobuf:"varint,6,opt,name=host_count,json=hostCount,proto3" json:"host_count,omitempty"` - AgencyCreatedAtMs int64 `protobuf:"varint,7,opt,name=agency_created_at_ms,json=agencyCreatedAtMs,proto3" json:"agency_created_at_ms,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - ScoreCoinAmount int64 `protobuf:"varint,9,opt,name=score_coin_amount,json=scoreCoinAmount,proto3" json:"score_coin_amount,omitempty"` - RewardRankNo int32 `protobuf:"varint,10,opt,name=reward_rank_no,json=rewardRankNo,proto3" json:"reward_rank_no,omitempty"` - RewardCoinAmount int64 `protobuf:"varint,11,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` - WalletCommandId string `protobuf:"bytes,12,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` - WalletTransactionId string `protobuf:"bytes,13,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - FailureReason string `protobuf:"bytes,14,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - AppliedAtMs int64 `protobuf:"varint,15,opt,name=applied_at_ms,json=appliedAtMs,proto3" json:"applied_at_ms,omitempty"` - GrantedAtMs int64 `protobuf:"varint,16,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,17,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - RewardThresholdCoinSpent int64 `protobuf:"varint,18,opt,name=reward_threshold_coin_spent,json=rewardThresholdCoinSpent,proto3" json:"reward_threshold_coin_spent,omitempty"` - ApprovedAtMs int64 `protobuf:"varint,19,opt,name=approved_at_ms,json=approvedAtMs,proto3" json:"approved_at_ms,omitempty"` - ScoreStartMs int64 `protobuf:"varint,20,opt,name=score_start_ms,json=scoreStartMs,proto3" json:"score_start_ms,omitempty"` - ScoreEndMs int64 `protobuf:"varint,21,opt,name=score_end_ms,json=scoreEndMs,proto3" json:"score_end_ms,omitempty"` - ReviewedByAdminId int64 `protobuf:"varint,22,opt,name=reviewed_by_admin_id,json=reviewedByAdminId,proto3" json:"reviewed_by_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + AgencyId int64 `protobuf:"varint,3,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + AgencyOwnerUserId int64 `protobuf:"varint,4,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` + AgencyName string `protobuf:"bytes,5,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` + HostCount int32 `protobuf:"varint,6,opt,name=host_count,json=hostCount,proto3" json:"host_count,omitempty"` + AgencyCreatedAtMs int64 `protobuf:"varint,7,opt,name=agency_created_at_ms,json=agencyCreatedAtMs,proto3" json:"agency_created_at_ms,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + ScoreCoinAmount int64 `protobuf:"varint,9,opt,name=score_coin_amount,json=scoreCoinAmount,proto3" json:"score_coin_amount,omitempty"` + RewardRankNo int32 `protobuf:"varint,10,opt,name=reward_rank_no,json=rewardRankNo,proto3" json:"reward_rank_no,omitempty"` + RewardCoinAmount int64 `protobuf:"varint,11,opt,name=reward_coin_amount,json=rewardCoinAmount,proto3" json:"reward_coin_amount,omitempty"` + WalletCommandId string `protobuf:"bytes,12,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletTransactionId string `protobuf:"bytes,13,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + FailureReason string `protobuf:"bytes,14,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + AppliedAtMs int64 `protobuf:"varint,15,opt,name=applied_at_ms,json=appliedAtMs,proto3" json:"applied_at_ms,omitempty"` + GrantedAtMs int64 `protobuf:"varint,16,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,17,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + RewardThresholdCoinSpent int64 `protobuf:"varint,18,opt,name=reward_threshold_coin_spent,json=rewardThresholdCoinSpent,proto3" json:"reward_threshold_coin_spent,omitempty"` + ApprovedAtMs int64 `protobuf:"varint,19,opt,name=approved_at_ms,json=approvedAtMs,proto3" json:"approved_at_ms,omitempty"` + ScoreStartMs int64 `protobuf:"varint,20,opt,name=score_start_ms,json=scoreStartMs,proto3" json:"score_start_ms,omitempty"` + ScoreEndMs int64 `protobuf:"varint,21,opt,name=score_end_ms,json=scoreEndMs,proto3" json:"score_end_ms,omitempty"` + ReviewedByAdminId int64 `protobuf:"varint,22,opt,name=reviewed_by_admin_id,json=reviewedByAdminId,proto3" json:"reviewed_by_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyOpeningApplication) Reset() { @@ -20813,16 +20553,15 @@ func (x *AgencyOpeningApplication) GetReviewedByAdminId() int64 { // AgencyOpeningAgencySnapshot 是申请页展示和资格判断使用的代理快照。 type AgencyOpeningAgencySnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - HostCount int32 `protobuf:"varint,5,opt,name=host_count,json=hostCount,proto3" json:"host_count,omitempty"` - AgencyCreatedAtMs int64 `protobuf:"varint,6,opt,name=agency_created_at_ms,json=agencyCreatedAtMs,proto3" json:"agency_created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + HostCount int32 `protobuf:"varint,5,opt,name=host_count,json=hostCount,proto3" json:"host_count,omitempty"` + AgencyCreatedAtMs int64 `protobuf:"varint,6,opt,name=agency_created_at_ms,json=agencyCreatedAtMs,proto3" json:"agency_created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyOpeningAgencySnapshot) Reset() { @@ -20898,16 +20637,15 @@ func (x *AgencyOpeningAgencySnapshot) GetAgencyCreatedAtMs() int64 { } type ListAgencyOpeningCyclesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + StartMs int64 `protobuf:"varint,3,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,4,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - StartMs int64 `protobuf:"varint,3,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` - EndMs int64 `protobuf:"varint,4,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAgencyOpeningCyclesRequest) Reset() { @@ -20983,12 +20721,11 @@ func (x *ListAgencyOpeningCyclesRequest) GetPageSize() int32 { } type ListAgencyOpeningCyclesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycles []*AgencyOpeningCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Cycles []*AgencyOpeningCycle `protobuf:"bytes,1,rep,name=cycles,proto3" json:"cycles,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAgencyOpeningCyclesResponse) Reset() { @@ -21036,12 +20773,11 @@ func (x *ListAgencyOpeningCyclesResponse) GetTotal() int64 { } type GetAgencyOpeningCycleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyOpeningCycleRequest) Reset() { @@ -21089,11 +20825,10 @@ func (x *GetAgencyOpeningCycleRequest) GetCycleId() string { } type GetAgencyOpeningCycleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyOpeningCycleResponse) Reset() { @@ -21134,13 +20869,12 @@ func (x *GetAgencyOpeningCycleResponse) GetCycle() *AgencyOpeningCycle { } type UpsertAgencyOpeningCycleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Cycle *AgencyOpeningCycle `protobuf:"bytes,2,opt,name=cycle,proto3" json:"cycle,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Cycle *AgencyOpeningCycle `protobuf:"bytes,2,opt,name=cycle,proto3" json:"cycle,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertAgencyOpeningCycleRequest) Reset() { @@ -21195,12 +20929,11 @@ func (x *UpsertAgencyOpeningCycleRequest) GetOperatorAdminId() int64 { } type UpsertAgencyOpeningCycleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertAgencyOpeningCycleResponse) Reset() { @@ -21248,14 +20981,13 @@ func (x *UpsertAgencyOpeningCycleResponse) GetCreated() bool { } type SetAgencyOpeningCycleStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetAgencyOpeningCycleStatusRequest) Reset() { @@ -21317,11 +21049,10 @@ func (x *SetAgencyOpeningCycleStatusRequest) GetOperatorAdminId() int64 { } type SetAgencyOpeningCycleStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` unknownFields protoimpl.UnknownFields - - Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetAgencyOpeningCycleStatusResponse) Reset() { @@ -21362,17 +21093,16 @@ func (x *SetAgencyOpeningCycleStatusResponse) GetCycle() *AgencyOpeningCycle { } type ListAgencyOpeningApplicationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - AgencyOwnerUserId int64 `protobuf:"varint,5,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CycleId string `protobuf:"bytes,2,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + AgencyOwnerUserId int64 `protobuf:"varint,5,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListAgencyOpeningApplicationsRequest) Reset() { @@ -21455,12 +21185,11 @@ func (x *ListAgencyOpeningApplicationsRequest) GetPageSize() int32 { } type ListAgencyOpeningApplicationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Applications []*AgencyOpeningApplication `protobuf:"bytes,1,rep,name=applications,proto3" json:"applications,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Applications []*AgencyOpeningApplication `protobuf:"bytes,1,rep,name=applications,proto3" json:"applications,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAgencyOpeningApplicationsResponse) Reset() { @@ -21508,14 +21237,13 @@ func (x *ListAgencyOpeningApplicationsResponse) GetTotal() int64 { } type ReviewAgencyOpeningApplicationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ApplicationId string `protobuf:"bytes,2,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - Action string `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` - OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ApplicationId string `protobuf:"bytes,2,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + Action string `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReviewAgencyOpeningApplicationRequest) Reset() { @@ -21577,11 +21305,10 @@ func (x *ReviewAgencyOpeningApplicationRequest) GetOperatorAdminId() int64 { } type ReviewAgencyOpeningApplicationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *AgencyOpeningApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` unknownFields protoimpl.UnknownFields - - Application *AgencyOpeningApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReviewAgencyOpeningApplicationResponse) Reset() { @@ -21622,12 +21349,11 @@ func (x *ReviewAgencyOpeningApplicationResponse) GetApplication() *AgencyOpening } type GetAgencyOpeningStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyOpeningStatusRequest) Reset() { @@ -21675,10 +21401,7 @@ func (x *GetAgencyOpeningStatusRequest) GetUserId() int64 { } type GetAgencyOpeningStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Cycle *AgencyOpeningCycle `protobuf:"bytes,1,opt,name=cycle,proto3" json:"cycle,omitempty"` Application *AgencyOpeningApplication `protobuf:"bytes,2,opt,name=application,proto3" json:"application,omitempty"` Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` @@ -21687,6 +21410,8 @@ type GetAgencyOpeningStatusResponse struct { IneligibleReason string `protobuf:"bytes,6,opt,name=ineligible_reason,json=ineligibleReason,proto3" json:"ineligible_reason,omitempty"` ServerTimeMs int64 `protobuf:"varint,7,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` Agency *AgencyOpeningAgencySnapshot `protobuf:"bytes,8,opt,name=agency,proto3" json:"agency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAgencyOpeningStatusResponse) Reset() { @@ -21776,13 +21501,12 @@ func (x *GetAgencyOpeningStatusResponse) GetAgency() *AgencyOpeningAgencySnapsho } type ApplyAgencyOpeningRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ApplyAgencyOpeningRequest) Reset() { @@ -21837,12 +21561,11 @@ func (x *ApplyAgencyOpeningRequest) GetCommandId() string { } type ApplyAgencyOpeningResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *AgencyOpeningApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Application *AgencyOpeningApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` - Created bool `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ApplyAgencyOpeningResponse) Reset() { @@ -21889,5055 +21612,7186 @@ func (x *ApplyAgencyOpeningResponse) GetCreated() bool { return false } +// ActivityTemplateLocale 是活动模版的单语言文案。locale 使用 BCP-47 基础语言码, +// 当前运营后台至少配置 en,客户端按 locale -> en 的顺序回退。 +type ActivityTemplateLocale struct { + state protoimpl.MessageState `protogen:"open.v1"` + Locale string `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Rules string `protobuf:"bytes,3,opt,name=rules,proto3" json:"rules,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateLocale) Reset() { + *x = ActivityTemplateLocale{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[278] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateLocale) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateLocale) ProtoMessage() {} + +func (x *ActivityTemplateLocale) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[278] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateLocale.ProtoReflect.Descriptor instead. +func (*ActivityTemplateLocale) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{278} +} + +func (x *ActivityTemplateLocale) GetLocale() string { + if x != nil { + return x.Locale + } + return "" +} + +func (x *ActivityTemplateLocale) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ActivityTemplateLocale) GetRules() string { + if x != nil { + return x.Rules + } + return "" +} + +// ActivityTemplateGift 是礼物挑战赛允许计分的礼物快照引用。 +type ActivityTemplateGift struct { + state protoimpl.MessageState `protogen:"open.v1"` + GiftId string `protobuf:"bytes,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + SortOrder int32 `protobuf:"varint,2,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + IconUrl string `protobuf:"bytes,4,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + CoinPrice int64 `protobuf:"varint,5,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + PriceVersion string `protobuf:"bytes,6,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateGift) Reset() { + *x = ActivityTemplateGift{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[279] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateGift) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateGift) ProtoMessage() {} + +func (x *ActivityTemplateGift) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[279] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateGift.ProtoReflect.Descriptor instead. +func (*ActivityTemplateGift) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{279} +} + +func (x *ActivityTemplateGift) GetGiftId() string { + if x != nil { + return x.GiftId + } + return "" +} + +func (x *ActivityTemplateGift) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *ActivityTemplateGift) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivityTemplateGift) GetIconUrl() string { + if x != nil { + return x.IconUrl + } + return "" +} + +func (x *ActivityTemplateGift) GetCoinPrice() int64 { + if x != nil { + return x.CoinPrice + } + return 0 +} + +func (x *ActivityTemplateGift) GetPriceVersion() string { + if x != nil { + return x.PriceVersion + } + return "" +} + +// ActivityTemplateRewardItem 是 wallet pinned snapshot 的安全展示投影;不暴露发放策略和管理字段。 +type ActivityTemplateRewardItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + ItemType string `protobuf:"bytes,1,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` + ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + IconUrl string `protobuf:"bytes,5,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + Quantity int64 `protobuf:"varint,6,opt,name=quantity,proto3" json:"quantity,omitempty"` + DurationMs int64 `protobuf:"varint,7,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + WalletAssetType string `protobuf:"bytes,8,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,9,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + SortOrder int32 `protobuf:"varint,10,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRewardItem) Reset() { + *x = ActivityTemplateRewardItem{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[280] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRewardItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRewardItem) ProtoMessage() {} + +func (x *ActivityTemplateRewardItem) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[280] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRewardItem.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRewardItem) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{280} +} + +func (x *ActivityTemplateRewardItem) GetItemType() string { + if x != nil { + return x.ItemType + } + return "" +} + +func (x *ActivityTemplateRewardItem) GetResourceId() int64 { + if x != nil { + return x.ResourceId + } + return 0 +} + +func (x *ActivityTemplateRewardItem) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + +func (x *ActivityTemplateRewardItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivityTemplateRewardItem) GetIconUrl() string { + if x != nil { + return x.IconUrl + } + return "" +} + +func (x *ActivityTemplateRewardItem) GetQuantity() int64 { + if x != nil { + return x.Quantity + } + return 0 +} + +func (x *ActivityTemplateRewardItem) GetDurationMs() int64 { + if x != nil { + return x.DurationMs + } + return 0 +} + +func (x *ActivityTemplateRewardItem) GetWalletAssetType() string { + if x != nil { + return x.WalletAssetType + } + return "" +} + +func (x *ActivityTemplateRewardItem) GetWalletAssetAmount() int64 { + if x != nil { + return x.WalletAssetAmount + } + return 0 +} + +func (x *ActivityTemplateRewardItem) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +// ActivityTemplateTask 表达模版内的一档每日任务。奖励使用 wallet-service 资源组, +// 由资源组负责展开头像框、座驾、金币等实际资产。 +type ActivityTemplateTask struct { + state protoimpl.MessageState `protogen:"open.v1"` + TaskKey string `protobuf:"bytes,1,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + TaskType string `protobuf:"bytes,2,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + TargetValue int64 `protobuf:"varint,3,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,4,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + RewardSnapshotId string `protobuf:"bytes,6,opt,name=reward_snapshot_id,json=rewardSnapshotId,proto3" json:"reward_snapshot_id,omitempty"` + RewardSnapshotHash string `protobuf:"bytes,7,opt,name=reward_snapshot_hash,json=rewardSnapshotHash,proto3" json:"reward_snapshot_hash,omitempty"` + RewardName string `protobuf:"bytes,8,opt,name=reward_name,json=rewardName,proto3" json:"reward_name,omitempty"` + RewardItems []*ActivityTemplateRewardItem `protobuf:"bytes,9,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateTask) Reset() { + *x = ActivityTemplateTask{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[281] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateTask) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateTask) ProtoMessage() {} + +func (x *ActivityTemplateTask) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[281] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateTask.ProtoReflect.Descriptor instead. +func (*ActivityTemplateTask) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{281} +} + +func (x *ActivityTemplateTask) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *ActivityTemplateTask) GetTaskType() string { + if x != nil { + return x.TaskType + } + return "" +} + +func (x *ActivityTemplateTask) GetTargetValue() int64 { + if x != nil { + return x.TargetValue + } + return 0 +} + +func (x *ActivityTemplateTask) GetRewardResourceGroupId() int64 { + if x != nil { + return x.RewardResourceGroupId + } + return 0 +} + +func (x *ActivityTemplateTask) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *ActivityTemplateTask) GetRewardSnapshotId() string { + if x != nil { + return x.RewardSnapshotId + } + return "" +} + +func (x *ActivityTemplateTask) GetRewardSnapshotHash() string { + if x != nil { + return x.RewardSnapshotHash + } + return "" +} + +func (x *ActivityTemplateTask) GetRewardName() string { + if x != nil { + return x.RewardName + } + return "" +} + +func (x *ActivityTemplateTask) GetRewardItems() []*ActivityTemplateRewardItem { + if x != nil { + return x.RewardItems + } + return nil +} + +// ActivityTemplateRankReward 是日榜或总榜的一个不重叠名次区间奖励。 +type ActivityTemplateRankReward struct { + state protoimpl.MessageState `protogen:"open.v1"` + BoardType string `protobuf:"bytes,1,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + RankFrom int32 `protobuf:"varint,2,opt,name=rank_from,json=rankFrom,proto3" json:"rank_from,omitempty"` + RankTo int32 `protobuf:"varint,3,opt,name=rank_to,json=rankTo,proto3" json:"rank_to,omitempty"` + ResourceGroupId int64 `protobuf:"varint,4,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + RewardSnapshotId string `protobuf:"bytes,6,opt,name=reward_snapshot_id,json=rewardSnapshotId,proto3" json:"reward_snapshot_id,omitempty"` + RewardSnapshotHash string `protobuf:"bytes,7,opt,name=reward_snapshot_hash,json=rewardSnapshotHash,proto3" json:"reward_snapshot_hash,omitempty"` + RewardName string `protobuf:"bytes,8,opt,name=reward_name,json=rewardName,proto3" json:"reward_name,omitempty"` + RewardItems []*ActivityTemplateRewardItem `protobuf:"bytes,9,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRankReward) Reset() { + *x = ActivityTemplateRankReward{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[282] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRankReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRankReward) ProtoMessage() {} + +func (x *ActivityTemplateRankReward) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[282] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRankReward.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRankReward) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{282} +} + +func (x *ActivityTemplateRankReward) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ActivityTemplateRankReward) GetRankFrom() int32 { + if x != nil { + return x.RankFrom + } + return 0 +} + +func (x *ActivityTemplateRankReward) GetRankTo() int32 { + if x != nil { + return x.RankTo + } + return 0 +} + +func (x *ActivityTemplateRankReward) GetResourceGroupId() int64 { + if x != nil { + return x.ResourceGroupId + } + return 0 +} + +func (x *ActivityTemplateRankReward) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *ActivityTemplateRankReward) GetRewardSnapshotId() string { + if x != nil { + return x.RewardSnapshotId + } + return "" +} + +func (x *ActivityTemplateRankReward) GetRewardSnapshotHash() string { + if x != nil { + return x.RewardSnapshotHash + } + return "" +} + +func (x *ActivityTemplateRankReward) GetRewardName() string { + if x != nil { + return x.RewardName + } + return "" +} + +func (x *ActivityTemplateRankReward) GetRewardItems() []*ActivityTemplateRewardItem { + if x != nil { + return x.RewardItems + } + return nil +} + +// ActivityTemplateAsset 是客户端活动页素材引用。locale="*" 表示所有语言共享, +// 独立语言素材覆盖共享素材;media_type 支持 image/webp/svga/pag。 +type ActivityTemplateAsset struct { + state protoimpl.MessageState `protogen:"open.v1"` + AssetKey string `protobuf:"bytes,1,opt,name=asset_key,json=assetKey,proto3" json:"asset_key,omitempty"` + Locale string `protobuf:"bytes,2,opt,name=locale,proto3" json:"locale,omitempty"` + Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` + MediaType string `protobuf:"bytes,4,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"` + SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateAsset) Reset() { + *x = ActivityTemplateAsset{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[283] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateAsset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateAsset) ProtoMessage() {} + +func (x *ActivityTemplateAsset) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[283] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateAsset.ProtoReflect.Descriptor instead. +func (*ActivityTemplateAsset) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{283} +} + +func (x *ActivityTemplateAsset) GetAssetKey() string { + if x != nil { + return x.AssetKey + } + return "" +} + +func (x *ActivityTemplateAsset) GetLocale() string { + if x != nil { + return x.Locale + } + return "" +} + +func (x *ActivityTemplateAsset) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *ActivityTemplateAsset) GetMediaType() string { + if x != nil { + return x.MediaType + } + return "" +} + +func (x *ActivityTemplateAsset) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +// ActivityTemplate 是可排期的运营活动实例。运营侧沿用“活动模版”名称, +// 发布时 activity-service 会固化完整版本快照,避免运行中的配置被后台编辑覆盖。 +type ActivityTemplate struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,3,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + ActivityType string `protobuf:"bytes,5,opt,name=activity_type,json=activityType,proto3" json:"activity_type,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + LifecycleStatus string `protobuf:"bytes,7,opt,name=lifecycle_status,json=lifecycleStatus,proto3" json:"lifecycle_status,omitempty"` + StartMs int64 `protobuf:"varint,8,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,9,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + AllRegions bool `protobuf:"varint,10,opt,name=all_regions,json=allRegions,proto3" json:"all_regions,omitempty"` + RegionIds []int64 `protobuf:"varint,11,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` + Locales []*ActivityTemplateLocale `protobuf:"bytes,12,rep,name=locales,proto3" json:"locales,omitempty"` + Gifts []*ActivityTemplateGift `protobuf:"bytes,13,rep,name=gifts,proto3" json:"gifts,omitempty"` + Tasks []*ActivityTemplateTask `protobuf:"bytes,14,rep,name=tasks,proto3" json:"tasks,omitempty"` + DailyLeaderboardSize int32 `protobuf:"varint,15,opt,name=daily_leaderboard_size,json=dailyLeaderboardSize,proto3" json:"daily_leaderboard_size,omitempty"` + TotalLeaderboardSize int32 `protobuf:"varint,16,opt,name=total_leaderboard_size,json=totalLeaderboardSize,proto3" json:"total_leaderboard_size,omitempty"` + RankRewards []*ActivityTemplateRankReward `protobuf:"bytes,17,rep,name=rank_rewards,json=rankRewards,proto3" json:"rank_rewards,omitempty"` + Assets []*ActivityTemplateAsset `protobuf:"bytes,18,rep,name=assets,proto3" json:"assets,omitempty"` + DisplayConfigJson string `protobuf:"bytes,19,opt,name=display_config_json,json=displayConfigJson,proto3" json:"display_config_json,omitempty"` + Revision int64 `protobuf:"varint,20,opt,name=revision,proto3" json:"revision,omitempty"` + PublishedVersion int64 `protobuf:"varint,21,opt,name=published_version,json=publishedVersion,proto3" json:"published_version,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,22,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,23,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + PublishedByAdminId int64 `protobuf:"varint,24,opt,name=published_by_admin_id,json=publishedByAdminId,proto3" json:"published_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,25,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,26,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + PublishedAtMs int64 `protobuf:"varint,27,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + ArchivedAtMs int64 `protobuf:"varint,28,opt,name=archived_at_ms,json=archivedAtMs,proto3" json:"archived_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplate) Reset() { + *x = ActivityTemplate{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[284] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplate) ProtoMessage() {} + +func (x *ActivityTemplate) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[284] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplate.ProtoReflect.Descriptor instead. +func (*ActivityTemplate) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{284} +} + +func (x *ActivityTemplate) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *ActivityTemplate) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplate) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivityTemplate) GetActivityType() string { + if x != nil { + return x.ActivityType + } + return "" +} + +func (x *ActivityTemplate) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplate) GetLifecycleStatus() string { + if x != nil { + return x.LifecycleStatus + } + return "" +} + +func (x *ActivityTemplate) GetStartMs() int64 { + if x != nil { + return x.StartMs + } + return 0 +} + +func (x *ActivityTemplate) GetEndMs() int64 { + if x != nil { + return x.EndMs + } + return 0 +} + +func (x *ActivityTemplate) GetAllRegions() bool { + if x != nil { + return x.AllRegions + } + return false +} + +func (x *ActivityTemplate) GetRegionIds() []int64 { + if x != nil { + return x.RegionIds + } + return nil +} + +func (x *ActivityTemplate) GetLocales() []*ActivityTemplateLocale { + if x != nil { + return x.Locales + } + return nil +} + +func (x *ActivityTemplate) GetGifts() []*ActivityTemplateGift { + if x != nil { + return x.Gifts + } + return nil +} + +func (x *ActivityTemplate) GetTasks() []*ActivityTemplateTask { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *ActivityTemplate) GetDailyLeaderboardSize() int32 { + if x != nil { + return x.DailyLeaderboardSize + } + return 0 +} + +func (x *ActivityTemplate) GetTotalLeaderboardSize() int32 { + if x != nil { + return x.TotalLeaderboardSize + } + return 0 +} + +func (x *ActivityTemplate) GetRankRewards() []*ActivityTemplateRankReward { + if x != nil { + return x.RankRewards + } + return nil +} + +func (x *ActivityTemplate) GetAssets() []*ActivityTemplateAsset { + if x != nil { + return x.Assets + } + return nil +} + +func (x *ActivityTemplate) GetDisplayConfigJson() string { + if x != nil { + return x.DisplayConfigJson + } + return "" +} + +func (x *ActivityTemplate) GetRevision() int64 { + if x != nil { + return x.Revision + } + return 0 +} + +func (x *ActivityTemplate) GetPublishedVersion() int64 { + if x != nil { + return x.PublishedVersion + } + return 0 +} + +func (x *ActivityTemplate) GetCreatedByAdminId() int64 { + if x != nil { + return x.CreatedByAdminId + } + return 0 +} + +func (x *ActivityTemplate) GetUpdatedByAdminId() int64 { + if x != nil { + return x.UpdatedByAdminId + } + return 0 +} + +func (x *ActivityTemplate) GetPublishedByAdminId() int64 { + if x != nil { + return x.PublishedByAdminId + } + return 0 +} + +func (x *ActivityTemplate) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ActivityTemplate) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + +func (x *ActivityTemplate) GetPublishedAtMs() int64 { + if x != nil { + return x.PublishedAtMs + } + return 0 +} + +func (x *ActivityTemplate) GetArchivedAtMs() int64 { + if x != nil { + return x.ArchivedAtMs + } + return 0 +} + +// ActivityTemplateSummary 是高密度列表专用投影,不携带规则、任务、素材和展示 JSON, +// 避免后台翻页时把每个模版的完整聚合重复传输。 +type ActivityTemplateSummary struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,3,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + ActivityType string `protobuf:"bytes,5,opt,name=activity_type,json=activityType,proto3" json:"activity_type,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + LifecycleStatus string `protobuf:"bytes,7,opt,name=lifecycle_status,json=lifecycleStatus,proto3" json:"lifecycle_status,omitempty"` + StartMs int64 `protobuf:"varint,8,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,9,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + AllRegions bool `protobuf:"varint,10,opt,name=all_regions,json=allRegions,proto3" json:"all_regions,omitempty"` + RegionIds []int64 `protobuf:"varint,11,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` + Revision int64 `protobuf:"varint,12,opt,name=revision,proto3" json:"revision,omitempty"` + PublishedVersion int64 `protobuf:"varint,13,opt,name=published_version,json=publishedVersion,proto3" json:"published_version,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,14,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,15,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,16,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,17,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateSummary) Reset() { + *x = ActivityTemplateSummary{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[285] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateSummary) ProtoMessage() {} + +func (x *ActivityTemplateSummary) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[285] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateSummary.ProtoReflect.Descriptor instead. +func (*ActivityTemplateSummary) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{285} +} + +func (x *ActivityTemplateSummary) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *ActivityTemplateSummary) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateSummary) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplateSummary) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivityTemplateSummary) GetActivityType() string { + if x != nil { + return x.ActivityType + } + return "" +} + +func (x *ActivityTemplateSummary) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplateSummary) GetLifecycleStatus() string { + if x != nil { + return x.LifecycleStatus + } + return "" +} + +func (x *ActivityTemplateSummary) GetStartMs() int64 { + if x != nil { + return x.StartMs + } + return 0 +} + +func (x *ActivityTemplateSummary) GetEndMs() int64 { + if x != nil { + return x.EndMs + } + return 0 +} + +func (x *ActivityTemplateSummary) GetAllRegions() bool { + if x != nil { + return x.AllRegions + } + return false +} + +func (x *ActivityTemplateSummary) GetRegionIds() []int64 { + if x != nil { + return x.RegionIds + } + return nil +} + +func (x *ActivityTemplateSummary) GetRevision() int64 { + if x != nil { + return x.Revision + } + return 0 +} + +func (x *ActivityTemplateSummary) GetPublishedVersion() int64 { + if x != nil { + return x.PublishedVersion + } + return 0 +} + +func (x *ActivityTemplateSummary) GetCreatedByAdminId() int64 { + if x != nil { + return x.CreatedByAdminId + } + return 0 +} + +func (x *ActivityTemplateSummary) GetUpdatedByAdminId() int64 { + if x != nil { + return x.UpdatedByAdminId + } + return 0 +} + +func (x *ActivityTemplateSummary) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ActivityTemplateSummary) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + +type ListActivityTemplatesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + RegionId *int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3,oneof" json:"region_id,omitempty"` + StartMs int64 `protobuf:"varint,5,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"` + EndMs int64 `protobuf:"varint,6,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"` + Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + AllRegions *bool `protobuf:"varint,9,opt,name=all_regions,json=allRegions,proto3,oneof" json:"all_regions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplatesRequest) Reset() { + *x = ListActivityTemplatesRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[286] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplatesRequest) ProtoMessage() {} + +func (x *ListActivityTemplatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[286] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplatesRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplatesRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{286} +} + +func (x *ListActivityTemplatesRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplatesRequest) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +func (x *ListActivityTemplatesRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListActivityTemplatesRequest) GetRegionId() int64 { + if x != nil && x.RegionId != nil { + return *x.RegionId + } + return 0 +} + +func (x *ListActivityTemplatesRequest) GetStartMs() int64 { + if x != nil { + return x.StartMs + } + return 0 +} + +func (x *ListActivityTemplatesRequest) GetEndMs() int64 { + if x != nil { + return x.EndMs + } + return 0 +} + +func (x *ListActivityTemplatesRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListActivityTemplatesRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListActivityTemplatesRequest) GetAllRegions() bool { + if x != nil && x.AllRegions != nil { + return *x.AllRegions + } + return false +} + +type ListActivityTemplatesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Templates []*ActivityTemplateSummary `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplatesResponse) Reset() { + *x = ListActivityTemplatesResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[287] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplatesResponse) ProtoMessage() {} + +func (x *ListActivityTemplatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[287] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplatesResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplatesResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{287} +} + +func (x *ListActivityTemplatesResponse) GetTemplates() []*ActivityTemplateSummary { + if x != nil { + return x.Templates + } + return nil +} + +func (x *ListActivityTemplatesResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *ListActivityTemplatesResponse) GetServerTimeMs() int64 { + if x != nil { + return x.ServerTimeMs + } + return 0 +} + +type CreateActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Template *ActivityTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateActivityTemplateRequest) Reset() { + *x = CreateActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[288] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateActivityTemplateRequest) ProtoMessage() {} + +func (x *CreateActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[288] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*CreateActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{288} +} + +func (x *CreateActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *CreateActivityTemplateRequest) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +func (x *CreateActivityTemplateRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type CreateActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateActivityTemplateResponse) Reset() { + *x = CreateActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[289] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateActivityTemplateResponse) ProtoMessage() {} + +func (x *CreateActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[289] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*CreateActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{289} +} + +func (x *CreateActivityTemplateResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +type GetActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetActivityTemplateRequest) Reset() { + *x = GetActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[290] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetActivityTemplateRequest) ProtoMessage() {} + +func (x *GetActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[290] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{290} +} + +func (x *GetActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *GetActivityTemplateRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +type GetActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetActivityTemplateResponse) Reset() { + *x = GetActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[291] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetActivityTemplateResponse) ProtoMessage() {} + +func (x *GetActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[291] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{291} +} + +func (x *GetActivityTemplateResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +type UpdateActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Template *ActivityTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + ExpectedRevision int64 `protobuf:"varint,3,opt,name=expected_revision,json=expectedRevision,proto3" json:"expected_revision,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateActivityTemplateRequest) Reset() { + *x = UpdateActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[292] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateActivityTemplateRequest) ProtoMessage() {} + +func (x *UpdateActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[292] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*UpdateActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{292} +} + +func (x *UpdateActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *UpdateActivityTemplateRequest) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +func (x *UpdateActivityTemplateRequest) GetExpectedRevision() int64 { + if x != nil { + return x.ExpectedRevision + } + return 0 +} + +func (x *UpdateActivityTemplateRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type UpdateActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateActivityTemplateResponse) Reset() { + *x = UpdateActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[293] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateActivityTemplateResponse) ProtoMessage() {} + +func (x *UpdateActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[293] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*UpdateActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{293} +} + +func (x *UpdateActivityTemplateResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +type SetActivityTemplateStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ExpectedRevision int64 `protobuf:"varint,4,opt,name=expected_revision,json=expectedRevision,proto3" json:"expected_revision,omitempty"` + OperatorAdminId int64 `protobuf:"varint,5,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetActivityTemplateStatusRequest) Reset() { + *x = SetActivityTemplateStatusRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[294] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetActivityTemplateStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetActivityTemplateStatusRequest) ProtoMessage() {} + +func (x *SetActivityTemplateStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[294] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetActivityTemplateStatusRequest.ProtoReflect.Descriptor instead. +func (*SetActivityTemplateStatusRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{294} +} + +func (x *SetActivityTemplateStatusRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *SetActivityTemplateStatusRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *SetActivityTemplateStatusRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *SetActivityTemplateStatusRequest) GetExpectedRevision() int64 { + if x != nil { + return x.ExpectedRevision + } + return 0 +} + +func (x *SetActivityTemplateStatusRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type SetActivityTemplateStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetActivityTemplateStatusResponse) Reset() { + *x = SetActivityTemplateStatusResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[295] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetActivityTemplateStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetActivityTemplateStatusResponse) ProtoMessage() {} + +func (x *SetActivityTemplateStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[295] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetActivityTemplateStatusResponse.ProtoReflect.Descriptor instead. +func (*SetActivityTemplateStatusResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{295} +} + +func (x *SetActivityTemplateStatusResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +type DeleteActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + ExpectedRevision int64 `protobuf:"varint,3,opt,name=expected_revision,json=expectedRevision,proto3" json:"expected_revision,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteActivityTemplateRequest) Reset() { + *x = DeleteActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[296] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteActivityTemplateRequest) ProtoMessage() {} + +func (x *DeleteActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[296] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*DeleteActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{296} +} + +func (x *DeleteActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *DeleteActivityTemplateRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *DeleteActivityTemplateRequest) GetExpectedRevision() int64 { + if x != nil { + return x.ExpectedRevision + } + return 0 +} + +func (x *DeleteActivityTemplateRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type DeleteActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + Archived bool `protobuf:"varint,2,opt,name=archived,proto3" json:"archived,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteActivityTemplateResponse) Reset() { + *x = DeleteActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[297] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteActivityTemplateResponse) ProtoMessage() {} + +func (x *DeleteActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[297] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*DeleteActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{297} +} + +func (x *DeleteActivityTemplateResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +func (x *DeleteActivityTemplateResponse) GetArchived() bool { + if x != nil { + return x.Archived + } + return false +} + +// ActivityTemplateVersion 是每次发布形成的不可变完整配置快照。 +type ActivityTemplateVersion struct { + state protoimpl.MessageState `protogen:"open.v1"` + TemplateId string `protobuf:"bytes,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + VersionNo int64 `protobuf:"varint,2,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + Snapshot *ActivityTemplate `protobuf:"bytes,3,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + PublishedByAdminId int64 `protobuf:"varint,4,opt,name=published_by_admin_id,json=publishedByAdminId,proto3" json:"published_by_admin_id,omitempty"` + PublishedAtMs int64 `protobuf:"varint,5,opt,name=published_at_ms,json=publishedAtMs,proto3" json:"published_at_ms,omitempty"` + // 实际运行窗口来自 activity_template_runtime_versions;停用后 runtime_to_ms 固化,重发会创建新版本窗口。 + RuntimeFromMs int64 `protobuf:"varint,6,opt,name=runtime_from_ms,json=runtimeFromMs,proto3" json:"runtime_from_ms,omitempty"` + RuntimeToMs int64 `protobuf:"varint,7,opt,name=runtime_to_ms,json=runtimeToMs,proto3" json:"runtime_to_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateVersion) Reset() { + *x = ActivityTemplateVersion{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[298] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateVersion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateVersion) ProtoMessage() {} + +func (x *ActivityTemplateVersion) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[298] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateVersion.ProtoReflect.Descriptor instead. +func (*ActivityTemplateVersion) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{298} +} + +func (x *ActivityTemplateVersion) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateVersion) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateVersion) GetSnapshot() *ActivityTemplate { + if x != nil { + return x.Snapshot + } + return nil +} + +func (x *ActivityTemplateVersion) GetPublishedByAdminId() int64 { + if x != nil { + return x.PublishedByAdminId + } + return 0 +} + +func (x *ActivityTemplateVersion) GetPublishedAtMs() int64 { + if x != nil { + return x.PublishedAtMs + } + return 0 +} + +func (x *ActivityTemplateVersion) GetRuntimeFromMs() int64 { + if x != nil { + return x.RuntimeFromMs + } + return 0 +} + +func (x *ActivityTemplateVersion) GetRuntimeToMs() int64 { + if x != nil { + return x.RuntimeToMs + } + return 0 +} + +type ListActivityTemplateVersionsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateVersionsRequest) Reset() { + *x = ListActivityTemplateVersionsRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[299] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateVersionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateVersionsRequest) ProtoMessage() {} + +func (x *ListActivityTemplateVersionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[299] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateVersionsRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateVersionsRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{299} +} + +func (x *ListActivityTemplateVersionsRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplateVersionsRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ListActivityTemplateVersionsRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListActivityTemplateVersionsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +type ListActivityTemplateVersionsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Versions []*ActivityTemplateVersion `protobuf:"bytes,1,rep,name=versions,proto3" json:"versions,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateVersionsResponse) Reset() { + *x = ListActivityTemplateVersionsResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[300] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateVersionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateVersionsResponse) ProtoMessage() {} + +func (x *ListActivityTemplateVersionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[300] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateVersionsResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateVersionsResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{300} +} + +func (x *ListActivityTemplateVersionsResponse) GetVersions() []*ActivityTemplateVersion { + if x != nil { + return x.Versions + } + return nil +} + +func (x *ListActivityTemplateVersionsResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +// CloneActivityTemplateRequest 从当前配置或指定发布版本复制为新草稿; +// source_version=0 表示复制当前配置,新的 template_code 必须在 App 内唯一。 +type CloneActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + SourceTemplateId string `protobuf:"bytes,2,opt,name=source_template_id,json=sourceTemplateId,proto3" json:"source_template_id,omitempty"` + SourceVersion int64 `protobuf:"varint,3,opt,name=source_version,json=sourceVersion,proto3" json:"source_version,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + OperatorAdminId int64 `protobuf:"varint,6,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CloneActivityTemplateRequest) Reset() { + *x = CloneActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[301] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CloneActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloneActivityTemplateRequest) ProtoMessage() {} + +func (x *CloneActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[301] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloneActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*CloneActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{301} +} + +func (x *CloneActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *CloneActivityTemplateRequest) GetSourceTemplateId() string { + if x != nil { + return x.SourceTemplateId + } + return "" +} + +func (x *CloneActivityTemplateRequest) GetSourceVersion() int64 { + if x != nil { + return x.SourceVersion + } + return 0 +} + +func (x *CloneActivityTemplateRequest) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *CloneActivityTemplateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CloneActivityTemplateRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type CloneActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CloneActivityTemplateResponse) Reset() { + *x = CloneActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[302] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CloneActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloneActivityTemplateResponse) ProtoMessage() {} + +func (x *CloneActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[302] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloneActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*CloneActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{302} +} + +func (x *CloneActivityTemplateResponse) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +type ActivityTemplateValidationIssue struct { + state protoimpl.MessageState `protogen:"open.v1"` + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateValidationIssue) Reset() { + *x = ActivityTemplateValidationIssue{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[303] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateValidationIssue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateValidationIssue) ProtoMessage() {} + +func (x *ActivityTemplateValidationIssue) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[303] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateValidationIssue.ProtoReflect.Descriptor instead. +func (*ActivityTemplateValidationIssue) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{303} +} + +func (x *ActivityTemplateValidationIssue) GetField() string { + if x != nil { + return x.Field + } + return "" +} + +func (x *ActivityTemplateValidationIssue) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ActivityTemplateValidationIssue) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// ValidateActivityTemplateRequest 让编辑页在正式保存或发布前复用 owner service 的校验规则。 +type ValidateActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Template *ActivityTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + ForPublish bool `protobuf:"varint,3,opt,name=for_publish,json=forPublish,proto3" json:"for_publish,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ValidateActivityTemplateRequest) Reset() { + *x = ValidateActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[304] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValidateActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateActivityTemplateRequest) ProtoMessage() {} + +func (x *ValidateActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[304] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*ValidateActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{304} +} + +func (x *ValidateActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ValidateActivityTemplateRequest) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +func (x *ValidateActivityTemplateRequest) GetForPublish() bool { + if x != nil { + return x.ForPublish + } + return false +} + +type ValidateActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + Issues []*ActivityTemplateValidationIssue `protobuf:"bytes,2,rep,name=issues,proto3" json:"issues,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ValidateActivityTemplateResponse) Reset() { + *x = ValidateActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[305] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValidateActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateActivityTemplateResponse) ProtoMessage() {} + +func (x *ValidateActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[305] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*ValidateActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{305} +} + +func (x *ValidateActivityTemplateResponse) GetValid() bool { + if x != nil { + return x.Valid + } + return false +} + +func (x *ValidateActivityTemplateResponse) GetIssues() []*ActivityTemplateValidationIssue { + if x != nil { + return x.Issues + } + return nil +} + +// ActivityTemplateRuntime 描述一个用户当前命中的已发布不可变版本。 +// runtime_from_ms/runtime_to_ms 是该版本的实际启停窗口,活动排期仍以 template 的 [start_ms,end_ms) 为准。 +type ActivityTemplateRuntime struct { + state protoimpl.MessageState `protogen:"open.v1"` + Template *ActivityTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + VersionNo int64 `protobuf:"varint,2,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + RuntimeFromMs int64 `protobuf:"varint,3,opt,name=runtime_from_ms,json=runtimeFromMs,proto3" json:"runtime_from_ms,omitempty"` + RuntimeToMs int64 `protobuf:"varint,4,opt,name=runtime_to_ms,json=runtimeToMs,proto3" json:"runtime_to_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRuntime) Reset() { + *x = ActivityTemplateRuntime{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[306] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRuntime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRuntime) ProtoMessage() {} + +func (x *ActivityTemplateRuntime) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[306] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRuntime.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRuntime) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{306} +} + +func (x *ActivityTemplateRuntime) GetTemplate() *ActivityTemplate { + if x != nil { + return x.Template + } + return nil +} + +func (x *ActivityTemplateRuntime) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateRuntime) GetRuntimeFromMs() int64 { + if x != nil { + return x.RuntimeFromMs + } + return 0 +} + +func (x *ActivityTemplateRuntime) GetRuntimeToMs() int64 { + if x != nil { + return x.RuntimeToMs + } + return 0 +} + +func (x *ActivityTemplateRuntime) GetServerTimeMs() int64 { + if x != nil { + return x.ServerTimeMs + } + return 0 +} + +// ActivityTemplateRuntimeTask 是发布版本内一档 UTC 每日任务及当前用户进度。 +type ActivityTemplateRuntimeTask struct { + state protoimpl.MessageState `protogen:"open.v1"` + TemplateId string `protobuf:"bytes,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,2,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + VersionNo int64 `protobuf:"varint,3,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + TaskDay string `protobuf:"bytes,4,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + TaskKey string `protobuf:"bytes,5,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + TaskType string `protobuf:"bytes,6,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + TargetValue int64 `protobuf:"varint,7,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` + ProgressValue int64 `protobuf:"varint,8,opt,name=progress_value,json=progressValue,proto3" json:"progress_value,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,9,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` + Claimable bool `protobuf:"varint,11,opt,name=claimable,proto3" json:"claimable,omitempty"` + CompletedAtMs int64 `protobuf:"varint,12,opt,name=completed_at_ms,json=completedAtMs,proto3" json:"completed_at_ms,omitempty"` + ClaimedAtMs int64 `protobuf:"varint,13,opt,name=claimed_at_ms,json=claimedAtMs,proto3" json:"claimed_at_ms,omitempty"` + SortOrder int32 `protobuf:"varint,14,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + RewardSnapshotId string `protobuf:"bytes,15,opt,name=reward_snapshot_id,json=rewardSnapshotId,proto3" json:"reward_snapshot_id,omitempty"` + RewardSnapshotHash string `protobuf:"bytes,16,opt,name=reward_snapshot_hash,json=rewardSnapshotHash,proto3" json:"reward_snapshot_hash,omitempty"` + RewardName string `protobuf:"bytes,17,opt,name=reward_name,json=rewardName,proto3" json:"reward_name,omitempty"` + RewardItems []*ActivityTemplateRewardItem `protobuf:"bytes,18,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRuntimeTask) Reset() { + *x = ActivityTemplateRuntimeTask{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[307] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRuntimeTask) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRuntimeTask) ProtoMessage() {} + +func (x *ActivityTemplateRuntimeTask) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[307] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRuntimeTask.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRuntimeTask) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{307} +} + +func (x *ActivityTemplateRuntimeTask) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetTaskDay() string { + if x != nil { + return x.TaskDay + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetTaskType() string { + if x != nil { + return x.TaskType + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetTargetValue() int64 { + if x != nil { + return x.TargetValue + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetProgressValue() int64 { + if x != nil { + return x.ProgressValue + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetRewardResourceGroupId() int64 { + if x != nil { + return x.RewardResourceGroupId + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetClaimable() bool { + if x != nil { + return x.Claimable + } + return false +} + +func (x *ActivityTemplateRuntimeTask) GetCompletedAtMs() int64 { + if x != nil { + return x.CompletedAtMs + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetClaimedAtMs() int64 { + if x != nil { + return x.ClaimedAtMs + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *ActivityTemplateRuntimeTask) GetRewardSnapshotId() string { + if x != nil { + return x.RewardSnapshotId + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetRewardSnapshotHash() string { + if x != nil { + return x.RewardSnapshotHash + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetRewardName() string { + if x != nil { + return x.RewardName + } + return "" +} + +func (x *ActivityTemplateRuntimeTask) GetRewardItems() []*ActivityTemplateRewardItem { + if x != nil { + return x.RewardItems + } + return nil +} + +// ActivityTemplateTaskClaim 是 activity-service 与 wallet-service 之间可审计、可重放的领奖事实。 +type ActivityTemplateTaskClaim struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + VersionNo int64 `protobuf:"varint,5,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + TaskDay string `protobuf:"bytes,6,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + TaskKey string `protobuf:"bytes,7,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + UserId int64 `protobuf:"varint,8,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,9,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,10,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,11,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,13,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + AttemptCount int32 `protobuf:"varint,14,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + GrantedAtMs int64 `protobuf:"varint,17,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + RewardSnapshotId string `protobuf:"bytes,18,opt,name=reward_snapshot_id,json=rewardSnapshotId,proto3" json:"reward_snapshot_id,omitempty"` + RewardName string `protobuf:"bytes,19,opt,name=reward_name,json=rewardName,proto3" json:"reward_name,omitempty"` + RewardItems []*ActivityTemplateRewardItem `protobuf:"bytes,20,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + RewardSnapshotHash string `protobuf:"bytes,21,opt,name=reward_snapshot_hash,json=rewardSnapshotHash,proto3" json:"reward_snapshot_hash,omitempty"` + // earning_region_id/attribution_at_ms are frozen from the progress event that completed the task. + EarningRegionId int64 `protobuf:"varint,22,opt,name=earning_region_id,json=earningRegionId,proto3" json:"earning_region_id,omitempty"` + AttributionAtMs int64 `protobuf:"varint,23,opt,name=attribution_at_ms,json=attributionAtMs,proto3" json:"attribution_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateTaskClaim) Reset() { + *x = ActivityTemplateTaskClaim{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[308] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateTaskClaim) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateTaskClaim) ProtoMessage() {} + +func (x *ActivityTemplateTaskClaim) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[308] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateTaskClaim.ProtoReflect.Descriptor instead. +func (*ActivityTemplateTaskClaim) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{308} +} + +func (x *ActivityTemplateTaskClaim) GetClaimId() string { + if x != nil { + return x.ClaimId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetCommandId() string { + if x != nil { + return x.CommandId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetTaskDay() string { + if x != nil { + return x.TaskDay + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetRewardResourceGroupId() int64 { + if x != nil { + return x.RewardResourceGroupId + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetWalletCommandId() string { + if x != nil { + return x.WalletCommandId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetWalletGrantId() string { + if x != nil { + return x.WalletGrantId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetFailureReason() string { + if x != nil { + return x.FailureReason + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetAttemptCount() int32 { + if x != nil { + return x.AttemptCount + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetGrantedAtMs() int64 { + if x != nil { + return x.GrantedAtMs + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetRewardSnapshotId() string { + if x != nil { + return x.RewardSnapshotId + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetRewardName() string { + if x != nil { + return x.RewardName + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetRewardItems() []*ActivityTemplateRewardItem { + if x != nil { + return x.RewardItems + } + return nil +} + +func (x *ActivityTemplateTaskClaim) GetRewardSnapshotHash() string { + if x != nil { + return x.RewardSnapshotHash + } + return "" +} + +func (x *ActivityTemplateTaskClaim) GetEarningRegionId() int64 { + if x != nil { + return x.EarningRegionId + } + return 0 +} + +func (x *ActivityTemplateTaskClaim) GetAttributionAtMs() int64 { + if x != nil { + return x.AttributionAtMs + } + return 0 +} + +// ActivityTemplateLeaderboardEntry 同时用于实时榜和结算后冻结快照。 +type ActivityTemplateLeaderboardEntry struct { + state protoimpl.MessageState `protogen:"open.v1"` + RankNo int32 `protobuf:"varint,1,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` + GiftCount int64 `protobuf:"varint,4,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + FirstScoredAtMs int64 `protobuf:"varint,6,opt,name=first_scored_at_ms,json=firstScoredAtMs,proto3" json:"first_scored_at_ms,omitempty"` + Snapshot bool `protobuf:"varint,7,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateLeaderboardEntry) Reset() { + *x = ActivityTemplateLeaderboardEntry{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[309] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateLeaderboardEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateLeaderboardEntry) ProtoMessage() {} + +func (x *ActivityTemplateLeaderboardEntry) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[309] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateLeaderboardEntry.ProtoReflect.Descriptor instead. +func (*ActivityTemplateLeaderboardEntry) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{309} +} + +func (x *ActivityTemplateLeaderboardEntry) GetRankNo() int32 { + if x != nil { + return x.RankNo + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetGiftCount() int64 { + if x != nil { + return x.GiftCount + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetCoinAmount() int64 { + if x != nil { + return x.CoinAmount + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetFirstScoredAtMs() int64 { + if x != nil { + return x.FirstScoredAtMs + } + return 0 +} + +func (x *ActivityTemplateLeaderboardEntry) GetSnapshot() bool { + if x != nil { + return x.Snapshot + } + return false +} + +type GetCurrentActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Locale string `protobuf:"bytes,4,opt,name=locale,proto3" json:"locale,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetCurrentActivityTemplateRequest) Reset() { + *x = GetCurrentActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[310] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetCurrentActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCurrentActivityTemplateRequest) ProtoMessage() {} + +func (x *GetCurrentActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[310] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCurrentActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetCurrentActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{310} +} + +func (x *GetCurrentActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *GetCurrentActivityTemplateRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *GetCurrentActivityTemplateRequest) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *GetCurrentActivityTemplateRequest) GetLocale() string { + if x != nil { + return x.Locale + } + return "" +} + +type GetCurrentActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Runtime *ActivityTemplateRuntime `protobuf:"bytes,1,opt,name=runtime,proto3" json:"runtime,omitempty"` + Found bool `protobuf:"varint,2,opt,name=found,proto3" json:"found,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetCurrentActivityTemplateResponse) Reset() { + *x = GetCurrentActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[311] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetCurrentActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCurrentActivityTemplateResponse) ProtoMessage() {} + +func (x *GetCurrentActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[311] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCurrentActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetCurrentActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{311} +} + +func (x *GetCurrentActivityTemplateResponse) GetRuntime() *ActivityTemplateRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +func (x *GetCurrentActivityTemplateResponse) GetFound() bool { + if x != nil { + return x.Found + } + return false +} + +// VisitActivityTemplate 是 daily_visit 的唯一事实入口;command_id 负责请求重放, +// 自然幂等键仍是用户+发布版本+UTC task_day。 +type VisitActivityTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + CommandId string `protobuf:"bytes,5,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + // version_no comes from GetCurrentActivityTemplate and prevents disable/re-publish races. + VersionNo int64 `protobuf:"varint,6,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VisitActivityTemplateRequest) Reset() { + *x = VisitActivityTemplateRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[312] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VisitActivityTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisitActivityTemplateRequest) ProtoMessage() {} + +func (x *VisitActivityTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[312] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisitActivityTemplateRequest.ProtoReflect.Descriptor instead. +func (*VisitActivityTemplateRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{312} +} + +func (x *VisitActivityTemplateRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *VisitActivityTemplateRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *VisitActivityTemplateRequest) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *VisitActivityTemplateRequest) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *VisitActivityTemplateRequest) GetCommandId() string { + if x != nil { + return x.CommandId + } + return "" +} + +func (x *VisitActivityTemplateRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +type VisitActivityTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Runtime *ActivityTemplateRuntime `protobuf:"bytes,1,opt,name=runtime,proto3" json:"runtime,omitempty"` + Tasks []*ActivityTemplateRuntimeTask `protobuf:"bytes,2,rep,name=tasks,proto3" json:"tasks,omitempty"` + FirstVisit bool `protobuf:"varint,3,opt,name=first_visit,json=firstVisit,proto3" json:"first_visit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VisitActivityTemplateResponse) Reset() { + *x = VisitActivityTemplateResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[313] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VisitActivityTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisitActivityTemplateResponse) ProtoMessage() {} + +func (x *VisitActivityTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[313] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisitActivityTemplateResponse.ProtoReflect.Descriptor instead. +func (*VisitActivityTemplateResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{313} +} + +func (x *VisitActivityTemplateResponse) GetRuntime() *ActivityTemplateRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +func (x *VisitActivityTemplateResponse) GetTasks() []*ActivityTemplateRuntimeTask { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *VisitActivityTemplateResponse) GetFirstVisit() bool { + if x != nil { + return x.FirstVisit + } + return false +} + +type ListActivityTemplateTasksRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + TaskDay string `protobuf:"bytes,5,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + // version_no 与 task_day 同时提供时读取该用户确实参与过的历史不可变任务版本。 + VersionNo int64 `protobuf:"varint,6,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateTasksRequest) Reset() { + *x = ListActivityTemplateTasksRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[314] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateTasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateTasksRequest) ProtoMessage() {} + +func (x *ListActivityTemplateTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[314] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateTasksRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateTasksRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{314} +} + +func (x *ListActivityTemplateTasksRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplateTasksRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ListActivityTemplateTasksRequest) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *ListActivityTemplateTasksRequest) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ListActivityTemplateTasksRequest) GetTaskDay() string { + if x != nil { + return x.TaskDay + } + return "" +} + +func (x *ListActivityTemplateTasksRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +type ListActivityTemplateTasksResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Runtime *ActivityTemplateRuntime `protobuf:"bytes,1,opt,name=runtime,proto3" json:"runtime,omitempty"` + Tasks []*ActivityTemplateRuntimeTask `protobuf:"bytes,2,rep,name=tasks,proto3" json:"tasks,omitempty"` + NextRefreshAtMs int64 `protobuf:"varint,3,opt,name=next_refresh_at_ms,json=nextRefreshAtMs,proto3" json:"next_refresh_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateTasksResponse) Reset() { + *x = ListActivityTemplateTasksResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[315] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateTasksResponse) ProtoMessage() {} + +func (x *ListActivityTemplateTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[315] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateTasksResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateTasksResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{315} +} + +func (x *ListActivityTemplateTasksResponse) GetRuntime() *ActivityTemplateRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +func (x *ListActivityTemplateTasksResponse) GetTasks() []*ActivityTemplateRuntimeTask { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *ListActivityTemplateTasksResponse) GetNextRefreshAtMs() int64 { + if x != nil { + return x.NextRefreshAtMs + } + return 0 +} + +type ClaimActivityTemplateTaskRewardRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + TaskDay string `protobuf:"bytes,5,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + TaskKey string `protobuf:"bytes,6,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + CommandId string `protobuf:"bytes,7,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + // version_no 来自 tasks/runtime 响应,强制把同日重发前后的任务领奖绑定到正确不可变版本。 + VersionNo int64 `protobuf:"varint,8,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ClaimActivityTemplateTaskRewardRequest) Reset() { + *x = ClaimActivityTemplateTaskRewardRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[316] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ClaimActivityTemplateTaskRewardRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClaimActivityTemplateTaskRewardRequest) ProtoMessage() {} + +func (x *ClaimActivityTemplateTaskRewardRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[316] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClaimActivityTemplateTaskRewardRequest.ProtoReflect.Descriptor instead. +func (*ClaimActivityTemplateTaskRewardRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{316} +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetTaskDay() string { + if x != nil { + return x.TaskDay + } + return "" +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetCommandId() string { + if x != nil { + return x.CommandId + } + return "" +} + +func (x *ClaimActivityTemplateTaskRewardRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +type ClaimActivityTemplateTaskRewardResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Claim *ActivityTemplateTaskClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + Claimed bool `protobuf:"varint,2,opt,name=claimed,proto3" json:"claimed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ClaimActivityTemplateTaskRewardResponse) Reset() { + *x = ClaimActivityTemplateTaskRewardResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[317] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ClaimActivityTemplateTaskRewardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClaimActivityTemplateTaskRewardResponse) ProtoMessage() {} + +func (x *ClaimActivityTemplateTaskRewardResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[317] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClaimActivityTemplateTaskRewardResponse.ProtoReflect.Descriptor instead. +func (*ClaimActivityTemplateTaskRewardResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{317} +} + +func (x *ClaimActivityTemplateTaskRewardResponse) GetClaim() *ActivityTemplateTaskClaim { + if x != nil { + return x.Claim + } + return nil +} + +func (x *ClaimActivityTemplateTaskRewardResponse) GetClaimed() bool { + if x != nil { + return x.Claimed + } + return false +} + +type ListActivityTemplateLeaderboardRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + TemplateCode string `protobuf:"bytes,4,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + BoardType string `protobuf:"bytes,5,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,6,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // version_no > 0 时严格读取该发布版本;省略仅用于当前/最近版本兼容查询。 + VersionNo int64 `protobuf:"varint,9,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateLeaderboardRequest) Reset() { + *x = ListActivityTemplateLeaderboardRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[318] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateLeaderboardRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateLeaderboardRequest) ProtoMessage() {} + +func (x *ListActivityTemplateLeaderboardRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[318] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateLeaderboardRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateLeaderboardRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{318} +} + +func (x *ListActivityTemplateLeaderboardRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplateLeaderboardRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardRequest) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardRequest) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ListActivityTemplateLeaderboardRequest) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ListActivityTemplateLeaderboardRequest) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *ListActivityTemplateLeaderboardRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +type ListActivityTemplateLeaderboardResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Runtime *ActivityTemplateRuntime `protobuf:"bytes,1,opt,name=runtime,proto3" json:"runtime,omitempty"` + BoardType string `protobuf:"bytes,2,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,3,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + PeriodStartMs int64 `protobuf:"varint,4,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,5,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + PeriodStatus string `protobuf:"bytes,6,opt,name=period_status,json=periodStatus,proto3" json:"period_status,omitempty"` + Entries []*ActivityTemplateLeaderboardEntry `protobuf:"bytes,7,rep,name=entries,proto3" json:"entries,omitempty"` + MyEntry *ActivityTemplateLeaderboardEntry `protobuf:"bytes,8,opt,name=my_entry,json=myEntry,proto3" json:"my_entry,omitempty"` + Total int64 `protobuf:"varint,9,opt,name=total,proto3" json:"total,omitempty"` + // settle_after_ms 是含迟到窗口的排他结算水位;到达该毫秒后榜单不再接收事件。 + SettleAfterMs int64 `protobuf:"varint,10,opt,name=settle_after_ms,json=settleAfterMs,proto3" json:"settle_after_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateLeaderboardResponse) Reset() { + *x = ListActivityTemplateLeaderboardResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[319] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateLeaderboardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateLeaderboardResponse) ProtoMessage() {} + +func (x *ListActivityTemplateLeaderboardResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[319] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateLeaderboardResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateLeaderboardResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{319} +} + +func (x *ListActivityTemplateLeaderboardResponse) GetRuntime() *ActivityTemplateRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +func (x *ListActivityTemplateLeaderboardResponse) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ListActivityTemplateLeaderboardResponse) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *ListActivityTemplateLeaderboardResponse) GetPeriodStartMs() int64 { + if x != nil { + return x.PeriodStartMs + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardResponse) GetPeriodEndMs() int64 { + if x != nil { + return x.PeriodEndMs + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardResponse) GetPeriodStatus() string { + if x != nil { + return x.PeriodStatus + } + return "" +} + +func (x *ListActivityTemplateLeaderboardResponse) GetEntries() []*ActivityTemplateLeaderboardEntry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *ListActivityTemplateLeaderboardResponse) GetMyEntry() *ActivityTemplateLeaderboardEntry { + if x != nil { + return x.MyEntry + } + return nil +} + +func (x *ListActivityTemplateLeaderboardResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *ListActivityTemplateLeaderboardResponse) GetSettleAfterMs() int64 { + if x != nil { + return x.SettleAfterMs + } + return 0 +} + +// ActivityTemplateRankPeriod 是 UTC 日榜或活动总榜的冻结/发奖状态机。 +type ActivityTemplateRankPeriod struct { + state protoimpl.MessageState `protogen:"open.v1"` + TemplateId string `protobuf:"bytes,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,2,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + VersionNo int64 `protobuf:"varint,3,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + BoardType string `protobuf:"bytes,4,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,5,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + PeriodStartMs int64 `protobuf:"varint,6,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,7,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + // pending -> settling(物化中)-> rewarding(奖励 job 独立推进)-> settled;也可 cancelled。 + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + SettledAtMs int64 `protobuf:"varint,9,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` + SettleAfterMs int64 `protobuf:"varint,10,opt,name=settle_after_ms,json=settleAfterMs,proto3" json:"settle_after_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRankPeriod) Reset() { + *x = ActivityTemplateRankPeriod{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[320] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRankPeriod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRankPeriod) ProtoMessage() {} + +func (x *ActivityTemplateRankPeriod) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[320] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRankPeriod.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRankPeriod) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{320} +} + +func (x *ActivityTemplateRankPeriod) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateRankPeriod) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplateRankPeriod) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateRankPeriod) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ActivityTemplateRankPeriod) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *ActivityTemplateRankPeriod) GetPeriodStartMs() int64 { + if x != nil { + return x.PeriodStartMs + } + return 0 +} + +func (x *ActivityTemplateRankPeriod) GetPeriodEndMs() int64 { + if x != nil { + return x.PeriodEndMs + } + return 0 +} + +func (x *ActivityTemplateRankPeriod) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplateRankPeriod) GetSettledAtMs() int64 { + if x != nil { + return x.SettledAtMs + } + return 0 +} + +func (x *ActivityTemplateRankPeriod) GetSettleAfterMs() int64 { + if x != nil { + return x.SettleAfterMs + } + return 0 +} + +type ActivityTemplateRewardJob struct { + state protoimpl.MessageState `protogen:"open.v1"` + RewardJobId string `protobuf:"bytes,1,opt,name=reward_job_id,json=rewardJobId,proto3" json:"reward_job_id,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateCode string `protobuf:"bytes,3,opt,name=template_code,json=templateCode,proto3" json:"template_code,omitempty"` + VersionNo int64 `protobuf:"varint,4,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + BoardType string `protobuf:"bytes,5,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,6,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + RankNo int32 `protobuf:"varint,7,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + UserId int64 `protobuf:"varint,8,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,9,opt,name=score,proto3" json:"score,omitempty"` + ResourceGroupId int64 `protobuf:"varint,10,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + WalletCommandId string `protobuf:"bytes,11,opt,name=wallet_command_id,json=walletCommandId,proto3" json:"wallet_command_id,omitempty"` + WalletGrantId string `protobuf:"bytes,12,opt,name=wallet_grant_id,json=walletGrantId,proto3" json:"wallet_grant_id,omitempty"` + Status string `protobuf:"bytes,13,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,14,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + AttemptCount int32 `protobuf:"varint,15,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"` + CreatedAtMs int64 `protobuf:"varint,16,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,17,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + GrantedAtMs int64 `protobuf:"varint,18,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + RewardSnapshotId string `protobuf:"bytes,19,opt,name=reward_snapshot_id,json=rewardSnapshotId,proto3" json:"reward_snapshot_id,omitempty"` + RewardSnapshotHash string `protobuf:"bytes,20,opt,name=reward_snapshot_hash,json=rewardSnapshotHash,proto3" json:"reward_snapshot_hash,omitempty"` + RewardName string `protobuf:"bytes,21,opt,name=reward_name,json=rewardName,proto3" json:"reward_name,omitempty"` + RewardItems []*ActivityTemplateRewardItem `protobuf:"bytes,22,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + MaxAttempts int32 `protobuf:"varint,23,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + NextRetryAtMs int64 `protobuf:"varint,24,opt,name=next_retry_at_ms,json=nextRetryAtMs,proto3" json:"next_retry_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActivityTemplateRewardJob) Reset() { + *x = ActivityTemplateRewardJob{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[321] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActivityTemplateRewardJob) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityTemplateRewardJob) ProtoMessage() {} + +func (x *ActivityTemplateRewardJob) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[321] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivityTemplateRewardJob.ProtoReflect.Descriptor instead. +func (*ActivityTemplateRewardJob) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{321} +} + +func (x *ActivityTemplateRewardJob) GetRewardJobId() string { + if x != nil { + return x.RewardJobId + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetTemplateCode() string { + if x != nil { + return x.TemplateCode + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetRankNo() int32 { + if x != nil { + return x.RankNo + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetResourceGroupId() int64 { + if x != nil { + return x.ResourceGroupId + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetWalletCommandId() string { + if x != nil { + return x.WalletCommandId + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetWalletGrantId() string { + if x != nil { + return x.WalletGrantId + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetFailureReason() string { + if x != nil { + return x.FailureReason + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetAttemptCount() int32 { + if x != nil { + return x.AttemptCount + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetGrantedAtMs() int64 { + if x != nil { + return x.GrantedAtMs + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetRewardSnapshotId() string { + if x != nil { + return x.RewardSnapshotId + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetRewardSnapshotHash() string { + if x != nil { + return x.RewardSnapshotHash + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetRewardName() string { + if x != nil { + return x.RewardName + } + return "" +} + +func (x *ActivityTemplateRewardJob) GetRewardItems() []*ActivityTemplateRewardItem { + if x != nil { + return x.RewardItems + } + return nil +} + +func (x *ActivityTemplateRewardJob) GetMaxAttempts() int32 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *ActivityTemplateRewardJob) GetNextRetryAtMs() int64 { + if x != nil { + return x.NextRetryAtMs + } + return 0 +} + +type AdminListActivityTemplateLeaderboardRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + VersionNo int64 `protobuf:"varint,3,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + BoardType string `protobuf:"bytes,4,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,5,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminListActivityTemplateLeaderboardRequest) Reset() { + *x = AdminListActivityTemplateLeaderboardRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[322] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminListActivityTemplateLeaderboardRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminListActivityTemplateLeaderboardRequest) ProtoMessage() {} + +func (x *AdminListActivityTemplateLeaderboardRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[322] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminListActivityTemplateLeaderboardRequest.ProtoReflect.Descriptor instead. +func (*AdminListActivityTemplateLeaderboardRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{322} +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *AdminListActivityTemplateLeaderboardRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +type AdminListActivityTemplateLeaderboardResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Period *ActivityTemplateRankPeriod `protobuf:"bytes,1,opt,name=period,proto3" json:"period,omitempty"` + Entries []*ActivityTemplateLeaderboardEntry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` + Total int64 `protobuf:"varint,3,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminListActivityTemplateLeaderboardResponse) Reset() { + *x = AdminListActivityTemplateLeaderboardResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[323] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminListActivityTemplateLeaderboardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminListActivityTemplateLeaderboardResponse) ProtoMessage() {} + +func (x *AdminListActivityTemplateLeaderboardResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[323] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminListActivityTemplateLeaderboardResponse.ProtoReflect.Descriptor instead. +func (*AdminListActivityTemplateLeaderboardResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{323} +} + +func (x *AdminListActivityTemplateLeaderboardResponse) GetPeriod() *ActivityTemplateRankPeriod { + if x != nil { + return x.Period + } + return nil +} + +func (x *AdminListActivityTemplateLeaderboardResponse) GetEntries() []*ActivityTemplateLeaderboardEntry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *AdminListActivityTemplateLeaderboardResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +type ListActivityTemplateRewardJobsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + VersionNo int64 `protobuf:"varint,3,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + BoardType string `protobuf:"bytes,4,opt,name=board_type,json=boardType,proto3" json:"board_type,omitempty"` + PeriodKey string `protobuf:"bytes,5,opt,name=period_key,json=periodKey,proto3" json:"period_key,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateRewardJobsRequest) Reset() { + *x = ListActivityTemplateRewardJobsRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[324] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateRewardJobsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateRewardJobsRequest) ProtoMessage() {} + +func (x *ListActivityTemplateRewardJobsRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[324] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateRewardJobsRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateRewardJobsRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{324} +} + +func (x *ListActivityTemplateRewardJobsRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplateRewardJobsRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ListActivityTemplateRewardJobsRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ListActivityTemplateRewardJobsRequest) GetBoardType() string { + if x != nil { + return x.BoardType + } + return "" +} + +func (x *ListActivityTemplateRewardJobsRequest) GetPeriodKey() string { + if x != nil { + return x.PeriodKey + } + return "" +} + +func (x *ListActivityTemplateRewardJobsRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListActivityTemplateRewardJobsRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListActivityTemplateRewardJobsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +type ListActivityTemplateRewardJobsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Jobs []*ActivityTemplateRewardJob `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateRewardJobsResponse) Reset() { + *x = ListActivityTemplateRewardJobsResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[325] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateRewardJobsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateRewardJobsResponse) ProtoMessage() {} + +func (x *ListActivityTemplateRewardJobsResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[325] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateRewardJobsResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateRewardJobsResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{325} +} + +func (x *ListActivityTemplateRewardJobsResponse) GetJobs() []*ActivityTemplateRewardJob { + if x != nil { + return x.Jobs + } + return nil +} + +func (x *ListActivityTemplateRewardJobsResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +type RetryActivityTemplateRewardJobRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + RewardJobId string `protobuf:"bytes,3,opt,name=reward_job_id,json=rewardJobId,proto3" json:"reward_job_id,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RetryActivityTemplateRewardJobRequest) Reset() { + *x = RetryActivityTemplateRewardJobRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[326] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RetryActivityTemplateRewardJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RetryActivityTemplateRewardJobRequest) ProtoMessage() {} + +func (x *RetryActivityTemplateRewardJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[326] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RetryActivityTemplateRewardJobRequest.ProtoReflect.Descriptor instead. +func (*RetryActivityTemplateRewardJobRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{326} +} + +func (x *RetryActivityTemplateRewardJobRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *RetryActivityTemplateRewardJobRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *RetryActivityTemplateRewardJobRequest) GetRewardJobId() string { + if x != nil { + return x.RewardJobId + } + return "" +} + +func (x *RetryActivityTemplateRewardJobRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type RetryActivityTemplateRewardJobResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Job *ActivityTemplateRewardJob `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RetryActivityTemplateRewardJobResponse) Reset() { + *x = RetryActivityTemplateRewardJobResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[327] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RetryActivityTemplateRewardJobResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RetryActivityTemplateRewardJobResponse) ProtoMessage() {} + +func (x *RetryActivityTemplateRewardJobResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[327] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RetryActivityTemplateRewardJobResponse.ProtoReflect.Descriptor instead. +func (*RetryActivityTemplateRewardJobResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{327} +} + +func (x *RetryActivityTemplateRewardJobResponse) GetJob() *ActivityTemplateRewardJob { + if x != nil { + return x.Job + } + return nil +} + +type ListActivityTemplateTaskClaimsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + VersionNo int64 `protobuf:"varint,3,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + TaskDay string `protobuf:"bytes,4,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + TaskKey string `protobuf:"bytes,5,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + UserId int64 `protobuf:"varint,6,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,8,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,9,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateTaskClaimsRequest) Reset() { + *x = ListActivityTemplateTaskClaimsRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[328] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateTaskClaimsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateTaskClaimsRequest) ProtoMessage() {} + +func (x *ListActivityTemplateTaskClaimsRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[328] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateTaskClaimsRequest.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateTaskClaimsRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{328} +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetTaskDay() string { + if x != nil { + return x.TaskDay + } + return "" +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListActivityTemplateTaskClaimsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +type ListActivityTemplateTaskClaimsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Claims []*ActivityTemplateTaskClaim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActivityTemplateTaskClaimsResponse) Reset() { + *x = ListActivityTemplateTaskClaimsResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[329] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActivityTemplateTaskClaimsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivityTemplateTaskClaimsResponse) ProtoMessage() {} + +func (x *ListActivityTemplateTaskClaimsResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[329] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListActivityTemplateTaskClaimsResponse.ProtoReflect.Descriptor instead. +func (*ListActivityTemplateTaskClaimsResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{329} +} + +func (x *ListActivityTemplateTaskClaimsResponse) GetClaims() []*ActivityTemplateTaskClaim { + if x != nil { + return x.Claims + } + return nil +} + +func (x *ListActivityTemplateTaskClaimsResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +type RetryActivityTemplateTaskClaimRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TemplateId string `protobuf:"bytes,2,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + ClaimId string `protobuf:"bytes,3,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + OperatorAdminId int64 `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RetryActivityTemplateTaskClaimRequest) Reset() { + *x = RetryActivityTemplateTaskClaimRequest{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[330] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RetryActivityTemplateTaskClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RetryActivityTemplateTaskClaimRequest) ProtoMessage() {} + +func (x *RetryActivityTemplateTaskClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[330] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RetryActivityTemplateTaskClaimRequest.ProtoReflect.Descriptor instead. +func (*RetryActivityTemplateTaskClaimRequest) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{330} +} + +func (x *RetryActivityTemplateTaskClaimRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *RetryActivityTemplateTaskClaimRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *RetryActivityTemplateTaskClaimRequest) GetClaimId() string { + if x != nil { + return x.ClaimId + } + return "" +} + +func (x *RetryActivityTemplateTaskClaimRequest) GetOperatorAdminId() int64 { + if x != nil { + return x.OperatorAdminId + } + return 0 +} + +type RetryActivityTemplateTaskClaimResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Claim *ActivityTemplateTaskClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RetryActivityTemplateTaskClaimResponse) Reset() { + *x = RetryActivityTemplateTaskClaimResponse{} + mi := &file_proto_activity_v1_activity_proto_msgTypes[331] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RetryActivityTemplateTaskClaimResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RetryActivityTemplateTaskClaimResponse) ProtoMessage() {} + +func (x *RetryActivityTemplateTaskClaimResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_activity_v1_activity_proto_msgTypes[331] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RetryActivityTemplateTaskClaimResponse.ProtoReflect.Descriptor instead. +func (*RetryActivityTemplateTaskClaimResponse) Descriptor() ([]byte, []int) { + return file_proto_activity_v1_activity_proto_rawDescGZIP(), []int{331} +} + +func (x *RetryActivityTemplateTaskClaimResponse) GetClaim() *ActivityTemplateTaskClaim { + if x != nil { + return x.Claim + } + return nil +} + var File_proto_activity_v1_activity_proto protoreflect.FileDescriptor -var file_proto_activity_v1_activity_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x11, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x6f, 0x6f, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, - 0x26, 0x0a, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x73, 0x65, 0x6e, 0x74, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, - 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x49, 0x0a, 0x13, 0x50, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x3f, 0x0a, 0x14, 0x50, - 0x69, 0x6e, 0x67, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x02, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x18, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x54, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x7e, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, - 0x62, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x72, 0x65, - 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x65, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x54, 0x61, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x17, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x0c, 0x49, 0x6e, 0x62, 0x6f, - 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x41, - 0x74, 0x4d, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, - 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, - 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, - 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x4d, - 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x1c, 0x4d, 0x61, 0x72, 0x6b, 0x49, 0x6e, - 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x72, 0x6b, - 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x57, - 0x0a, 0x1c, 0x4d, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, - 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x22, 0x55, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xe7, 0x05, 0x0a, 0x19, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, - 0x0a, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, - 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, - 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x16, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x46, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4a, 0x73, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x22, - 0x62, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, - 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x22, 0x8f, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x75, 0x62, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x1a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x1b, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0xca, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x22, 0x59, 0x0a, 0x1b, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x92, 0x01, - 0x0a, 0x22, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x49, - 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x23, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x70, 0x65, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x88, 0x01, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0xb9, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, - 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x74, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x74, 0x6c, 0x4d, 0x73, 0x22, 0xc6, 0x01, - 0x0a, 0x11, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x68, - 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, - 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0xda, 0x06, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x6e, - 0x69, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2b, - 0x0a, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, - 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, - 0x73, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, - 0x74, 0x4d, 0x73, 0x22, 0x63, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa6, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x16, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0xe9, 0x02, 0x0a, 0x17, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, - 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, - 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x61, - 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcd, 0x02, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x27, 0x0a, 0x0f, - 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x60, 0x0a, 0x12, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x1c, 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x44, 0x0a, 0x1d, 0x45, 0x6e, 0x73, 0x75, - 0x72, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x73, - 0x75, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd5, - 0x01, 0x0a, 0x1d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x73, 0x6f, - 0x6e, 0x22, 0x82, 0x01, 0x0a, 0x18, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xa6, 0x01, 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, - 0x5a, 0x0a, 0x23, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0xaf, 0x01, 0x0a, 0x23, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x78, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0x8e, 0x01, - 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3f, 0x0a, - 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0xa8, - 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, - 0x0a, 0x12, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, - 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, - 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xa7, 0x07, 0x0a, 0x0e, 0x54, 0x61, - 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, - 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x2d, - 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, - 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, - 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, - 0x73, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x22, 0x6c, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x22, 0xd4, 0x06, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x6e, 0x69, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, - 0x6e, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, - 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, - 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, - 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, - 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x6d, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x6f, 0x0a, 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x18, - 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xb1, 0x01, 0x0a, 0x1e, 0x53, 0x65, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x1f, - 0x53, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x35, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, 0xfe, 0x02, 0x0a, 0x1e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x75, 0x6c, 0x65, 0x4a, - 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xcd, 0x01, 0x0a, 0x1f, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xd5, 0x02, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x69, 0x6c, 0x79, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x61, - 0x69, 0x6c, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xb0, 0x04, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x79, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, - 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0x8e, 0x03, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x6e, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x61, 0x69, 0x6c, - 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, - 0x75, 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x61, 0x69, 0x6c, - 0x79, 0x55, 0x73, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x72, - 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x64, 0x61, 0x69, 0x6c, 0x79, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x79, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x76, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x28, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x65, 0x6c, 0x69, 0x67, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, - 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x8c, 0x01, 0x0a, 0x1e, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x1f, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, - 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x52, 0x0a, 0x0b, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x22, 0x58, 0x0a, 0x22, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0xb0, 0x02, 0x0a, 0x25, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x69, 0x6c, - 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, - 0x61, 0x69, 0x6c, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x26, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8b, 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x45, 0x6e, 0x64, - 0x4d, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xe8, 0x03, 0x0a, 0x17, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, - 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, - 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, - 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x75, 0x73, 0x64, 0x4d, 0x69, - 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x22, 0x89, 0x02, 0x0a, 0x19, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, - 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xc9, 0x06, 0x0a, - 0x18, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, - 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x74, - 0x69, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x69, 0x65, 0x72, - 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, - 0x0a, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0xc1, 0x02, 0x0a, 0x19, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x40, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, - 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x12, 0x41, - 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0x72, 0x0a, 0x23, - 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x6c, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd5, - 0x03, 0x0a, 0x21, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x12, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, - 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x59, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, - 0x6c, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xe4, 0x01, - 0x0a, 0x26, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x27, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x44, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xbc, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, - 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xcc, 0x02, 0x0a, 0x1c, 0x43, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, - 0x13, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, - 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x2a, 0x0a, - 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x93, 0x02, 0x0a, 0x1e, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x45, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, - 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb2, - 0x06, 0x0a, 0x1d, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x11, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x55, 0x73, 0x64, 0x4d, 0x69, - 0x6e, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, - 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x63, - 0x68, 0x65, 0x64, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x71, - 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x71, 0x75, 0x61, 0x6c, 0x69, - 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x30, 0x0a, - 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x22, 0xcf, 0x02, 0x0a, 0x20, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, - 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, - 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, - 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x95, 0x03, 0x0a, 0x1e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x49, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, - 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x77, 0x0a, - 0x28, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x29, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd5, - 0x03, 0x0a, 0x26, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, - 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x71, - 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x71, 0x75, 0x61, 0x6c, 0x69, - 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x73, 0x6f, 0x6e, - 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x27, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x22, 0x5e, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x22, 0x76, 0x0a, 0x29, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xee, 0x01, 0x0a, 0x2b, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, - 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x79, 0x0a, 0x2c, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0xde, 0x01, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x2a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xb0, 0x03, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x69, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x19, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xad, 0x03, 0x0a, 0x1a, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x74, - 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2d, - 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x4f, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xbb, 0x02, 0x0a, 0x1c, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xed, 0x05, 0x0a, 0x19, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, - 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, - 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x13, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x63, 0x68, - 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x32, - 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, - 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x85, 0x03, 0x0a, 0x1a, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x44, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, - 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x73, 0x0a, - 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x20, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0xae, 0x01, - 0x0a, 0x21, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x45, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbd, - 0x01, 0x0a, 0x1e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa8, - 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x25, 0x4c, 0x69, - 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x5a, 0x0a, 0x24, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x88, 0x03, 0x0a, 0x27, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x41, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, - 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x4f, - 0x0a, 0x25, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x70, - 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x4f, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, - 0x70, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x71, 0x0a, 0x28, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0xfb, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x22, 0x84, 0x01, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xa2, 0x01, 0x0a, 0x22, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, - 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xac, 0x03, - 0x0a, 0x1b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x3b, 0x0a, 0x1a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x18, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x51, 0x0a, 0x08, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x73, 0x22, 0xc5, 0x01, 0x0a, - 0x28, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xca, 0x02, 0x0a, 0x16, 0x52, 0x6f, 0x6f, 0x6d, 0x54, - 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, - 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa7, 0x05, - 0x0a, 0x1c, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, - 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, - 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x14, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, - 0x70, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, - 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x73, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa7, 0x04, 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x6d, - 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, - 0x4d, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, - 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x4c, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, - 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, - 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x12, 0x5c, 0x0a, - 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0xae, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x58, - 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0xe2, 0x01, 0x0a, 0x25, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x05, - 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, - 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x26, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8c, 0x02, 0x0a, 0x28, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, - 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x73, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xaf, - 0x01, 0x0a, 0x28, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, - 0x22, 0x7c, 0x0a, 0x29, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, - 0x0a, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x60, - 0x0a, 0x15, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x79, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, 0x79, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0xae, 0x02, 0x0a, 0x15, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, - 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, - 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x6e, 0x0a, 0x1f, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xeb, 0x03, 0x0a, 0x20, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, - 0x73, 0x69, 0x67, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x53, - 0x69, 0x67, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x4e, 0x6f, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x79, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x65, 0x78, 0x74, - 0x44, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x44, 0x61, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, - 0x44, 0x61, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x07, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x53, 0x69, 0x67, 0x6e, - 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x22, 0xc7, 0x02, 0x0a, 0x1b, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x65, 0x76, 0x65, 0x6e, - 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4e, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x44, 0x61, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x79, - 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, - 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x55, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, - 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, - 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xe2, 0x01, 0x0a, 0x22, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x42, - 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x49, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x67, - 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, - 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb6, 0x04, 0x0a, 0x14, 0x53, 0x65, 0x76, 0x65, - 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4e, 0x6f, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x44, 0x61, 0x79, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x22, 0xf6, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, - 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x44, 0x61, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x64, - 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x64, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x7a, 0x0a, 0x21, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x49, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xe5, 0x01, 0x0a, 0x0a, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, - 0x72, 0x61, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb8, 0x03, - 0x0a, 0x09, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x73, - 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb2, 0x04, 0x0a, 0x09, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1c, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xba, 0x04, - 0x0a, 0x12, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4f, 0x76, 0x65, 0x72, - 0x76, 0x69, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, - 0x0a, 0x1c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x39, - 0x0a, 0x19, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x16, 0x6e, 0x65, 0x78, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x20, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x1c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x41, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x39, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x61, 0x64, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x42, 0x61, 0x64, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3b, 0x0a, - 0x1a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x17, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x68, 0x0a, 0x19, 0x47, 0x65, - 0x74, 0x4d, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, - 0x63, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x06, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x79, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x22, 0xe8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4f, 0x76, - 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, - 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x96, - 0x02, 0x0a, 0x18, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x54, - 0x72, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x37, 0x0a, 0x18, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x15, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x64, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x10, 0x62, 0x61, 0x64, 0x67, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x06, - 0x77, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x54, 0x72, 0x61, - 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x77, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x12, 0x3f, 0x0a, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x67, 0x61, - 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x05, - 0x63, 0x68, 0x61, 0x72, 0x6d, 0x22, 0x78, 0x0a, 0x27, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, - 0x98, 0x01, 0x0a, 0x28, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x82, 0x06, 0x0a, 0x0e, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x12, 0x22, 0x0a, - 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, - 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, - 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x45, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0xc5, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xa4, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x24, - 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, - 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xe1, 0x01, - 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, - 0x77, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, - 0x65, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x22, 0x94, 0x02, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, - 0x6e, 0x65, 0x77, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x6e, 0x65, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x16, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x61, 0x6c, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x72, 0x65, 0x61, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, - 0x61, 0x6c, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, - 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, - 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x73, 0x0a, 0x15, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x06, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x22, - 0x76, 0x0a, 0x25, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x26, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x6b, - 0x0a, 0x18, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x22, 0xa1, 0x02, 0x0a, 0x20, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x0b, - 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, - 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, - 0x8d, 0x01, 0x0a, 0x21, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, - 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, - 0x85, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x23, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x94, 0x01, 0x0a, 0x24, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, - 0x73, 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x33, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x74, - 0x72, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xff, - 0x02, 0x0a, 0x16, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, - 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x72, - 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xf9, 0x03, 0x0a, 0x16, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1c, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xe7, 0x01, 0x0a, 0x1d, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x74, - 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7a, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, - 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, - 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x22, 0x93, 0x02, 0x0a, 0x14, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x6e, - 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x6e, 0x69, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xfa, 0x06, 0x0a, 0x15, 0x41, 0x63, 0x68, - 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x68, 0x69, - 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x63, 0x68, 0x69, 0x65, - 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x16, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x50, - 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x6f, 0x6e, 0x6f, - 0x72, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, - 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x5f, - 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, - 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x47, 0x0a, 0x0a, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xae, 0x02, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, - 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x75, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x9e, - 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0c, 0x61, - 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, - 0xd4, 0x02, 0x0a, 0x1e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, - 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xf8, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, - 0x19, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1a, 0x75, 0x6e, 0x6c, - 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x75, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xa6, 0x02, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x64, 0x67, 0x65, 0x5f, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x64, 0x67, - 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x70, - 0x69, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, - 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x62, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa1, - 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x70, - 0x5f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x70, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x12, - 0x53, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, - 0x62, 0x61, 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6c, 0x65, 0x42, 0x61, - 0x64, 0x67, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x62, 0x61, - 0x64, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x0b, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x22, 0xd3, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x39, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x42, - 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x42, - 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xa7, 0x06, 0x0a, 0x22, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x68, 0x69, 0x65, - 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, - 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x61, 0x64, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x61, 0x64, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x69, - 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x61, 0x75, 0x74, 0x6f, 0x50, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x0a, - 0x10, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x56, 0x69, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, - 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x8b, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, - 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x61, 0x63, 0x68, 0x69, - 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xab, - 0x01, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x68, - 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x23, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x68, - 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0xd6, 0x02, 0x0a, 0x0e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x50, 0x72, 0x69, 0x7a, 0x65, 0x54, 0x69, - 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x74, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x74, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x50, 0x70, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xf7, 0x04, 0x0a, 0x0f, 0x57, 0x68, 0x65, - 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x28, 0x0a, 0x10, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, 0x12, - 0x22, 0x0a, 0x0d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x70, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x6f, 0x6c, 0x52, 0x61, 0x74, 0x65, - 0x50, 0x70, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x6f, - 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x52, 0x74, 0x70, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x69, 0x65, - 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x65, - 0x65, 0x6c, 0x50, 0x72, 0x69, 0x7a, 0x65, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, - 0x72, 0x73, 0x22, 0xbb, 0x02, 0x0a, 0x0d, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, - 0x4d, 0x65, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x61, 0x77, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x72, - 0x61, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, - 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x0a, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x69, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0xd6, 0x05, 0x0a, 0x0f, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x74, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x74, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x28, 0x0a, 0x10, 0x72, 0x74, 0x70, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x74, 0x70, 0x57, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, - 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x07, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb1, 0x02, 0x0a, 0x0f, 0x57, 0x68, - 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x72, - 0x74, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x74, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x51, 0x0a, - 0x17, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, - 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x65, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x65, 0x65, - 0x6c, 0x44, 0x72, 0x61, 0x77, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x77, 0x68, 0x65, 0x65, 0x6c, - 0x22, 0x56, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x66, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, - 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x49, 0x64, - 0x22, 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x68, 0x65, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x65, 0x65, - 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, - 0x57, 0x0a, 0x19, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xc8, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x22, 0x68, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, - 0x05, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x05, 0x64, 0x72, 0x61, 0x77, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xe3, 0x02, - 0x0a, 0x10, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x0a, - 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x52, 0x74, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, - 0x70, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x44, 0x72, 0x61, 0x77, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x72, - 0x61, 0x77, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, - 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x22, 0x48, 0x0a, 0x0e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x47, 0x69, - 0x66, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x57, 0x0a, 0x10, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x22, 0xab, 0x04, 0x0a, 0x0f, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x15, 0x0a, - 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, - 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x72, 0x47, 0x69, 0x66, 0x74, 0x52, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x13, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x65, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x1a, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x22, 0xca, 0x03, 0x0a, 0x14, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, 0x6e, - 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, - 0x4e, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe9, 0x01, - 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, - 0x43, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, - 0x73, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x70, 0x0a, 0x1c, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x79, 0x63, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x06, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x6a, 0x0a, 0x19, 0x47, - 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, - 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x22, - 0xb8, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x73, 0x0a, 0x1d, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, - 0xb4, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0xe4, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x12, 0x47, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x71, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x21, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x49, 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, - 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x98, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x12, 0x4e, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x48, 0x0a, 0x08, 0x6d, 0x79, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x6d, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x22, 0x85, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, - 0x74, 0x61, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x16, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x4e, 0x0a, - 0x0b, 0x74, 0x6f, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x88, 0x01, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x06, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x06, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x59, 0x0a, 0x12, 0x43, 0x50, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x22, 0xe8, 0x02, 0x0a, 0x12, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x13, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x87, - 0x01, 0x0a, 0x10, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0xa1, 0x03, 0x0a, 0x11, 0x43, 0x50, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, - 0x6e, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, - 0x72, 0x41, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x62, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, - 0x61, 0x6e, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x42, 0x12, 0x20, - 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x29, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x61, - 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa6, 0x04, 0x0a, - 0x16, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, - 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, - 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, - 0x5f, 0x6e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, - 0x6f, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x7f, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x77, - 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xe1, 0x02, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x50, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, - 0x64, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x52, 0x61, 0x6e, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x52, 0x0a, 0x1c, 0x47, 0x65, - 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x5e, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, - 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xc0, - 0x01, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x22, 0x61, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x50, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa4, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x50, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x22, 0x72, 0x0a, 0x23, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x50, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x8e, 0x01, 0x0a, 0x13, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x5f, - 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, - 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, - 0x0a, 0x14, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, - 0x22, 0xb0, 0x04, 0x0a, 0x12, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, - 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x6d, 0x69, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, - 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x61, 0x67, 0x65, 0x5f, - 0x64, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x40, 0x0a, 0x07, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, - 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, - 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, - 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x84, 0x07, 0x0a, 0x18, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, - 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, - 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x63, 0x6f, - 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x3d, 0x0a, 0x1b, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x18, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xda, 0x01, 0x0a, 0x1b, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x6f, 0x73, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, - 0x73, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x76, 0x0a, 0x1f, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x06, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x22, 0x6d, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, - 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, - 0x22, 0x5c, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x22, 0xbe, - 0x01, 0x0a, 0x1f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, - 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, - 0x79, 0x0a, 0x20, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, - 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x22, 0x53, - 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x22, 0x8c, 0x02, 0x0a, 0x24, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xc6, 0x01, 0x0a, 0x25, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x22, 0x77, 0x0a, 0x26, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, 0x1d, 0x47, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x95, 0x03, 0x0a, 0x1e, 0x47, 0x65, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x52, 0x05, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, - 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x22, 0x87, 0x01, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x32, 0xe2, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb1, 0x06, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x68, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, - 0x62, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x54, 0x61, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x4d, 0x61, 0x72, - 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, - 0x64, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x12, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, - 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, - 0x6f, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x68, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x61, 0x6e, 0x6f, 0x75, - 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x61, 0x6e, 0x6f, 0x75, 0x74, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb0, 0x04, 0x0a, 0x1b, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, 0x0a, 0x13, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x74, 0x0a, 0x13, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x81, - 0x07, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x43, 0x72, 0x6f, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, - 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, - 0x0a, 0x17, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, - 0x1d, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x28, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6d, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6f, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x70, 0x0a, 0x23, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x32, 0xc8, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0f, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6b, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd9, 0x06, - 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, - 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x20, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x3a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x1c, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x64, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcf, 0x03, 0x0a, 0x12, 0x41, 0x63, - 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x6b, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, - 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, - 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5f, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, - 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x79, 0x42, 0x61, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x68, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x61, 0x64, 0x67, - 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x61, 0x64, 0x67, 0x65, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x7b, 0x0a, 0x0c, 0x57, - 0x68, 0x65, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x12, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xaa, 0x01, 0x0a, 0x19, 0x52, 0x6f, 0x6f, - 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x91, 0x03, 0x0a, 0x11, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x12, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x91, 0x01, 0x0a, 0x13, 0x43, 0x50, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x7a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x9c, 0x03, - 0x0a, 0x14, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, - 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8b, 0x05, 0x0a, - 0x10, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x7a, 0x0a, 0x15, 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, - 0x16, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x16, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x8c, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, - 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, - 0x73, 0x74, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x78, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x78, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x87, 0x01, 0x0a, 0x18, 0x52, - 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x87, 0x04, 0x0a, 0x10, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x61, - 0x73, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, - 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x17, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbc, - 0x02, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x12, 0x3a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, - 0x73, 0x75, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd9, 0x03, - 0x0a, 0x1e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x95, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xba, 0x02, 0x0a, 0x1a, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x1a, 0x43, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe3, 0x03, 0x0a, 0x1f, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x1c, 0x47, - 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x98, 0x01, 0x0a, - 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd, 0x02, 0x0a, - 0x1f, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x9e, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd0, 0x03, 0x0a, - 0x1b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x92, 0x01, 0x0a, - 0x1d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, - 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x1d, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x37, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, - 0x95, 0x04, 0x0a, 0x24, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, - 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x24, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x3e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8e, 0x05, 0x0a, 0x20, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x92, 0x01, 0x0a, - 0x1d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x95, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x89, 0x05, 0x0a, 0x1e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, - 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, - 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, - 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x94, 0x07, 0x0a, 0x16, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x77, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, - 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, - 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x4c, 0x69, - 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x53, - 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xab, 0x03, 0x0a, 0x18, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, - 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, - 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, - 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x50, 0x57, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x50, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe2, 0x07, 0x0a, 0x19, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, - 0x6c, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, - 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, - 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x79, - 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x92, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x94, - 0x02, 0x0a, 0x16, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x49, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x74, 0x0a, 0x13, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x53, - 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x65, - 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbb, 0x03, 0x0a, 0x1b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, - 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x76, - 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, - 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x76, - 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x49, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0xe4, 0x06, 0x0a, 0x17, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x72, 0x6f, - 0x77, 0x74, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x68, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x68, 0x0a, 0x0f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, - 0x69, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x54, 0x69, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x69, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x16, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, - 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, - 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xae, 0x03, 0x0a, 0x17, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, - 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, - 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, - 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, - 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, - 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc7, 0x03, 0x0a, 0x11, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x65, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x11, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x68, 0x65, - 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x74, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x68, - 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x68, 0x65, - 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2e, 0x5a, 0x2c, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_activity_v1_activity_proto_rawDesc = "" + + "\n" + + " proto/activity/v1/activity.proto\x12\x11hyapp.activity.v1\x1a!proto/events/room/v1/events.proto\"\xa5\x01\n" + + "\vRequestMeta\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x16\n" + + "\x06caller\x18\x02 \x01(\tR\x06caller\x12&\n" + + "\x0fgateway_node_id\x18\x03 \x01(\tR\rgatewayNodeId\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\x04 \x01(\x03R\bsentAtMs\x12\x19\n" + + "\bapp_code\x18\x05 \x01(\tR\aappCode\"I\n" + + "\x13PingActivityRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"?\n" + + "\x14PingActivityResponse\x12\x0e\n" + + "\x02ok\x18\x01 \x01(\bR\x02ok\x12\x17\n" + + "\anode_id\x18\x02 \x01(\tR\x06nodeId\"o\n" + + "\x18GetActivityStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vactivity_id\x18\x02 \x01(\tR\n" + + "activityId\"T\n" + + "\x19GetActivityStatusResponse\x12\x1f\n" + + "\vactivity_id\x18\x01 \x01(\tR\n" + + "activityId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\"~\n" + + "\x11MessageTabSection\x12\x18\n" + + "\asection\x18\x01 \x01(\tR\asection\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12!\n" + + "\funread_count\x18\x03 \x01(\x03R\vunreadCount\x12\x16\n" + + "\x06source\x18\x04 \x01(\tR\x06source\"e\n" + + "\x16ListMessageTabsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"[\n" + + "\x17ListMessageTabsResponse\x12@\n" + + "\bsections\x18\x01 \x03(\v2$.hyapp.activity.v1.MessageTabSectionR\bsections\"\xb9\x02\n" + + "\fInboxMessage\x12\x1d\n" + + "\n" + + "message_id\x18\x01 \x01(\tR\tmessageId\x12\x18\n" + + "\asection\x18\x02 \x01(\tR\asection\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x18\n" + + "\asummary\x18\x04 \x01(\tR\asummary\x12\x12\n" + + "\x04body\x18\x05 \x01(\tR\x04body\x12\x19\n" + + "\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x1b\n" + + "\timage_url\x18\a \x01(\tR\bimageUrl\x12\x1f\n" + + "\vaction_type\x18\b \x01(\tR\n" + + "actionType\x12!\n" + + "\faction_param\x18\t \x01(\tR\vactionParam\x12\x12\n" + + "\x04read\x18\n" + + " \x01(\bR\x04read\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\v \x01(\x03R\bsentAtMs\"\xbd\x01\n" + + "\x18ListInboxMessagesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x18\n" + + "\asection\x18\x03 \x01(\tR\asection\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "page_token\x18\x05 \x01(\tR\tpageToken\"\x94\x01\n" + + "\x19ListInboxMessagesResponse\x12\x18\n" + + "\asection\x18\x01 \x01(\tR\asection\x125\n" + + "\x05items\x18\x02 \x03(\v2\x1f.hyapp.activity.v1.InboxMessageR\x05items\x12&\n" + + "\x0fnext_page_token\x18\x03 \x01(\tR\rnextPageToken\"\x89\x01\n" + + "\x1bMarkInboxMessageReadRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "message_id\x18\x03 \x01(\tR\tmessageId\"o\n" + + "\x1cMarkInboxMessageReadResponse\x12\x1d\n" + + "\n" + + "message_id\x18\x01 \x01(\tR\tmessageId\x12\x12\n" + + "\x04read\x18\x02 \x01(\bR\x04read\x12\x1c\n" + + "\n" + + "read_at_ms\x18\x03 \x01(\x03R\breadAtMs\"\x84\x01\n" + + "\x1bMarkInboxSectionReadRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x18\n" + + "\asection\x18\x03 \x01(\tR\asection\"W\n" + + "\x1cMarkInboxSectionReadResponse\x12\x18\n" + + "\asection\x18\x01 \x01(\tR\asection\x12\x1d\n" + + "\n" + + "read_count\x18\x02 \x01(\x03R\treadCount\"\x87\x01\n" + + "\x19DeleteInboxMessageRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "message_id\x18\x03 \x01(\tR\tmessageId\"U\n" + + "\x1aDeleteInboxMessageResponse\x12\x1d\n" + + "\n" + + "message_id\x18\x01 \x01(\tR\tmessageId\x12\x18\n" + + "\adeleted\x18\x02 \x01(\bR\adeleted\"\xe7\x05\n" + + "\x19CreateInboxMessageRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x1a\n" + + "\bproducer\x18\x03 \x01(\tR\bproducer\x12*\n" + + "\x11producer_event_id\x18\x04 \x01(\tR\x0fproducerEventId\x12.\n" + + "\x13producer_event_type\x18\x05 \x01(\tR\x11producerEventType\x12!\n" + + "\fmessage_type\x18\x06 \x01(\tR\vmessageType\x12%\n" + + "\x0eaggregate_type\x18\a \x01(\tR\raggregateType\x12!\n" + + "\faggregate_id\x18\b \x01(\tR\vaggregateId\x12\x1f\n" + + "\vtemplate_id\x18\t \x01(\tR\n" + + "templateId\x12)\n" + + "\x10template_version\x18\n" + + " \x01(\tR\x0ftemplateVersion\x12\x14\n" + + "\x05title\x18\v \x01(\tR\x05title\x12\x18\n" + + "\asummary\x18\f \x01(\tR\asummary\x12\x12\n" + + "\x04body\x18\r \x01(\tR\x04body\x12\x19\n" + + "\bicon_url\x18\x0e \x01(\tR\aiconUrl\x12\x1b\n" + + "\timage_url\x18\x0f \x01(\tR\bimageUrl\x12\x1f\n" + + "\vaction_type\x18\x10 \x01(\tR\n" + + "actionType\x12!\n" + + "\faction_param\x18\x11 \x01(\tR\vactionParam\x12\x1a\n" + + "\bpriority\x18\x12 \x01(\x05R\bpriority\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\x13 \x01(\x03R\bsentAtMs\x12 \n" + + "\fexpire_at_ms\x18\x14 \x01(\x03R\n" + + "expireAtMs\x12#\n" + + "\rmetadata_json\x18\x15 \x01(\tR\fmetadataJson\"U\n" + + "\x1aCreateInboxMessageResponse\x12\x1d\n" + + "\n" + + "message_id\x18\x01 \x01(\tR\tmessageId\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xd3\x02\n" + + "\x16CreateFanoutJobRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12!\n" + + "\fmessage_type\x18\x03 \x01(\tR\vmessageType\x12!\n" + + "\ftarget_scope\x18\x04 \x01(\tR\vtargetScope\x12,\n" + + "\x12target_filter_json\x18\x05 \x01(\tR\x10targetFilterJson\x124\n" + + "\x16template_snapshot_json\x18\x06 \x01(\tR\x14templateSnapshotJson\x12\x1d\n" + + "\n" + + "batch_size\x18\a \x01(\x05R\tbatchSize\x12\x1d\n" + + "\n" + + "created_by\x18\b \x01(\tR\tcreatedBy\"b\n" + + "\x17CreateFanoutJobResponse\x12\x15\n" + + "\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x18\n" + + "\acreated\x18\x03 \x01(\bR\acreated\"\x8f\x03\n" + + "\rActionConfirm\x12\x1d\n" + + "\n" + + "confirm_id\x18\x01 \x01(\tR\tconfirmId\x12#\n" + + "\rbusiness_type\x18\x02 \x01(\tR\fbusinessType\x12)\n" + + "\x10business_subtype\x18\x03 \x01(\tR\x0fbusinessSubtype\x12\x1f\n" + + "\vbusiness_id\x18\x04 \x01(\tR\n" + + "businessId\x12$\n" + + "\x0esender_user_id\x18\x05 \x01(\x03R\fsenderUserId\x12(\n" + + "\x10receiver_user_id\x18\x06 \x01(\x03R\x0ereceiverUserId\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x16\n" + + "\x06action\x18\b \x01(\tR\x06action\x12&\n" + + "\x0fprocessed_at_ms\x18\t \x01(\x03R\rprocessedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\"\xb2\x01\n" + + "\x1aAcceptActionConfirmRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "confirm_id\x18\x02 \x01(\tR\tconfirmId\x12\"\n" + + "\ractor_user_id\x18\x03 \x01(\x03R\vactorUserId\x12\x1d\n" + + "\n" + + "command_id\x18\x04 \x01(\tR\tcommandId\"Y\n" + + "\x1bAcceptActionConfirmResponse\x12:\n" + + "\aconfirm\x18\x01 \x01(\v2 .hyapp.activity.v1.ActionConfirmR\aconfirm\"\xca\x01\n" + + "\x1aRejectActionConfirmRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "confirm_id\x18\x02 \x01(\tR\tconfirmId\x12\"\n" + + "\ractor_user_id\x18\x03 \x01(\x03R\vactorUserId\x12\x1d\n" + + "\n" + + "command_id\x18\x04 \x01(\tR\tcommandId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\"Y\n" + + "\x1bRejectActionConfirmResponse\x12:\n" + + "\aconfirm\x18\x01 \x01(\v2 .hyapp.activity.v1.ActionConfirmR\aconfirm\"\x92\x01\n" + + "\"BatchGetActionConfirmStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1f\n" + + "\vconfirm_ids\x18\x03 \x03(\tR\n" + + "confirmIds\"]\n" + + "#BatchGetActionConfirmStatusResponse\x126\n" + + "\x05items\x18\x01 \x03(\v2 .hyapp.activity.v1.ActionConfirmR\x05items\"\xd2\x01\n" + + "%ListConversationActionConfirmsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12 \n" + + "\fpeer_user_id\x18\x03 \x01(\x03R\n" + + "peerUserId\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "page_token\x18\x05 \x01(\tR\tpageToken\"\x88\x01\n" + + "&ListConversationActionConfirmsResponse\x126\n" + + "\x05items\x18\x01 \x03(\v2 .hyapp.activity.v1.ActionConfirmR\x05items\x12&\n" + + "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xb9\x01\n" + + "\x10CronBatchRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x15\n" + + "\x06run_id\x18\x02 \x01(\tR\x05runId\x12\x1b\n" + + "\tworker_id\x18\x03 \x01(\tR\bworkerId\x12\x1d\n" + + "\n" + + "batch_size\x18\x04 \x01(\x05R\tbatchSize\x12\x1e\n" + + "\vlock_ttl_ms\x18\x05 \x01(\x03R\tlockTtlMs\"\xc6\x01\n" + + "\x11CronBatchResponse\x12#\n" + + "\rclaimed_count\x18\x01 \x01(\x05R\fclaimedCount\x12'\n" + + "\x0fprocessed_count\x18\x02 \x01(\x05R\x0eprocessedCount\x12#\n" + + "\rsuccess_count\x18\x03 \x01(\x05R\fsuccessCount\x12#\n" + + "\rfailure_count\x18\x04 \x01(\x05R\ffailureCount\x12\x19\n" + + "\bhas_more\x18\x05 \x01(\bR\ahasMore\"\xda\x06\n" + + "\bTaskItem\x12\x17\n" + + "\atask_id\x18\x01 \x01(\tR\x06taskId\x12\x1b\n" + + "\ttask_type\x18\x02 \x01(\tR\btaskType\x12\x1a\n" + + "\bcategory\x18\x03 \x01(\tR\bcategory\x12\x1f\n" + + "\vmetric_type\x18\x04 \x01(\tR\n" + + "metricType\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12!\n" + + "\ftarget_value\x18\a \x01(\x03R\vtargetValue\x12\x1f\n" + + "\vtarget_unit\x18\b \x01(\tR\n" + + "targetUnit\x12%\n" + + "\x0eprogress_value\x18\t \x01(\x03R\rprogressValue\x12,\n" + + "\x12reward_coin_amount\x18\n" + + " \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12\x1c\n" + + "\tclaimable\x18\f \x01(\bR\tclaimable\x12\x19\n" + + "\btask_day\x18\r \x01(\tR\ataskDay\x12$\n" + + "\x0eserver_time_ms\x18\x0e \x01(\x03R\fserverTimeMs\x12+\n" + + "\x12next_refresh_at_ms\x18\x0f \x01(\x03R\x0fnextRefreshAtMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x10 \x01(\x05R\tsortOrder\x12\x18\n" + + "\aversion\x18\x11 \x01(\x03R\aversion\x12#\n" + + "\raudience_type\x18\x12 \x01(\tR\faudienceType\x12\x19\n" + + "\bicon_key\x18\x13 \x01(\tR\aiconKey\x12\x19\n" + + "\bicon_url\x18\x14 \x01(\tR\aiconUrl\x12\x1f\n" + + "\vaction_type\x18\x15 \x01(\tR\n" + + "actionType\x12!\n" + + "\faction_param\x18\x16 \x01(\tR\vactionParam\x12.\n" + + "\x13action_payload_json\x18\x17 \x01(\tR\x11actionPayloadJson\x122\n" + + "\x15dimension_filter_json\x18\x18 \x01(\tR\x13dimensionFilterJson\x12*\n" + + "\x11reward_asset_type\x18\x19 \x01(\tR\x0frewardAssetType\"\xad\x01\n" + + "\vTaskSection\x12\x18\n" + + "\asection\x18\x01 \x01(\tR\asection\x121\n" + + "\x05items\x18\x02 \x03(\v2\x1b.hyapp.activity.v1.TaskItemR\x05items\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\x12+\n" + + "\x12next_refresh_at_ms\x18\x04 \x01(\x03R\x0fnextRefreshAtMs\"c\n" + + "\x14ListUserTasksRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\xa6\x01\n" + + "\x15ListUserTasksResponse\x12:\n" + + "\bsections\x18\x01 \x03(\v2\x1e.hyapp.activity.v1.TaskSectionR\bsections\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\x12+\n" + + "\x12next_refresh_at_ms\x18\x03 \x01(\x03R\x0fnextRefreshAtMs\"\xd5\x01\n" + + "\x16ClaimTaskRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\atask_id\x18\x03 \x01(\tR\x06taskId\x12\x1b\n" + + "\ttask_type\x18\x04 \x01(\tR\btaskType\x12\x19\n" + + "\btask_day\x18\x05 \x01(\tR\ataskDay\x12\x1d\n" + + "\n" + + "command_id\x18\x06 \x01(\tR\tcommandId\"\xe9\x02\n" + + "\x17ClaimTaskRewardResponse\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x17\n" + + "\atask_id\x18\x02 \x01(\tR\x06taskId\x12\x1b\n" + + "\ttask_type\x18\x03 \x01(\tR\btaskType\x12\x19\n" + + "\btask_day\x18\x04 \x01(\tR\ataskDay\x12,\n" + + "\x12reward_coin_amount\x18\x05 \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x122\n" + + "\x15wallet_transaction_id\x18\a \x01(\tR\x13walletTransactionId\x12\"\n" + + "\rgranted_at_ms\x18\b \x01(\x03R\vgrantedAtMs\x12\x18\n" + + "\aclaimed\x18\t \x01(\bR\aclaimed\x12*\n" + + "\x11reward_asset_type\x18\n" + + " \x01(\tR\x0frewardAssetType\"\xcd\x02\n" + + "\x17ConsumeTaskEventRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12\x1d\n" + + "\n" + + "event_type\x18\x03 \x01(\tR\teventType\x12%\n" + + "\x0esource_service\x18\x04 \x01(\tR\rsourceService\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x12\x1f\n" + + "\vmetric_type\x18\x06 \x01(\tR\n" + + "metricType\x12\x14\n" + + "\x05value\x18\a \x01(\x03R\x05value\x12$\n" + + "\x0eoccurred_at_ms\x18\b \x01(\x03R\foccurredAtMs\x12'\n" + + "\x0fdimensions_json\x18\t \x01(\tR\x0edimensionsJson\"{\n" + + "\x18ConsumeTaskEventResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12,\n" + + "\x12matched_task_count\x18\x03 \x01(\x05R\x10matchedTaskCount\"`\n" + + "\x12BroadcastJoinGroup\x12\x19\n" + + "\bgroup_id\x18\x01 \x01(\tR\agroupId\x12\x12\n" + + "\x04type\x18\x02 \x01(\tR\x04type\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\"R\n" + + "\x1cEnsureBroadcastGroupsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"D\n" + + "\x1dEnsureBroadcastGroupsResponse\x12#\n" + + "\rensured_count\x18\x01 \x01(\x05R\fensuredCount\"\xd5\x01\n" + + "\x1dPublishRegionBroadcastRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12%\n" + + "\x0ebroadcast_type\x18\x04 \x01(\tR\rbroadcastType\x12!\n" + + "\fpayload_json\x18\x05 \x01(\tR\vpayloadJson\"\xb8\x01\n" + + "\x1dPublishGlobalBroadcastRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12%\n" + + "\x0ebroadcast_type\x18\x03 \x01(\tR\rbroadcastType\x12!\n" + + "\fpayload_json\x18\x04 \x01(\tR\vpayloadJson\"\x82\x01\n" + + "\x18PublishBroadcastResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x19\n" + + "\bgroup_id\x18\x02 \x01(\tR\agroupId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x18\n" + + "\acreated\x18\x04 \x01(\bR\acreated\"\xa6\x01\n" + + "\"RemoveRegionBroadcastMemberRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x16\n" + + "\x06reason\x18\x04 \x01(\tR\x06reason\"Z\n" + + "#RemoveRegionBroadcastMemberResponse\x12\x19\n" + + "\bgroup_id\x18\x01 \x01(\tR\agroupId\x12\x18\n" + + "\aremoved\x18\x02 \x01(\bR\aremoved\"\xaf\x01\n" + + "#ProcessBroadcastOutboxBatchResponse\x12#\n" + + "\rclaimed_count\x18\x01 \x01(\x05R\fclaimedCount\x12#\n" + + "\rsuccess_count\x18\x02 \x01(\x05R\fsuccessCount\x12#\n" + + "\rfailure_count\x18\x03 \x01(\x05R\ffailureCount\x12\x19\n" + + "\bhas_more\x18\x04 \x01(\bR\ahasMore\"\x8e\x01\n" + + "\x17ConsumeRoomEventRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12?\n" + + "\benvelope\x18\x02 \x01(\v2#.hyapp.events.room.v1.EventEnvelopeR\benvelope\"\xa8\x01\n" + + "\x18ConsumeRoomEventResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12,\n" + + "\x12broadcast_event_id\x18\x03 \x01(\tR\x10broadcastEventId\x12+\n" + + "\x11broadcast_created\x18\x04 \x01(\bR\x10broadcastCreated\"\xa7\a\n" + + "\x0eTaskDefinition\x12\x17\n" + + "\atask_id\x18\x01 \x01(\tR\x06taskId\x12\x1b\n" + + "\ttask_type\x18\x02 \x01(\tR\btaskType\x12\x1a\n" + + "\bcategory\x18\x03 \x01(\tR\bcategory\x12\x1f\n" + + "\vmetric_type\x18\x04 \x01(\tR\n" + + "metricType\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12!\n" + + "\ftarget_value\x18\a \x01(\x03R\vtargetValue\x12\x1f\n" + + "\vtarget_unit\x18\b \x01(\tR\n" + + "targetUnit\x12,\n" + + "\x12reward_coin_amount\x18\t \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\n" + + " \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\v \x01(\x05R\tsortOrder\x12\x18\n" + + "\aversion\x18\f \x01(\x03R\aversion\x12*\n" + + "\x11effective_from_ms\x18\r \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x0e \x01(\x03R\reffectiveToMs\x12-\n" + + "\x13created_by_admin_id\x18\x0f \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\x10 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x11 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x12 \x01(\x03R\vupdatedAtMs\x12#\n" + + "\raudience_type\x18\x13 \x01(\tR\faudienceType\x12\x19\n" + + "\bicon_key\x18\x14 \x01(\tR\aiconKey\x12\x19\n" + + "\bicon_url\x18\x15 \x01(\tR\aiconUrl\x12\x1f\n" + + "\vaction_type\x18\x16 \x01(\tR\n" + + "actionType\x12!\n" + + "\faction_param\x18\x17 \x01(\tR\vactionParam\x12.\n" + + "\x13action_payload_json\x18\x18 \x01(\tR\x11actionPayloadJson\x122\n" + + "\x15dimension_filter_json\x18\x19 \x01(\tR\x13dimensionFilterJson\x12*\n" + + "\x11reward_asset_type\x18\x1a \x01(\tR\x0frewardAssetType\"\xec\x01\n" + + "\x1aListTaskDefinitionsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\ttask_type\x18\x02 \x01(\tR\btaskType\x12\x1a\n" + + "\bcategory\x18\x03 \x01(\tR\bcategory\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x05 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"l\n" + + "\x1bListTaskDefinitionsResponse\x127\n" + + "\x05tasks\x18\x01 \x03(\v2!.hyapp.activity.v1.TaskDefinitionR\x05tasks\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xd4\x06\n" + + "\x1bUpsertTaskDefinitionRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\atask_id\x18\x02 \x01(\tR\x06taskId\x12\x1b\n" + + "\ttask_type\x18\x03 \x01(\tR\btaskType\x12\x1a\n" + + "\bcategory\x18\x04 \x01(\tR\bcategory\x12\x1f\n" + + "\vmetric_type\x18\x05 \x01(\tR\n" + + "metricType\x12\x14\n" + + "\x05title\x18\x06 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\a \x01(\tR\vdescription\x12!\n" + + "\ftarget_value\x18\b \x01(\x03R\vtargetValue\x12\x1f\n" + + "\vtarget_unit\x18\t \x01(\tR\n" + + "targetUnit\x12,\n" + + "\x12reward_coin_amount\x18\n" + + " \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\f \x01(\x05R\tsortOrder\x12*\n" + + "\x11effective_from_ms\x18\r \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x0e \x01(\x03R\reffectiveToMs\x12*\n" + + "\x11operator_admin_id\x18\x0f \x01(\x03R\x0foperatorAdminId\x12#\n" + + "\raudience_type\x18\x10 \x01(\tR\faudienceType\x12\x19\n" + + "\bicon_key\x18\x11 \x01(\tR\aiconKey\x12\x19\n" + + "\bicon_url\x18\x12 \x01(\tR\aiconUrl\x12\x1f\n" + + "\vaction_type\x18\x13 \x01(\tR\n" + + "actionType\x12!\n" + + "\faction_param\x18\x14 \x01(\tR\vactionParam\x12.\n" + + "\x13action_payload_json\x18\x15 \x01(\tR\x11actionPayloadJson\x122\n" + + "\x15dimension_filter_json\x18\x16 \x01(\tR\x13dimensionFilterJson\x12*\n" + + "\x11reward_asset_type\x18\x17 \x01(\tR\x0frewardAssetType\"o\n" + + "\x1cUpsertTaskDefinitionResponse\x125\n" + + "\x04task\x18\x01 \x01(\v2!.hyapp.activity.v1.TaskDefinitionR\x04task\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xb1\x01\n" + + "\x1eSetTaskDefinitionStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\atask_id\x18\x02 \x01(\tR\x06taskId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"X\n" + + "\x1fSetTaskDefinitionStatusResponse\x125\n" + + "\x04task\x18\x01 \x01(\v2!.hyapp.activity.v1.TaskDefinitionR\x04task\"\xfe\x02\n" + + "\x1ePublishTaskRewardPolicyRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12#\n" + + "\rinstance_code\x18\x02 \x01(\tR\finstanceCode\x12#\n" + + "\rtemplate_code\x18\x03 \x01(\tR\ftemplateCode\x12)\n" + + "\x10template_version\x18\x04 \x01(\tR\x0ftemplateVersion\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12*\n" + + "\x11reward_asset_type\x18\x06 \x01(\tR\x0frewardAssetType\x12\x1b\n" + + "\trule_json\x18\a \x01(\tR\bruleJson\x12*\n" + + "\x11operator_admin_id\x18\b \x01(\x03R\x0foperatorAdminId\x12&\n" + + "\x0fpublished_at_ms\x18\t \x01(\x03R\rpublishedAtMs\"\xcd\x01\n" + + "\x1fPublishTaskRewardPolicyResponse\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12#\n" + + "\rinstance_code\x18\x02 \x01(\tR\finstanceCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12*\n" + + "\x11reward_asset_type\x18\x04 \x01(\tR\x0frewardAssetType\x12&\n" + + "\x0fpublished_at_ms\x18\x05 \x01(\x03R\rpublishedAtMs\"\xd5\x02\n" + + "\x18RegistrationRewardConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12\x1f\n" + + "\vreward_type\x18\x03 \x01(\tR\n" + + "rewardType\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12*\n" + + "\x11resource_group_id\x18\x05 \x01(\x03R\x0fresourceGroupId\x12\x1f\n" + + "\vdaily_limit\x18\x06 \x01(\x03R\n" + + "dailyLimit\x12-\n" + + "\x13updated_by_admin_id\x18\a \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"\xb0\x04\n" + + "\x17RegistrationRewardClaim\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "reward_day\x18\x04 \x01(\tR\trewardDay\x12\x1f\n" + + "\vreward_type\x18\x05 \x01(\tR\n" + + "rewardType\x12\x1f\n" + + "\vcoin_amount\x18\x06 \x01(\x03R\n" + + "coinAmount\x12*\n" + + "\x11resource_group_id\x18\a \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12*\n" + + "\x11wallet_command_id\x18\t \x01(\tR\x0fwalletCommandId\x122\n" + + "\x15wallet_transaction_id\x18\n" + + " \x01(\tR\x13walletTransactionId\x12*\n" + + "\x11resource_grant_id\x18\v \x01(\tR\x0fresourceGrantId\x12%\n" + + "\x0efailure_reason\x18\f \x01(\tR\rfailureReason\x12\"\n" + + "\rclaimed_at_ms\x18\r \x01(\x03R\vclaimedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\"\x8e\x03\n" + + "\x1dRegistrationRewardEligibility\x12\x1f\n" + + "\vcan_receive\x18\x01 \x01(\bR\n" + + "canReceive\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\x12\x1f\n" + + "\vreward_type\x18\x04 \x01(\tR\n" + + "rewardType\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12*\n" + + "\x11resource_group_id\x18\x06 \x01(\x03R\x0fresourceGroupId\x12\x1f\n" + + "\vdaily_limit\x18\a \x01(\x03R\n" + + "dailyLimit\x12\x1d\n" + + "\n" + + "daily_used\x18\b \x01(\x03R\tdailyUsed\x12'\n" + + "\x0fdaily_remaining\x18\t \x01(\x03R\x0edailyRemaining\x12\x1d\n" + + "\n" + + "reward_day\x18\n" + + " \x01(\tR\trewardDay\x12$\n" + + "\x0eserver_time_ms\x18\v \x01(\x03R\fserverTimeMs\"v\n" + + "'GetRegistrationRewardEligibilityRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"~\n" + + "(GetRegistrationRewardEligibilityResponse\x12R\n" + + "\veligibility\x18\x01 \x01(\v20.hyapp.activity.v1.RegistrationRewardEligibilityR\veligibility\"\x8c\x01\n" + + "\x1eIssueRegistrationRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\"\xcf\x01\n" + + "\x1fIssueRegistrationRewardResponse\x12@\n" + + "\x05claim\x18\x01 \x01(\v2*.hyapp.activity.v1.RegistrationRewardClaimR\x05claim\x12R\n" + + "\veligibility\x18\x02 \x01(\v20.hyapp.activity.v1.RegistrationRewardEligibilityR\veligibility\x12\x16\n" + + "\x06issued\x18\x03 \x01(\bR\x06issued\"X\n" + + "\"GetRegistrationRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"j\n" + + "#GetRegistrationRewardConfigResponse\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.hyapp.activity.v1.RegistrationRewardConfigR\x06config\"\xb0\x02\n" + + "%UpdateRegistrationRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12\x1f\n" + + "\vreward_type\x18\x03 \x01(\tR\n" + + "rewardType\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12*\n" + + "\x11resource_group_id\x18\x05 \x01(\x03R\x0fresourceGroupId\x12\x1f\n" + + "\vdaily_limit\x18\x06 \x01(\x03R\n" + + "dailyLimit\x12*\n" + + "\x11operator_admin_id\x18\a \x01(\x03R\x0foperatorAdminId\"m\n" + + "&UpdateRegistrationRewardConfigResponse\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.hyapp.activity.v1.RegistrationRewardConfigR\x06config\"\x8b\x02\n" + + "#ListRegistrationRewardClaimsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\x12(\n" + + "\x10claimed_start_ms\x18\x06 \x01(\x03R\x0eclaimedStartMs\x12$\n" + + "\x0eclaimed_end_ms\x18\a \x01(\x03R\fclaimedEndMs\"\xb0\x01\n" + + "$ListRegistrationRewardClaimsResponse\x12B\n" + + "\x06claims\x18\x01 \x03(\v2*.hyapp.activity.v1.RegistrationRewardClaimR\x06claims\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12.\n" + + "\x13today_claimed_count\x18\x03 \x01(\x03R\x11todayClaimedCount\"\xe8\x03\n" + + "\x17FirstRechargeRewardTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\x02 \x01(\tR\btierCode\x12\x1b\n" + + "\ttier_name\x18\x03 \x01(\tR\btierName\x12&\n" + + "\x0fmin_coin_amount\x18\x04 \x01(\x03R\rminCoinAmount\x12&\n" + + "\x0fmax_coin_amount\x18\x05 \x01(\x03R\rmaxCoinAmount\x12*\n" + + "\x11resource_group_id\x18\x06 \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\b \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\n" + + " \x01(\x03R\vupdatedAtMs\x12(\n" + + "\x10usd_minor_amount\x18\v \x01(\x03R\x0eusdMinorAmount\x12*\n" + + "\x11google_product_id\x18\f \x01(\tR\x0fgoogleProductId\x12)\n" + + "\x10discount_percent\x18\r \x01(\x05R\x0fdiscountPercent\"\x89\x02\n" + + "\x19FirstRechargeRewardConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12@\n" + + "\x05tiers\x18\x03 \x03(\v2*.hyapp.activity.v1.FirstRechargeRewardTierR\x05tiers\x12-\n" + + "\x13updated_by_admin_id\x18\x04 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\xc9\x06\n" + + "\x18FirstRechargeRewardClaim\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "command_id\x18\x04 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x12\x17\n" + + "\atier_id\x18\x06 \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\a \x01(\tR\btierCode\x12*\n" + + "\x11resource_group_id\x18\b \x01(\x03R\x0fresourceGroupId\x120\n" + + "\x14recharge_coin_amount\x18\t \x01(\x03R\x12rechargeCoinAmount\x12+\n" + + "\x11recharge_sequence\x18\n" + + " \x01(\x03R\x10rechargeSequence\x12#\n" + + "\rrecharge_type\x18\v \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12*\n" + + "\x11wallet_command_id\x18\r \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\x0e \x01(\tR\rwalletGrantId\x12%\n" + + "\x0efailure_reason\x18\x0f \x01(\tR\rfailureReason\x12&\n" + + "\x0frecharged_at_ms\x18\x10 \x01(\x03R\rrechargedAtMs\x12\"\n" + + "\rgranted_at_ms\x18\x11 \x01(\x03R\vgrantedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x12 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x13 \x01(\x03R\vupdatedAtMs\x121\n" + + "\x15tier_usd_minor_amount\x18\x14 \x01(\x03R\x12tierUsdMinorAmount\x12*\n" + + "\x11google_product_id\x18\x15 \x01(\tR\x0fgoogleProductId\x12,\n" + + "\x12recharge_usd_minor\x18\x16 \x01(\x03R\x10rechargeUsdMinor\"\xc1\x02\n" + + "\x19FirstRechargeRewardStatus\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12@\n" + + "\x05tiers\x18\x02 \x03(\v2*.hyapp.activity.v1.FirstRechargeRewardTierR\x05tiers\x12\x1a\n" + + "\brewarded\x18\x03 \x01(\bR\brewarded\x12A\n" + + "\x05claim\x18\x04 \x01(\v2+.hyapp.activity.v1.FirstRechargeRewardClaimR\x05claim\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\x12C\n" + + "\x06claims\x18\x06 \x03(\v2+.hyapp.activity.v1.FirstRechargeRewardClaimR\x06claims\"r\n" + + "#GetFirstRechargeRewardStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"l\n" + + "$GetFirstRechargeRewardStatusResponse\x12D\n" + + "\x06status\x18\x01 \x01(\v2,.hyapp.activity.v1.FirstRechargeRewardStatusR\x06status\"\xd5\x03\n" + + "!ConsumeFirstRechargeRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "command_id\x18\x04 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x120\n" + + "\x14recharge_coin_amount\x18\x06 \x01(\x03R\x12rechargeCoinAmount\x12+\n" + + "\x11recharge_sequence\x18\a \x01(\x03R\x10rechargeSequence\x12#\n" + + "\rrecharge_type\x18\b \x01(\tR\frechargeType\x12$\n" + + "\x0eoccurred_at_ms\x18\t \x01(\x03R\foccurredAtMs\x12,\n" + + "\x12recharge_usd_minor\x18\n" + + " \x01(\x03R\x10rechargeUsdMinor\x12*\n" + + "\x11google_product_id\x18\v \x01(\tR\x0fgoogleProductId\"\x9b\x01\n" + + "\"ConsumeFirstRechargeRewardResponse\x12A\n" + + "\x05claim\x18\x01 \x01(\v2+.hyapp.activity.v1.FirstRechargeRewardClaimR\x05claim\x12\x1a\n" + + "\bconsumed\x18\x02 \x01(\bR\bconsumed\x12\x16\n" + + "\x06reason\x18\x03 \x01(\tR\x06reason\"Y\n" + + "#GetFirstRechargeRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"l\n" + + "$GetFirstRechargeRewardConfigResponse\x12D\n" + + "\x06config\x18\x01 \x01(\v2,.hyapp.activity.v1.FirstRechargeRewardConfigR\x06config\"\xe4\x01\n" + + "&UpdateFirstRechargeRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12@\n" + + "\x05tiers\x18\x03 \x03(\v2*.hyapp.activity.v1.FirstRechargeRewardTierR\x05tiers\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"o\n" + + "'UpdateFirstRechargeRewardConfigResponse\x12D\n" + + "\x06config\x18\x01 \x01(\v2,.hyapp.activity.v1.FirstRechargeRewardConfigR\x06config\"\xbc\x01\n" + + "$ListFirstRechargeRewardClaimsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\"\x82\x01\n" + + "%ListFirstRechargeRewardClaimsResponse\x12C\n" + + "\x06claims\x18\x01 \x03(\v2+.hyapp.activity.v1.FirstRechargeRewardClaimR\x06claims\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xcc\x02\n" + + "\x1cCumulativeRechargeRewardTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\x02 \x01(\tR\btierCode\x12\x1b\n" + + "\ttier_name\x18\x03 \x01(\tR\btierName\x12.\n" + + "\x13threshold_usd_minor\x18\x04 \x01(\x03R\x11thresholdUsdMinor\x12*\n" + + "\x11resource_group_id\x18\x05 \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"\x93\x02\n" + + "\x1eCumulativeRechargeRewardConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12E\n" + + "\x05tiers\x18\x03 \x03(\v2/.hyapp.activity.v1.CumulativeRechargeRewardTierR\x05tiers\x12-\n" + + "\x13updated_by_admin_id\x18\x04 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\xb2\x06\n" + + "\x1dCumulativeRechargeRewardGrant\x12\x19\n" + + "\bgrant_id\x18\x01 \x01(\tR\agrantId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tcycle_key\x18\x03 \x01(\tR\bcycleKey\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x19\n" + + "\bevent_id\x18\x05 \x01(\tR\aeventId\x12%\n" + + "\x0etransaction_id\x18\x06 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "command_id\x18\a \x01(\tR\tcommandId\x12\x17\n" + + "\atier_id\x18\b \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\t \x01(\tR\btierCode\x12.\n" + + "\x13threshold_usd_minor\x18\n" + + " \x01(\x03R\x11thresholdUsdMinor\x12*\n" + + "\x11resource_group_id\x18\v \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11reached_usd_minor\x18\f \x01(\x03R\x0freachedUsdMinor\x120\n" + + "\x14qualifying_usd_minor\x18\r \x01(\x03R\x12qualifyingUsdMinor\x120\n" + + "\x14recharge_coin_amount\x18\x0e \x01(\x03R\x12rechargeCoinAmount\x12#\n" + + "\rrecharge_type\x18\x0f \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\x10 \x01(\tR\x06status\x12*\n" + + "\x11wallet_command_id\x18\x11 \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\x12 \x01(\tR\rwalletGrantId\x12%\n" + + "\x0efailure_reason\x18\x13 \x01(\tR\rfailureReason\x12\"\n" + + "\rgranted_at_ms\x18\x14 \x01(\x03R\vgrantedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x15 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x16 \x01(\x03R\vupdatedAtMs\"\xcf\x02\n" + + " CumulativeRechargeRewardProgress\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12&\n" + + "\x0ftotal_usd_minor\x18\x04 \x01(\x03R\rtotalUsdMinor\x12*\n" + + "\x11total_coin_amount\x18\x05 \x01(\x03R\x0ftotalCoinAmount\x121\n" + + "\x15first_recharged_at_ms\x18\x06 \x01(\x03R\x12firstRechargedAtMs\x12/\n" + + "\x14last_recharged_at_ms\x18\a \x01(\x03R\x11lastRechargedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\"\x95\x03\n" + + "\x1eCumulativeRechargeRewardStatus\x12I\n" + + "\x06config\x18\x01 \x01(\v21.hyapp.activity.v1.CumulativeRechargeRewardConfigR\x06config\x12O\n" + + "\bprogress\x18\x02 \x01(\v23.hyapp.activity.v1.CumulativeRechargeRewardProgressR\bprogress\x12H\n" + + "\x06grants\x18\x03 \x03(\v20.hyapp.activity.v1.CumulativeRechargeRewardGrantR\x06grants\x12\x1b\n" + + "\tcycle_key\x18\x04 \x01(\tR\bcycleKey\x12&\n" + + "\x0fperiod_start_ms\x18\x05 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x06 \x01(\x03R\vperiodEndMs\x12$\n" + + "\x0eserver_time_ms\x18\a \x01(\x03R\fserverTimeMs\"w\n" + + "(GetCumulativeRechargeRewardStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"v\n" + + ")GetCumulativeRechargeRewardStatusResponse\x12I\n" + + "\x06status\x18\x01 \x01(\v21.hyapp.activity.v1.CumulativeRechargeRewardStatusR\x06status\"\xd5\x03\n" + + "&ConsumeCumulativeRechargeRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12%\n" + + "\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "command_id\x18\x04 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x120\n" + + "\x14recharge_coin_amount\x18\x06 \x01(\x03R\x12rechargeCoinAmount\x12+\n" + + "\x11recharge_sequence\x18\a \x01(\x03R\x10rechargeSequence\x12#\n" + + "\rrecharge_type\x18\b \x01(\tR\frechargeType\x120\n" + + "\x14qualifying_usd_minor\x18\t \x01(\x03R\x12qualifyingUsdMinor\x12!\n" + + "\fpayload_json\x18\n" + + " \x01(\tR\vpayloadJson\x12$\n" + + "\x0eoccurred_at_ms\x18\v \x01(\x03R\foccurredAtMs\"\xa7\x01\n" + + "'ConsumeCumulativeRechargeRewardResponse\x12H\n" + + "\x06grants\x18\x01 \x03(\v20.hyapp.activity.v1.CumulativeRechargeRewardGrantR\x06grants\x12\x1a\n" + + "\bconsumed\x18\x02 \x01(\bR\bconsumed\x12\x16\n" + + "\x06reason\x18\x03 \x01(\tR\x06reason\"^\n" + + "(GetCumulativeRechargeRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"v\n" + + ")GetCumulativeRechargeRewardConfigResponse\x12I\n" + + "\x06config\x18\x01 \x01(\v21.hyapp.activity.v1.CumulativeRechargeRewardConfigR\x06config\"\xee\x01\n" + + "+UpdateCumulativeRechargeRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12E\n" + + "\x05tiers\x18\x03 \x03(\v2/.hyapp.activity.v1.CumulativeRechargeRewardTierR\x05tiers\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"y\n" + + ",UpdateCumulativeRechargeRewardConfigResponse\x12I\n" + + "\x06config\x18\x01 \x01(\v21.hyapp.activity.v1.CumulativeRechargeRewardConfigR\x06config\"\xde\x01\n" + + ")ListCumulativeRechargeRewardGrantsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" + + "\tcycle_key\x18\x04 \x01(\tR\bcycleKey\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"\x8c\x01\n" + + "*ListCumulativeRechargeRewardGrantsResponse\x12H\n" + + "\x06grants\x18\x01 \x03(\v20.hyapp.activity.v1.CumulativeRechargeRewardGrantR\x06grants\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xb0\x03\n" + + "\x18InviteActivityRewardTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\x03R\x06tierId\x12\x1f\n" + + "\vreward_type\x18\x02 \x01(\tR\n" + + "rewardType\x12\x1b\n" + + "\ttier_code\x18\x03 \x01(\tR\btierCode\x12\x1b\n" + + "\ttier_name\x18\x04 \x01(\tR\btierName\x122\n" + + "\x15threshold_coin_amount\x18\x05 \x01(\x03R\x13thresholdCoinAmount\x12?\n" + + "\x1cthreshold_valid_invite_count\x18\x06 \x01(\x03R\x19thresholdValidInviteCount\x12,\n" + + "\x12reward_coin_amount\x18\a \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\t \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\"\xad\x03\n" + + "\x1aInviteActivityRewardConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12A\n" + + "\x05tiers\x18\x03 \x03(\v2+.hyapp.activity.v1.InviteActivityRewardTierR\x05tiers\x12-\n" + + "\x13updated_by_admin_id\x18\x04 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\x12O\n" + + "%per_invite_inviter_reward_coin_amount\x18\a \x01(\x03R perInviteInviterRewardCoinAmount\x12O\n" + + "%per_invite_invitee_reward_coin_amount\x18\b \x01(\x03R perInviteInviteeRewardCoinAmount\"\xbb\x02\n" + + "\x1cInviteActivityRewardProgress\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12;\n" + + "\x1atotal_recharge_coin_amount\x18\x04 \x01(\x03R\x17totalRechargeCoinAmount\x12,\n" + + "\x12valid_invite_count\x18\x05 \x01(\x03R\x10validInviteCount\x12;\n" + + "\x1aclaimed_reward_coin_amount\x18\x06 \x01(\x03R\x17claimedRewardCoinAmount\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xed\x05\n" + + "\x19InviteActivityRewardClaim\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tcycle_key\x18\x03 \x01(\tR\bcycleKey\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x1f\n" + + "\vreward_type\x18\x05 \x01(\tR\n" + + "rewardType\x12\x1d\n" + + "\n" + + "command_id\x18\x06 \x01(\tR\tcommandId\x12\x17\n" + + "\atier_id\x18\a \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\b \x01(\tR\btierCode\x12\x1b\n" + + "\ttier_name\x18\t \x01(\tR\btierName\x122\n" + + "\x15threshold_coin_amount\x18\n" + + " \x01(\x03R\x13thresholdCoinAmount\x12?\n" + + "\x1cthreshold_valid_invite_count\x18\v \x01(\x03R\x19thresholdValidInviteCount\x12#\n" + + "\rreached_value\x18\f \x01(\x03R\freachedValue\x12,\n" + + "\x12reward_coin_amount\x18\r \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\x0e \x01(\tR\x06status\x12*\n" + + "\x11wallet_command_id\x18\x0f \x01(\tR\x0fwalletCommandId\x122\n" + + "\x15wallet_transaction_id\x18\x10 \x01(\tR\x13walletTransactionId\x12%\n" + + "\x0efailure_reason\x18\x11 \x01(\tR\rfailureReason\x12\"\n" + + "\rgranted_at_ms\x18\x12 \x01(\x03R\vgrantedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x13 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x14 \x01(\x03R\vupdatedAtMs\"\x85\x03\n" + + "\x1aInviteActivityRewardStatus\x12E\n" + + "\x06config\x18\x01 \x01(\v2-.hyapp.activity.v1.InviteActivityRewardConfigR\x06config\x12K\n" + + "\bprogress\x18\x02 \x01(\v2/.hyapp.activity.v1.InviteActivityRewardProgressR\bprogress\x12D\n" + + "\x06claims\x18\x03 \x03(\v2,.hyapp.activity.v1.InviteActivityRewardClaimR\x06claims\x12\x1b\n" + + "\tcycle_key\x18\x04 \x01(\tR\bcycleKey\x12&\n" + + "\x0fperiod_start_ms\x18\x05 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x06 \x01(\x03R\vperiodEndMs\x12$\n" + + "\x0eserver_time_ms\x18\a \x01(\x03R\fserverTimeMs\"s\n" + + "$GetInviteActivityRewardStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"n\n" + + "%GetInviteActivityRewardStatusResponse\x12E\n" + + "\x06status\x18\x01 \x01(\v2-.hyapp.activity.v1.InviteActivityRewardStatusR\x06status\"\xc8\x01\n" + + " ClaimInviteActivityRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1f\n" + + "\vreward_type\x18\x03 \x01(\tR\n" + + "rewardType\x12\x17\n" + + "\atier_id\x18\x04 \x01(\x03R\x06tierId\x12\x1d\n" + + "\n" + + "command_id\x18\x05 \x01(\tR\tcommandId\"\xae\x01\n" + + "!ClaimInviteActivityRewardResponse\x12B\n" + + "\x05claim\x18\x01 \x01(\v2,.hyapp.activity.v1.InviteActivityRewardClaimR\x05claim\x12E\n" + + "\x06status\x18\x02 \x01(\v2-.hyapp.activity.v1.InviteActivityRewardStatusR\x06status\"\xbd\x01\n" + + "\x1eInviteActivityLeaderboardEntry\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12,\n" + + "\x12valid_invite_count\x18\x03 \x01(\x03R\x10validInviteCount\x12;\n" + + "\x1atotal_recharge_coin_amount\x18\x04 \x01(\x03R\x17totalRechargeCoinAmount\"\xa8\x01\n" + + "$ListInviteActivityLeaderboardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"\xcd\x01\n" + + "%ListInviteActivityLeaderboardResponse\x12K\n" + + "\aentries\x18\x01 \x03(\v21.hyapp.activity.v1.InviteActivityLeaderboardEntryR\aentries\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12\x1b\n" + + "\tcycle_key\x18\x03 \x01(\tR\bcycleKey\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"Z\n" + + "$GetInviteActivityRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"n\n" + + "%GetInviteActivityRewardConfigResponse\x12E\n" + + "\x06config\x18\x01 \x01(\v2-.hyapp.activity.v1.InviteActivityRewardConfigR\x06config\"\x88\x03\n" + + "'UpdateInviteActivityRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12A\n" + + "\x05tiers\x18\x03 \x03(\v2+.hyapp.activity.v1.InviteActivityRewardTierR\x05tiers\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\x12O\n" + + "%per_invite_inviter_reward_coin_amount\x18\x05 \x01(\x03R perInviteInviterRewardCoinAmount\x12O\n" + + "%per_invite_invitee_reward_coin_amount\x18\x06 \x01(\x03R perInviteInviteeRewardCoinAmount\"q\n" + + "(UpdateInviteActivityRewardConfigResponse\x12E\n" + + "\x06config\x18\x01 \x01(\v2-.hyapp.activity.v1.InviteActivityRewardConfigR\x06config\"\xfb\x01\n" + + "%ListInviteActivityRewardClaimsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x1f\n" + + "\vreward_type\x18\x03 \x01(\tR\n" + + "rewardType\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x1b\n" + + "\tcycle_key\x18\x05 \x01(\tR\bcycleKey\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"\x84\x01\n" + + "&ListInviteActivityRewardClaimsResponse\x12D\n" + + "\x06claims\x18\x01 \x03(\v2,.hyapp.activity.v1.InviteActivityRewardClaimR\x06claims\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xa2\x01\n" + + "\"InviteActivityRewardInviteeSummary\x12&\n" + + "\x0finvited_user_id\x18\x01 \x01(\x03R\rinvitedUserId\x120\n" + + "\x14recharge_coin_amount\x18\x02 \x01(\x03R\x12rechargeCoinAmount\x12\"\n" + + "\rinvited_at_ms\x18\x03 \x01(\x03R\vinvitedAtMs\"\xac\x03\n" + + "\x1bInviteActivityRewardSummary\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12!\n" + + "\finvite_count\x18\x04 \x01(\x03R\vinviteCount\x12,\n" + + "\x12valid_invite_count\x18\x05 \x01(\x03R\x10validInviteCount\x12;\n" + + "\x1atotal_recharge_coin_amount\x18\x06 \x01(\x03R\x17totalRechargeCoinAmount\x127\n" + + "\x18total_reward_coin_amount\x18\a \x01(\x03R\x15totalRewardCoinAmount\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\x12Q\n" + + "\binvitees\x18\t \x03(\v25.hyapp.activity.v1.InviteActivityRewardInviteeSummaryR\binvitees\"\xc5\x01\n" + + "(ListInviteActivityRewardSummariesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tcycle_key\x18\x03 \x01(\tR\bcycleKey\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\"\x8f\x01\n" + + ")ListInviteActivityRewardSummariesResponse\x12L\n" + + "\tsummaries\x18\x01 \x03(\v2..hyapp.activity.v1.InviteActivityRewardSummaryR\tsummaries\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xca\x02\n" + + "\x16RoomTurnoverRewardTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\x02 \x01(\tR\btierCode\x12\x1b\n" + + "\ttier_name\x18\x03 \x01(\tR\btierName\x120\n" + + "\x14threshold_coin_spent\x18\x04 \x01(\x03R\x12thresholdCoinSpent\x12,\n" + + "\x12reward_coin_amount\x18\x05 \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"\x87\x02\n" + + "\x18RoomTurnoverRewardConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12?\n" + + "\x05tiers\x18\x03 \x03(\v2).hyapp.activity.v1.RoomTurnoverRewardTierR\x05tiers\x12-\n" + + "\x13updated_by_admin_id\x18\x04 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\xa7\x05\n" + + "\x1cRoomTurnoverRewardSettlement\x12#\n" + + "\rsettlement_id\x18\x01 \x01(\tR\fsettlementId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\x12&\n" + + "\x0fperiod_start_ms\x18\x05 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x06 \x01(\x03R\vperiodEndMs\x12\x1d\n" + + "\n" + + "coin_spent\x18\a \x01(\x03R\tcoinSpent\x12\x17\n" + + "\atier_id\x18\b \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\t \x01(\tR\btierCode\x120\n" + + "\x14threshold_coin_spent\x18\n" + + " \x01(\x03R\x12thresholdCoinSpent\x12,\n" + + "\x12reward_coin_amount\x18\v \x01(\x03R\x10rewardCoinAmount\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12*\n" + + "\x11wallet_command_id\x18\r \x01(\tR\x0fwalletCommandId\x122\n" + + "\x15wallet_transaction_id\x18\x0e \x01(\tR\x13walletTransactionId\x12%\n" + + "\x0efailure_reason\x18\x0f \x01(\tR\rfailureReason\x12\"\n" + + "\rsettled_at_ms\x18\x10 \x01(\x03R\vsettledAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x11 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x12 \x01(\x03R\vupdatedAtMs\"\xa7\x04\n" + + "\x18RoomTurnoverRewardStatus\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.hyapp.activity.v1.RoomTurnoverRewardConfigR\x06config\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x03 \x01(\x03R\vownerUserId\x12&\n" + + "\x0fperiod_start_ms\x18\x04 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x05 \x01(\x03R\vperiodEndMs\x12,\n" + + "\x12current_coin_spent\x18\x06 \x01(\x03R\x10currentCoinSpent\x12=\n" + + "\x1bexpected_reward_coin_amount\x18\a \x01(\x03R\x18expectedRewardCoinAmount\x12L\n" + + "\fmatched_tier\x18\b \x01(\v2).hyapp.activity.v1.RoomTurnoverRewardTierR\vmatchedTier\x12\\\n" + + "\x11latest_settlement\x18\t \x01(\v2/.hyapp.activity.v1.RoomTurnoverRewardSettlementR\x10latestSettlement\x12$\n" + + "\x0eserver_time_ms\x18\n" + + " \x01(\x03R\fserverTimeMs\"\xae\x01\n" + + "\"GetRoomTurnoverRewardStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\"j\n" + + "#GetRoomTurnoverRewardStatusResponse\x12C\n" + + "\x06status\x18\x01 \x01(\v2+.hyapp.activity.v1.RoomTurnoverRewardStatusR\x06status\"X\n" + + "\"GetRoomTurnoverRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"j\n" + + "#GetRoomTurnoverRewardConfigResponse\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.hyapp.activity.v1.RoomTurnoverRewardConfigR\x06config\"\xe2\x01\n" + + "%UpdateRoomTurnoverRewardConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12?\n" + + "\x05tiers\x18\x03 \x03(\v2).hyapp.activity.v1.RoomTurnoverRewardTierR\x05tiers\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"m\n" + + "&UpdateRoomTurnoverRewardConfigResponse\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.hyapp.activity.v1.RoomTurnoverRewardConfigR\x06config\"\x8c\x02\n" + + "(ListRoomTurnoverRewardSettlementsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\x12&\n" + + "\x0fperiod_start_ms\x18\x05 \x01(\x03R\rperiodStartMs\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"\x94\x01\n" + + ")ListRoomTurnoverRewardSettlementsResponse\x12Q\n" + + "\vsettlements\x18\x01 \x03(\v2/.hyapp.activity.v1.RoomTurnoverRewardSettlementR\vsettlements\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xaf\x01\n" + + "(RetryRoomTurnoverRewardSettlementRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12#\n" + + "\rsettlement_id\x18\x02 \x01(\tR\fsettlementId\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"|\n" + + ")RetryRoomTurnoverRewardSettlementResponse\x12O\n" + + "\n" + + "settlement\x18\x01 \x01(\v2/.hyapp.activity.v1.RoomTurnoverRewardSettlementR\n" + + "settlement\"`\n" + + "\x15SevenDayCheckInReward\x12\x1b\n" + + "\tday_index\x18\x01 \x01(\x05R\bdayIndex\x12*\n" + + "\x11resource_group_id\x18\x02 \x01(\x03R\x0fresourceGroupId\"\xae\x02\n" + + "\x15SevenDayCheckInConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12%\n" + + "\x0econfig_version\x18\x03 \x01(\x03R\rconfigVersion\x12B\n" + + "\arewards\x18\x04 \x03(\v2(.hyapp.activity.v1.SevenDayCheckInRewardR\arewards\x12-\n" + + "\x13updated_by_admin_id\x18\x05 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x06 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xe5\x01\n" + + "\x1bSevenDayCheckInRewardStatus\x12\x1b\n" + + "\tday_index\x18\x01 \x01(\x05R\bdayIndex\x12*\n" + + "\x11resource_group_id\x18\x02 \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x19\n" + + "\bclaim_id\x18\x04 \x01(\tR\aclaimId\x12&\n" + + "\x0fwallet_grant_id\x18\x05 \x01(\tR\rwalletGrantId\x12\"\n" + + "\rgranted_at_ms\x18\x06 \x01(\x03R\vgrantedAtMs\"n\n" + + "\x1fGetSevenDayCheckInStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\xeb\x03\n" + + " GetSevenDayCheckInStatusResponse\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x19\n" + + "\bcan_sign\x18\x02 \x01(\bR\acanSign\x12\x16\n" + + "\x06reason\x18\x03 \x01(\tR\x06reason\x12\x19\n" + + "\bcycle_no\x18\x04 \x01(\x03R\acycleNo\x12*\n" + + "\x11current_day_index\x18\x05 \x01(\x05R\x0fcurrentDayIndex\x12$\n" + + "\x0enext_day_index\x18\x06 \x01(\x05R\fnextDayIndex\x12\x1f\n" + + "\vcheckin_day\x18\a \x01(\tR\n" + + "checkinDay\x12(\n" + + "\x10last_checkin_day\x18\b \x01(\tR\x0elastCheckinDay\x12%\n" + + "\x0econfig_version\x18\t \x01(\x03R\rconfigVersion\x12H\n" + + "\arewards\x18\n" + + " \x03(\v2..hyapp.activity.v1.SevenDayCheckInRewardStatusR\arewards\x12$\n" + + "\x0eserver_time_ms\x18\v \x01(\x03R\fserverTimeMs\x12+\n" + + "\x12next_refresh_at_ms\x18\f \x01(\x03R\x0fnextRefreshAtMs\"\x88\x01\n" + + "\x1aSignSevenDayCheckInRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\"\xc7\x02\n" + + "\x1bSignSevenDayCheckInResponse\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x19\n" + + "\bcycle_no\x18\x02 \x01(\x03R\acycleNo\x12\x1f\n" + + "\vcheckin_day\x18\x03 \x01(\tR\n" + + "checkinDay\x12\x1b\n" + + "\tday_index\x18\x04 \x01(\x05R\bdayIndex\x12*\n" + + "\x11resource_group_id\x18\x05 \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12&\n" + + "\x0fwallet_grant_id\x18\a \x01(\tR\rwalletGrantId\x12\"\n" + + "\rgranted_at_ms\x18\b \x01(\x03R\vgrantedAtMs\x12$\n" + + "\x0eserver_time_ms\x18\t \x01(\x03R\fserverTimeMs\"U\n" + + "\x1fGetSevenDayCheckInConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"d\n" + + " GetSevenDayCheckInConfigResponse\x12@\n" + + "\x06config\x18\x01 \x01(\v2(.hyapp.activity.v1.SevenDayCheckInConfigR\x06config\"\xe2\x01\n" + + "\"UpdateSevenDayCheckInConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12B\n" + + "\arewards\x18\x03 \x03(\v2(.hyapp.activity.v1.SevenDayCheckInRewardR\arewards\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"g\n" + + "#UpdateSevenDayCheckInConfigResponse\x12@\n" + + "\x06config\x18\x01 \x01(\v2(.hyapp.activity.v1.SevenDayCheckInConfigR\x06config\"\xb6\x04\n" + + "\x14SevenDayCheckInClaim\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x19\n" + + "\bcycle_no\x18\x04 \x01(\x03R\acycleNo\x12\x1f\n" + + "\vcheckin_day\x18\x05 \x01(\tR\n" + + "checkinDay\x12\x1b\n" + + "\tday_index\x18\x06 \x01(\x05R\bdayIndex\x12%\n" + + "\x0econfig_version\x18\a \x01(\x03R\rconfigVersion\x12*\n" + + "\x11resource_group_id\x18\b \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\t \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\n" + + " \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\f \x01(\tR\rfailureReason\x12 \n" + + "\fsigned_at_ms\x18\r \x01(\x03R\n" + + "signedAtMs\x12\"\n" + + "\rgranted_at_ms\x18\x0e \x01(\x03R\vgrantedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\"\xf6\x01\n" + + " ListSevenDayCheckInClaimsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1f\n" + + "\vcheckin_day\x18\x04 \x01(\tR\n" + + "checkinDay\x12\x1b\n" + + "\tday_index\x18\x05 \x01(\x05R\bdayIndex\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"z\n" + + "!ListSevenDayCheckInClaimsResponse\x12?\n" + + "\x06claims\x18\x01 \x03(\v2'.hyapp.activity.v1.SevenDayCheckInClaimR\x06claims\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xe5\x01\n" + + "\n" + + "LevelTrack\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\x04 \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\x05 \x01(\tR\x11displayConfigJson\x12\"\n" + + "\rcreated_at_ms\x18\x06 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xb8\x03\n" + + "\tLevelRule\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12%\n" + + "\x0erequired_value\x18\x03 \x01(\x03R\rrequiredValue\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x127\n" + + "\x18reward_resource_group_id\x18\x06 \x01(\x03R\x15rewardResourceGroupId\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\b \x01(\tR\x11displayConfigJson\x12-\n" + + "\x13created_by_admin_id\x18\t \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\n" + + " \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\f \x01(\x03R\vupdatedAtMs\"\xb2\x04\n" + + "\tLevelTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\x03R\x06tierId\x12\x14\n" + + "\x05track\x18\x02 \x01(\tR\x05track\x12\x1b\n" + + "\tmin_level\x18\x03 \x01(\x05R\bminLevel\x12\x1b\n" + + "\tmax_level\x18\x04 \x01(\x05R\bmaxLevel\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12F\n" + + " display_avatar_frame_resource_id\x18\x06 \x01(\x03R\x1cdisplayAvatarFrameResourceId\x129\n" + + "\x19display_badge_resource_id\x18\a \x01(\x03R\x16displayBadgeResourceId\x127\n" + + "\x18reward_resource_group_id\x18\b \x01(\x03R\x15rewardResourceGroupId\x12\x16\n" + + "\x06status\x18\t \x01(\tR\x06status\x12.\n" + + "\x13display_config_json\x18\n" + + " \x01(\tR\x11displayConfigJson\x12-\n" + + "\x13created_by_admin_id\x18\v \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\f \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"\xba\x04\n" + + "\x12LevelTrackOverview\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x14\n" + + "\x05level\x18\x03 \x01(\x05R\x05level\x12\x17\n" + + "\atier_id\x18\x04 \x01(\x03R\x06tierId\x12\x1f\n" + + "\vtotal_value\x18\x05 \x01(\x03R\n" + + "totalValue\x12?\n" + + "\x1ccurrent_level_required_value\x18\x06 \x01(\x03R\x19currentLevelRequiredValue\x12\x1d\n" + + "\n" + + "next_level\x18\a \x01(\x05R\tnextLevel\x129\n" + + "\x19next_level_required_value\x18\b \x01(\x03R\x16nextLevelRequiredValue\x12F\n" + + " display_avatar_frame_resource_id\x18\t \x01(\x03R\x1cdisplayAvatarFrameResourceId\x129\n" + + "\x19display_badge_resource_id\x18\n" + + " \x01(\x03R\x16displayBadgeResourceId\x120\n" + + "\x14reward_pending_count\x18\v \x01(\x03R\x12rewardPendingCount\x12\x1d\n" + + "\n" + + "sort_order\x18\f \x01(\x05R\tsortOrder\x12;\n" + + "\x1adisplay_badge_source_level\x18\r \x01(\x05R\x17displayBadgeSourceLevel\"h\n" + + "\x19GetMyLevelOverviewRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\x81\x01\n" + + "\x1aGetMyLevelOverviewResponse\x12=\n" + + "\x06tracks\x18\x01 \x03(\v2%.hyapp.activity.v1.LevelTrackOverviewR\x06tracks\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"y\n" + + "\x14GetLevelTrackRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05track\x18\x03 \x01(\tR\x05track\"\xe8\x01\n" + + "\x15GetLevelTrackResponse\x12A\n" + + "\boverview\x18\x01 \x01(\v2%.hyapp.activity.v1.LevelTrackOverviewR\boverview\x122\n" + + "\x05rules\x18\x02 \x03(\v2\x1c.hyapp.activity.v1.LevelRuleR\x05rules\x122\n" + + "\x05tiers\x18\x03 \x03(\v2\x1c.hyapp.activity.v1.LevelTierR\x05tiers\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\x96\x02\n" + + "\x18LevelDisplayTrackProfile\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x17\n" + + "\atier_id\x18\x03 \x01(\x03R\x06tierId\x127\n" + + "\x18avatar_frame_resource_id\x18\x04 \x01(\x03R\x15avatarFrameResourceId\x12*\n" + + "\x11badge_resource_id\x18\x05 \x01(\x03R\x0fbadgeResourceId\x12,\n" + + "\x12badge_source_level\x18\x06 \x01(\x05R\x10badgeSourceLevel\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xfb\x01\n" + + "\x17UserLevelDisplayProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12C\n" + + "\x06wealth\x18\x02 \x01(\v2+.hyapp.activity.v1.LevelDisplayTrackProfileR\x06wealth\x12?\n" + + "\x04game\x18\x03 \x01(\v2+.hyapp.activity.v1.LevelDisplayTrackProfileR\x04game\x12A\n" + + "\x05charm\x18\x04 \x01(\v2+.hyapp.activity.v1.LevelDisplayTrackProfileR\x05charm\"x\n" + + "'BatchGetUserLevelDisplayProfilesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\buser_ids\x18\x02 \x03(\x03R\auserIds\"\x98\x01\n" + + "(BatchGetUserLevelDisplayProfilesResponse\x12F\n" + + "\bprofiles\x18\x01 \x03(\v2*.hyapp.activity.v1.UserLevelDisplayProfileR\bprofiles\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x82\x06\n" + + "\x0eLevelRewardJob\x12\"\n" + + "\rreward_job_id\x18\x01 \x01(\tR\vrewardJobId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05track\x18\x03 \x01(\tR\x05track\x12,\n" + + "\x12reward_source_type\x18\x04 \x01(\tR\x10rewardSourceType\x12(\n" + + "\x10reward_source_id\x18\x05 \x01(\tR\x0erewardSourceId\x12*\n" + + "\x11resource_group_id\x18\x06 \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\a \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\b \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\t \x01(\tR\x06status\x12#\n" + + "\rattempt_count\x18\n" + + " \x01(\x05R\fattemptCount\x12%\n" + + "\x0efailure_reason\x18\v \x01(\tR\rfailureReason\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMs\x12#\n" + + "\rreward_origin\x18\x0e \x01(\tR\frewardOrigin\x12,\n" + + "\x12temporary_level_id\x18\x0f \x01(\tR\x10temporaryLevelId\x12)\n" + + "\x10grant_generation\x18\x10 \x01(\x05R\x0fgrantGeneration\x12!\n" + + "\freward_level\x18\x11 \x01(\x05R\vrewardLevel\x12\x1c\n" + + "\tpermanent\x18\x12 \x01(\bR\tpermanent\x125\n" + + "\x17temporary_expires_at_ms\x18\x13 \x01(\x03R\x14temporaryExpiresAtMs\x12#\n" + + "\rrevoke_status\x18\x14 \x01(\tR\frevokeStatus\"\xc5\x01\n" + + "\x17ListLevelRewardsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05track\x18\x03 \x01(\tR\x05track\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"m\n" + + "\x18ListLevelRewardsResponse\x12;\n" + + "\arewards\x18\x01 \x03(\v2!.hyapp.activity.v1.LevelRewardJobR\arewards\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xa4\x03\n" + + "\x18ConsumeLevelEventRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12&\n" + + "\x0fsource_event_id\x18\x03 \x01(\tR\rsourceEventId\x12%\n" + + "\x0esource_service\x18\x04 \x01(\tR\rsourceService\x12*\n" + + "\x11source_event_type\x18\x05 \x01(\tR\x0fsourceEventType\x12\x17\n" + + "\auser_id\x18\x06 \x01(\x03R\x06userId\x12\x14\n" + + "\x05track\x18\a \x01(\tR\x05track\x12\x1f\n" + + "\vmetric_type\x18\b \x01(\tR\n" + + "metricType\x12\x1f\n" + + "\vvalue_delta\x18\t \x01(\x03R\n" + + "valueDelta\x12$\n" + + "\x0eoccurred_at_ms\x18\n" + + " \x01(\x03R\foccurredAtMs\x12'\n" + + "\x0fdimensions_json\x18\v \x01(\tR\x0edimensionsJson\"\xe1\x01\n" + + "\x19ConsumeLevelEventResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12#\n" + + "\rlevel_changed\x18\x03 \x01(\bR\flevelChanged\x12%\n" + + "\x0eprevious_level\x18\x04 \x01(\x05R\rpreviousLevel\x12\x1b\n" + + "\tnew_level\x18\x05 \x01(\x05R\bnewLevel\x12(\n" + + "\x10reward_job_count\x18\x06 \x01(\x03R\x0erewardJobCount\"\xef\x01\n" + + "\x13SetUserLevelRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x14\n" + + "\x05track\x18\x04 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x05 \x01(\x05R\x05level\x12(\n" + + "\x10operator_user_id\x18\x06 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\a \x01(\tR\x06reason\"\x94\x02\n" + + "\x14SetUserLevelResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x14\n" + + "\x05track\x18\x03 \x01(\tR\x05track\x12%\n" + + "\x0eprevious_level\x18\x04 \x01(\x05R\rpreviousLevel\x12\x1b\n" + + "\tnew_level\x18\x05 \x01(\x05R\bnewLevel\x12\x1f\n" + + "\vtotal_value\x18\x06 \x01(\x03R\n" + + "totalValue\x12(\n" + + "\x10reward_job_count\x18\a \x01(\x03R\x0erewardJobCount\x12$\n" + + "\x0eserver_time_ms\x18\b \x01(\x03R\fserverTimeMs\"\xed\x02\n" + + "\x16AdminLevelTrackProfile\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x1d\n" + + "\n" + + "real_level\x18\x02 \x01(\x05R\trealLevel\x12(\n" + + "\x10real_total_value\x18\x03 \x01(\x03R\x0erealTotalValue\x12#\n" + + "\rdisplay_level\x18\x04 \x01(\x05R\fdisplayLevel\x12#\n" + + "\rdisplay_value\x18\x05 \x01(\x03R\fdisplayValue\x12,\n" + + "\x12temporary_level_id\x18\x06 \x01(\tR\x10temporaryLevelId\x124\n" + + "\x16temporary_target_level\x18\a \x01(\x05R\x14temporaryTargetLevel\x12\"\n" + + "\rstarted_at_ms\x18\b \x01(\x03R\vstartedAtMs\x12\"\n" + + "\rexpires_at_ms\x18\t \x01(\x03R\vexpiresAtMs\"s\n" + + "\x15AdminUserLevelProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12A\n" + + "\x06tracks\x18\x02 \x03(\v2).hyapp.activity.v1.AdminLevelTrackProfileR\x06tracks\"v\n" + + "%BatchGetUserLevelAdminProfilesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\buser_ids\x18\x02 \x03(\x03R\auserIds\"\x94\x01\n" + + "&BatchGetUserLevelAdminProfilesResponse\x12D\n" + + "\bprofiles\x18\x01 \x03(\v2(.hyapp.activity.v1.AdminUserLevelProfileR\bprofiles\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"k\n" + + "\x18TemporaryLevelAdjustment\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12#\n" + + "\rduration_days\x18\x03 \x01(\x05R\fdurationDays\"\xa1\x02\n" + + " AdjustTemporaryUserLevelsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12M\n" + + "\vadjustments\x18\x04 \x03(\v2+.hyapp.activity.v1.TemporaryLevelAdjustmentR\vadjustments\x12*\n" + + "\x11operator_admin_id\x18\x05 \x01(\x03R\x0foperatorAdminId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\x8d\x01\n" + + "!AdjustTemporaryUserLevelsResponse\x12B\n" + + "\aprofile\x18\x01 \x01(\v2(.hyapp.activity.v1.AdminUserLevelProfileR\aprofile\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x85\x01\n" + + "\x1bRegistrationLevelBadgeGrant\x12\x14\n" + + "\x05track\x18\x01 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x12\x19\n" + + "\bgrant_id\x18\x04 \x01(\tR\agrantId\"\x91\x01\n" + + "#IssueRegistrationLevelBadgesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\"\x94\x01\n" + + "$IssueRegistrationLevelBadgesResponse\x12F\n" + + "\x06grants\x18\x01 \x03(\v2..hyapp.activity.v1.RegistrationLevelBadgeGrantR\x06grants\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xde\x01\n" + + "\x17UpsertLevelTrackRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x14\n" + + "\x05track\x18\x02 \x01(\tR\x05track\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\x05 \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\x06 \x01(\tR\x11displayConfigJson\"i\n" + + "\x18UpsertLevelTrackResponse\x123\n" + + "\x05track\x18\x01 \x01(\v2\x1d.hyapp.activity.v1.LevelTrackR\x05track\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xff\x02\n" + + "\x16UpsertLevelRuleRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x14\n" + + "\x05track\x18\x02 \x01(\tR\x05track\x12\x14\n" + + "\x05level\x18\x03 \x01(\x05R\x05level\x12%\n" + + "\x0erequired_value\x18\x04 \x01(\x03R\rrequiredValue\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x127\n" + + "\x18reward_resource_group_id\x18\a \x01(\x03R\x15rewardResourceGroupId\x12\x1d\n" + + "\n" + + "sort_order\x18\b \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\t \x01(\tR\x11displayConfigJson\x12*\n" + + "\x11operator_admin_id\x18\n" + + " \x01(\x03R\x0foperatorAdminId\"e\n" + + "\x17UpsertLevelRuleResponse\x120\n" + + "\x04rule\x18\x01 \x01(\v2\x1c.hyapp.activity.v1.LevelRuleR\x04rule\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xf9\x03\n" + + "\x16UpsertLevelTierRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\atier_id\x18\x02 \x01(\x03R\x06tierId\x12\x14\n" + + "\x05track\x18\x03 \x01(\tR\x05track\x12\x1b\n" + + "\tmin_level\x18\x04 \x01(\x05R\bminLevel\x12\x1b\n" + + "\tmax_level\x18\x05 \x01(\x05R\bmaxLevel\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12F\n" + + " display_avatar_frame_resource_id\x18\a \x01(\x03R\x1cdisplayAvatarFrameResourceId\x129\n" + + "\x19display_badge_resource_id\x18\b \x01(\x03R\x16displayBadgeResourceId\x127\n" + + "\x18reward_resource_group_id\x18\t \x01(\x03R\x15rewardResourceGroupId\x12\x16\n" + + "\x06status\x18\n" + + " \x01(\tR\x06status\x12.\n" + + "\x13display_config_json\x18\v \x01(\tR\x11displayConfigJson\x12*\n" + + "\x11operator_admin_id\x18\f \x01(\x03R\x0foperatorAdminId\"e\n" + + "\x17UpsertLevelTierResponse\x120\n" + + "\x04tier\x18\x01 \x01(\v2\x1c.hyapp.activity.v1.LevelTierR\x04tier\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xe7\x01\n" + + "\x1dBatchUpsertLevelConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x122\n" + + "\x05rules\x18\x02 \x03(\v2\x1c.hyapp.activity.v1.LevelRuleR\x05rules\x122\n" + + "\x05tiers\x18\x03 \x03(\v2\x1c.hyapp.activity.v1.LevelTierR\x05tiers\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"\xae\x01\n" + + "\x1eBatchUpsertLevelConfigResponse\x122\n" + + "\x05rules\x18\x01 \x03(\v2\x1c.hyapp.activity.v1.LevelRuleR\x05rules\x122\n" + + "\x05tiers\x18\x02 \x03(\v2\x1c.hyapp.activity.v1.LevelTierR\x05tiers\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"z\n" + + "\x16ListLevelConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x14\n" + + "\x05track\x18\x02 \x01(\tR\x05track\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\"\xde\x01\n" + + "\x17ListLevelConfigResponse\x125\n" + + "\x06tracks\x18\x01 \x03(\v2\x1d.hyapp.activity.v1.LevelTrackR\x06tracks\x122\n" + + "\x05rules\x18\x02 \x03(\v2\x1c.hyapp.activity.v1.LevelRuleR\x05rules\x122\n" + + "\x05tiers\x18\x03 \x03(\v2\x1c.hyapp.activity.v1.LevelTierR\x05tiers\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\x93\x02\n" + + "\x14AchievementCondition\x12!\n" + + "\fcondition_id\x18\x01 \x01(\tR\vconditionId\x12%\n" + + "\x0eachievement_id\x18\x02 \x01(\tR\rachievementId\x12\x18\n" + + "\aversion\x18\x03 \x01(\x03R\aversion\x12\x1f\n" + + "\vmetric_type\x18\x04 \x01(\tR\n" + + "metricType\x12!\n" + + "\ftarget_value\x18\x05 \x01(\x03R\vtargetValue\x12\x1f\n" + + "\vtarget_unit\x18\x06 \x01(\tR\n" + + "targetUnit\x122\n" + + "\x15dimension_filter_json\x18\a \x01(\tR\x13dimensionFilterJson\"\xfa\x06\n" + + "\x15AchievementDefinition\x12%\n" + + "\x0eachievement_id\x18\x01 \x01(\tR\rachievementId\x12#\n" + + "\rcollection_id\x18\x02 \x01(\tR\fcollectionId\x12'\n" + + "\x0fcollection_type\x18\x03 \x01(\tR\x0ecollectionType\x12)\n" + + "\x10achievement_type\x18\x04 \x01(\tR\x0fachievementType\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x18\n" + + "\aversion\x18\b \x01(\x03R\aversion\x129\n" + + "\x19primary_badge_resource_id\x18\t \x01(\x03R\x16primaryBadgeResourceId\x127\n" + + "\x18reward_resource_group_id\x18\n" + + " \x01(\x03R\x15rewardResourceGroupId\x12&\n" + + "\x0fauto_pin_policy\x18\v \x01(\tR\rautoPinPolicy\x12)\n" + + "\x10honor_visibility\x18\f \x01(\bR\x0fhonorVisibility\x12*\n" + + "\x11effective_from_ms\x18\r \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x0e \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x0f \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\x10 \x01(\tR\x11displayConfigJson\x12-\n" + + "\x13created_by_admin_id\x18\x11 \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\x12 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x13 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x14 \x01(\x03R\vupdatedAtMs\x12G\n" + + "\n" + + "conditions\x18\x15 \x03(\v2'.hyapp.activity.v1.AchievementConditionR\n" + + "conditions\"\xae\x02\n" + + "\x0fUserAchievement\x12H\n" + + "\n" + + "definition\x18\x01 \x01(\v2(.hyapp.activity.v1.AchievementDefinitionR\n" + + "definition\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12%\n" + + "\x0eprogress_value\x18\x03 \x01(\x03R\rprogressValue\x12!\n" + + "\ftarget_value\x18\x04 \x01(\x03R\vtargetValue\x12\x1f\n" + + "\vuser_status\x18\x05 \x01(\tR\n" + + "userStatus\x12$\n" + + "\x0eunlocked_at_ms\x18\x06 \x01(\x03R\funlockedAtMs\x12#\n" + + "\rreward_status\x18\a \x01(\tR\frewardStatus\"\xe5\x01\n" + + "\x17ListAchievementsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12'\n" + + "\x0fcollection_type\x18\x03 \x01(\tR\x0ecollectionType\x12#\n" + + "\rcollection_id\x18\x04 \x01(\tR\fcollectionId\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"\x9e\x01\n" + + "\x18ListAchievementsResponse\x12F\n" + + "\fachievements\x18\x01 \x03(\v2\".hyapp.activity.v1.UserAchievementR\fachievements\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xd4\x02\n" + + "\x1eConsumeAchievementEventRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12\x1d\n" + + "\n" + + "event_type\x18\x03 \x01(\tR\teventType\x12%\n" + + "\x0esource_service\x18\x04 \x01(\tR\rsourceService\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x12\x1f\n" + + "\vmetric_type\x18\x06 \x01(\tR\n" + + "metricType\x12\x14\n" + + "\x05value\x18\a \x01(\x03R\x05value\x12$\n" + + "\x0eoccurred_at_ms\x18\b \x01(\x03R\foccurredAtMs\x12'\n" + + "\x0fdimensions_json\x18\t \x01(\tR\x0edimensionsJson\"\xf8\x01\n" + + "\x1fConsumeAchievementEventResponse\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12:\n" + + "\x19matched_achievement_count\x18\x03 \x01(\x05R\x17matchedAchievementCount\x12<\n" + + "\x1aunlocked_achievement_count\x18\x04 \x01(\x05R\x18unlockedAchievementCount\x12(\n" + + "\x10reward_job_count\x18\x05 \x01(\x03R\x0erewardJobCount\"\xa6\x02\n" + + "\x10BadgeDisplayItem\x12\x12\n" + + "\x04slot\x18\x01 \x01(\tR\x04slot\x12\x1a\n" + + "\bposition\x18\x02 \x01(\x05R\bposition\x12\x1d\n" + + "\n" + + "badge_form\x18\x03 \x01(\tR\tbadgeForm\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x12%\n" + + "\x0eentitlement_id\x18\x05 \x01(\tR\rentitlementId\x12\x1f\n" + + "\vsource_type\x18\x06 \x01(\tR\n" + + "sourceType\x12\x1b\n" + + "\tsource_id\x18\a \x01(\tR\bsourceId\x12\x19\n" + + "\bpin_mode\x18\b \x01(\tR\apinMode\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"b\n" + + "\x13ListMyBadgesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\xa1\x02\n" + + "\x14ListMyBadgesResponse\x12F\n" + + "\fstrip_badges\x18\x01 \x03(\v2#.hyapp.activity.v1.BadgeDisplayItemR\vstripBadges\x12S\n" + + "\x13profile_tile_badges\x18\x02 \x03(\v2#.hyapp.activity.v1.BadgeDisplayItemR\x11profileTileBadges\x12F\n" + + "\fhonor_badges\x18\x03 \x03(\v2#.hyapp.activity.v1.BadgeDisplayItemR\vhonorBadges\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\xd3\x01\n" + + "\x16SetBadgeDisplayRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x12\n" + + "\x04slot\x18\x03 \x01(\tR\x04slot\x129\n" + + "\x05items\x18\x04 \x03(\v2#.hyapp.activity.v1.BadgeDisplayItemR\x05items\x12\x1d\n" + + "\n" + + "command_id\x18\x05 \x01(\tR\tcommandId\"\\\n" + + "\x17SetBadgeDisplayResponse\x12A\n" + + "\aprofile\x18\x01 \x01(\v2'.hyapp.activity.v1.ListMyBadgesResponseR\aprofile\"\xa7\x06\n" + + "\"UpsertAchievementDefinitionRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12%\n" + + "\x0eachievement_id\x18\x02 \x01(\tR\rachievementId\x12#\n" + + "\rcollection_id\x18\x03 \x01(\tR\fcollectionId\x12'\n" + + "\x0fcollection_type\x18\x04 \x01(\tR\x0ecollectionType\x12)\n" + + "\x10achievement_type\x18\x05 \x01(\tR\x0fachievementType\x12\x14\n" + + "\x05title\x18\x06 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\a \x01(\tR\vdescription\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x129\n" + + "\x19primary_badge_resource_id\x18\t \x01(\x03R\x16primaryBadgeResourceId\x127\n" + + "\x18reward_resource_group_id\x18\n" + + " \x01(\x03R\x15rewardResourceGroupId\x12&\n" + + "\x0fauto_pin_policy\x18\v \x01(\tR\rautoPinPolicy\x12)\n" + + "\x10honor_visibility\x18\f \x01(\bR\x0fhonorVisibility\x12*\n" + + "\x11effective_from_ms\x18\r \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x0e \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x0f \x01(\x05R\tsortOrder\x12.\n" + + "\x13display_config_json\x18\x10 \x01(\tR\x11displayConfigJson\x12*\n" + + "\x11operator_admin_id\x18\x11 \x01(\x03R\x0foperatorAdminId\x12G\n" + + "\n" + + "conditions\x18\x12 \x03(\v2'.hyapp.activity.v1.AchievementConditionR\n" + + "conditions\"\x8b\x01\n" + + "#UpsertAchievementDefinitionResponse\x12J\n" + + "\vachievement\x18\x01 \x01(\v2(.hyapp.activity.v1.AchievementDefinitionR\vachievement\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xab\x01\n" + + "\"DeleteAchievementDefinitionRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12%\n" + + "\x0eachievement_id\x18\x02 \x01(\tR\rachievementId\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"q\n" + + "#DeleteAchievementDefinitionResponse\x12J\n" + + "\vachievement\x18\x01 \x01(\v2(.hyapp.activity.v1.AchievementDefinitionR\vachievement\"\xd6\x02\n" + + "\x0eWheelPrizeTier\x12\x17\n" + + "\atier_id\x18\x01 \x01(\tR\x06tierId\x12!\n" + + "\fdisplay_name\x18\x02 \x01(\tR\vdisplayName\x12\x1f\n" + + "\vreward_type\x18\x03 \x01(\tR\n" + + "rewardType\x12\x1b\n" + + "\treward_id\x18\x04 \x01(\tR\brewardId\x12!\n" + + "\freward_count\x18\x05 \x01(\x03R\vrewardCount\x12!\n" + + "\freward_coins\x18\x06 \x01(\x03R\vrewardCoins\x12&\n" + + "\x0frtp_value_coins\x18\a \x01(\x03R\rrtpValueCoins\x12\x1d\n" + + "\n" + + "weight_ppm\x18\b \x01(\x03R\tweightPpm\x12\x18\n" + + "\aenabled\x18\t \x01(\bR\aenabled\x12#\n" + + "\rmetadata_json\x18\n" + + " \x01(\tR\fmetadataJson\"\xf7\x04\n" + + "\x0fWheelRuleConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\bwheel_id\x18\x02 \x01(\tR\awheelId\x12!\n" + + "\frule_version\x18\x03 \x01(\x03R\vruleVersion\x12\x18\n" + + "\aenabled\x18\x04 \x01(\bR\aenabled\x12(\n" + + "\x10draw_price_coins\x18\x05 \x01(\x03R\x0edrawPriceCoins\x12$\n" + + "\x0etarget_rtp_ppm\x18\x06 \x01(\x03R\ftargetRtpPpm\x12\"\n" + + "\rpool_rate_ppm\x18\a \x01(\x03R\vpoolRatePpm\x126\n" + + "\x17settlement_window_draws\x18\b \x01(\x03R\x15settlementWindowDraws\x12,\n" + + "\x12initial_pool_coins\x18\t \x01(\x03R\x10initialPoolCoins\x12,\n" + + "\x12pool_reserve_coins\x18\n" + + " \x01(\x03R\x10poolReserveCoins\x121\n" + + "\x15max_single_rtp_payout\x18\v \x01(\x03R\x12maxSingleRtpPayout\x12*\n" + + "\x11effective_from_ms\x18\f \x01(\x03R\x0feffectiveFromMs\x12-\n" + + "\x13created_by_admin_id\x18\r \x01(\x03R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x127\n" + + "\x05tiers\x18\x0f \x03(\v2!.hyapp.activity.v1.WheelPrizeTierR\x05tiers\"\xbb\x02\n" + + "\rWheelDrawMeta\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x19\n" + + "\bwheel_id\x18\x03 \x01(\tR\awheelId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x1b\n" + + "\tdevice_id\x18\x05 \x01(\tR\bdeviceId\x12\x1d\n" + + "\n" + + "draw_count\x18\x06 \x01(\x05R\tdrawCount\x12\x1d\n" + + "\n" + + "coin_spent\x18\a \x01(\x03R\tcoinSpent\x12\x1c\n" + + "\n" + + "paid_at_ms\x18\b \x01(\x03R\bpaidAtMs\x12*\n" + + "\x11visible_region_id\x18\t \x01(\x03R\x0fvisibleRegionId\"\xd6\x05\n" + + "\x0fWheelDrawResult\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x19\n" + + "\bdraw_ids\x18\x02 \x03(\tR\adrawIds\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x19\n" + + "\bwheel_id\x18\x04 \x01(\tR\awheelId\x12!\n" + + "\frule_version\x18\x05 \x01(\x03R\vruleVersion\x12(\n" + + "\x10selected_tier_id\x18\x06 \x01(\tR\x0eselectedTierId\x12\x1f\n" + + "\vreward_type\x18\a \x01(\tR\n" + + "rewardType\x12\x1b\n" + + "\treward_id\x18\b \x01(\tR\brewardId\x12!\n" + + "\freward_count\x18\t \x01(\x03R\vrewardCount\x12!\n" + + "\freward_coins\x18\n" + + " \x01(\x03R\vrewardCoins\x12&\n" + + "\x0frtp_value_coins\x18\v \x01(\x03R\rrtpValueCoins\x12#\n" + + "\rreward_status\x18\f \x01(\tR\frewardStatus\x12(\n" + + "\x10rtp_window_index\x18\r \x01(\x03R\x0ertpWindowIndex\x12$\n" + + "\x0eactual_rtp_ppm\x18\x0e \x01(\x03R\factualRtpPpm\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x122\n" + + "\x15wallet_transaction_id\x18\x10 \x01(\tR\x13walletTransactionId\x12,\n" + + "\x12coin_balance_after\x18\x11 \x01(\x03R\x10coinBalanceAfter\x12#\n" + + "\rmetadata_json\x18\x12 \x01(\tR\fmetadataJson\x12<\n" + + "\arewards\x18\x13 \x03(\v2\".hyapp.activity.v1.WheelDrawRewardR\arewards\"\xb1\x02\n" + + "\x0fWheelDrawReward\x12(\n" + + "\x10selected_tier_id\x18\x01 \x01(\tR\x0eselectedTierId\x12\x1f\n" + + "\vreward_type\x18\x02 \x01(\tR\n" + + "rewardType\x12\x1b\n" + + "\treward_id\x18\x03 \x01(\tR\brewardId\x12!\n" + + "\freward_count\x18\x04 \x01(\x03R\vrewardCount\x12!\n" + + "\freward_coins\x18\x05 \x01(\x03R\vrewardCoins\x12&\n" + + "\x0frtp_value_coins\x18\x06 \x01(\x03R\rrtpValueCoins\x12#\n" + + "\rreward_status\x18\a \x01(\tR\frewardStatus\x12#\n" + + "\rmetadata_json\x18\b \x01(\tR\fmetadataJson\"Q\n" + + "\x17ExecuteWheelDrawRequest\x126\n" + + "\x05wheel\x18\x01 \x01(\v2 .hyapp.activity.v1.WheelDrawMetaR\x05wheel\"V\n" + + "\x18ExecuteWheelDrawResponse\x12:\n" + + "\x06result\x18\x01 \x01(\v2\".hyapp.activity.v1.WheelDrawResultR\x06result\"f\n" + + "\x15GetWheelConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bwheel_id\x18\x02 \x01(\tR\awheelId\"T\n" + + "\x16GetWheelConfigResponse\x12:\n" + + "\x06config\x18\x01 \x01(\v2\".hyapp.activity.v1.WheelRuleConfigR\x06config\"\xb6\x01\n" + + "\x18UpsertWheelConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12:\n" + + "\x06config\x18\x02 \x01(\v2\".hyapp.activity.v1.WheelRuleConfigR\x06config\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"W\n" + + "\x19UpsertWheelConfigResponse\x12:\n" + + "\x06config\x18\x01 \x01(\v2\".hyapp.activity.v1.WheelRuleConfigR\x06config\"\xc8\x01\n" + + "\x15ListWheelDrawsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bwheel_id\x18\x02 \x01(\tR\awheelId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"h\n" + + "\x16ListWheelDrawsResponse\x128\n" + + "\x05draws\x18\x01 \x03(\v2\".hyapp.activity.v1.WheelDrawResultR\x05draws\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xe3\x02\n" + + "\x10WheelDrawSummary\x12\x19\n" + + "\bwheel_id\x18\x01 \x01(\tR\awheelId\x12\x1f\n" + + "\vtotal_draws\x18\x02 \x01(\x03R\n" + + "totalDraws\x12!\n" + + "\funique_users\x18\x03 \x01(\x03R\vuniqueUsers\x12*\n" + + "\x11total_spent_coins\x18\x04 \x01(\x03R\x0ftotalSpentCoins\x121\n" + + "\x15total_rtp_value_coins\x18\x05 \x01(\x03R\x12totalRtpValueCoins\x12$\n" + + "\x0eactual_rtp_ppm\x18\x06 \x01(\x03R\factualRtpPpm\x12#\n" + + "\rpending_draws\x18\a \x01(\x03R\fpendingDraws\x12#\n" + + "\rgranted_draws\x18\b \x01(\x03R\fgrantedDraws\x12!\n" + + "\ffailed_draws\x18\t \x01(\x03R\vfailedDraws\"\x9c\x01\n" + + "\x1aGetWheelDrawSummaryRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bwheel_id\x18\x02 \x01(\tR\awheelId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\"\\\n" + + "\x1bGetWheelDrawSummaryResponse\x12=\n" + + "\asummary\x18\x01 \x01(\v2#.hyapp.activity.v1.WheelDrawSummaryR\asummary\"H\n" + + "\x0eWeeklyStarGift\x12\x17\n" + + "\agift_id\x18\x01 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "sort_order\x18\x02 \x01(\x05R\tsortOrder\"W\n" + + "\x10WeeklyStarReward\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12*\n" + + "\x11resource_group_id\x18\x02 \x01(\x03R\x0fresourceGroupId\"\xab\x04\n" + + "\x0fWeeklyStarCycle\x12\x19\n" + + "\bcycle_id\x18\x01 \x01(\tR\acycleId\x12#\n" + + "\ractivity_code\x18\x02 \x01(\tR\factivityCode\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x14\n" + + "\x05title\x18\x04 \x01(\tR\x05title\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x19\n" + + "\bstart_ms\x18\x06 \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\a \x01(\x03R\x05endMs\x127\n" + + "\x05gifts\x18\b \x03(\v2!.hyapp.activity.v1.WeeklyStarGiftR\x05gifts\x12=\n" + + "\arewards\x18\t \x03(\v2#.hyapp.activity.v1.WeeklyStarRewardR\arewards\x12-\n" + + "\x13created_by_admin_id\x18\n" + + " \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\v \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rsettled_at_ms\x18\f \x01(\x03R\vsettledAtMs\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\x12\x19\n" + + "\bapp_code\x18\x0f \x01(\tR\aappCode\"\xbc\x01\n" + + "\x1aWeeklyStarLeaderboardEntry\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x03 \x01(\x03R\x05score\x12+\n" + + "\x12first_scored_at_ms\x18\x04 \x01(\x03R\x0ffirstScoredAtMs\x12)\n" + + "\x11last_scored_at_ms\x18\x05 \x01(\x03R\x0elastScoredAtMs\"\xca\x03\n" + + "\x14WeeklyStarSettlement\x12#\n" + + "\rsettlement_id\x18\x01 \x01(\tR\fsettlementId\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x17\n" + + "\arank_no\x18\x03 \x01(\x05R\x06rankNo\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x05 \x01(\x03R\x05score\x12*\n" + + "\x11resource_group_id\x18\x06 \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\a \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\b \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\t \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\n" + + " \x01(\tR\rfailureReason\x12#\n" + + "\rattempt_count\x18\v \x01(\x05R\fattemptCount\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMs\"\xe9\x01\n" + + "\x1bListWeeklyStarCyclesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tregion_id\x18\x02 \x01(\x03R\bregionId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x19\n" + + "\bstart_ms\x18\x04 \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\x05 \x01(\x03R\x05endMs\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"p\n" + + "\x1cListWeeklyStarCyclesResponse\x12:\n" + + "\x06cycles\x18\x01 \x03(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x06cycles\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"j\n" + + "\x19GetWeeklyStarCycleRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\"V\n" + + "\x1aGetWeeklyStarCycleResponse\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\"\xb8\x01\n" + + "\x1cUpsertWeeklyStarCycleRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x128\n" + + "\x05cycle\x18\x02 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"s\n" + + "\x1dUpsertWeeklyStarCycleResponse\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xb4\x01\n" + + "\x1fSetWeeklyStarCycleStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"\\\n" + + " SetWeeklyStarCycleStatusResponse\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\"\xca\x01\n" + + " ListWeeklyStarLeaderboardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "page_token\x18\x05 \x01(\tR\tpageToken\"\xe4\x01\n" + + "!ListWeeklyStarLeaderboardResponse\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\x12G\n" + + "\aentries\x18\x02 \x03(\v2-.hyapp.activity.v1.WeeklyStarLeaderboardEntryR\aentries\x12&\n" + + "\x0fnext_page_token\x18\x03 \x01(\tR\rnextPageToken\x12\x14\n" + + "\x05total\x18\x04 \x01(\x03R\x05total\"q\n" + + " ListWeeklyStarSettlementsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\"n\n" + + "!ListWeeklyStarSettlementsResponse\x12I\n" + + "\vsettlements\x18\x01 \x03(\v2'.hyapp.activity.v1.WeeklyStarSettlementR\vsettlements\"\x87\x01\n" + + "\x1bGetWeeklyStarCurrentRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\"\x98\x02\n" + + "\x1cGetWeeklyStarCurrentResponse\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\x12N\n" + + "\vtop_entries\x18\x02 \x03(\v2-.hyapp.activity.v1.WeeklyStarLeaderboardEntryR\n" + + "topEntries\x12H\n" + + "\bmy_entry\x18\x03 \x01(\v2-.hyapp.activity.v1.WeeklyStarLeaderboardEntryR\amyEntry\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\x85\x01\n" + + "\x1cListWeeklyStarHistoryRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tregion_id\x18\x02 \x01(\x03R\bregionId\x12\x14\n" + + "\x05limit\x18\x03 \x01(\x05R\x05limit\"\xa2\x01\n" + + "\x16WeeklyStarHistoryCycle\x128\n" + + "\x05cycle\x18\x01 \x01(\v2\".hyapp.activity.v1.WeeklyStarCycleR\x05cycle\x12N\n" + + "\vtop_entries\x18\x02 \x03(\v2-.hyapp.activity.v1.WeeklyStarLeaderboardEntryR\n" + + "topEntries\"\x88\x01\n" + + "\x1dListWeeklyStarHistoryResponse\x12A\n" + + "\x06cycles\x18\x01 \x03(\v2).hyapp.activity.v1.WeeklyStarHistoryCycleR\x06cycles\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"Y\n" + + "\x12CPWeeklyRankReward\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12*\n" + + "\x11resource_group_id\x18\x02 \x01(\x03R\x0fresourceGroupId\"\xe8\x02\n" + + "\x12CPWeeklyRankConfig\x12#\n" + + "\ractivity_code\x18\x01 \x01(\tR\factivityCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12#\n" + + "\rrelation_type\x18\x03 \x01(\tR\frelationType\x12\x1b\n" + + "\ttop_count\x18\x04 \x01(\x05R\btopCount\x12?\n" + + "\arewards\x18\x05 \x03(\v2%.hyapp.activity.v1.CPWeeklyRankRewardR\arewards\x12-\n" + + "\x13updated_by_admin_id\x18\x06 \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\a \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\x12\x19\n" + + "\bapp_code\x18\t \x01(\tR\aappCode\"\x87\x01\n" + + "\x10CPWeeklyRankUser\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12&\n" + + "\x0fdisplay_user_id\x18\x02 \x01(\tR\rdisplayUserId\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x04 \x01(\tR\x06avatar\"\xa1\x03\n" + + "\x11CPWeeklyRankEntry\x12\x12\n" + + "\x04rank\x18\x01 \x01(\x03R\x04rank\x12'\n" + + "\x0frelationship_id\x18\x02 \x01(\tR\x0erelationshipId\x12#\n" + + "\rrelation_type\x18\x03 \x01(\tR\frelationType\x12\x14\n" + + "\x05score\x18\x04 \x01(\x03R\x05score\x12:\n" + + "\x06user_a\x18\x05 \x01(\v2#.hyapp.activity.v1.CPWeeklyRankUserR\x05userA\x12:\n" + + "\x06user_b\x18\x06 \x01(\v2#.hyapp.activity.v1.CPWeeklyRankUserR\x05userB\x12 \n" + + "\fformed_at_ms\x18\a \x01(\x03R\n" + + "formedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\x12+\n" + + "\x12first_scored_at_ms\x18\t \x01(\x03R\x0ffirstScoredAtMs\x12)\n" + + "\x11last_scored_at_ms\x18\n" + + " \x01(\x03R\x0elastScoredAtMs\"\xa6\x04\n" + + "\x16CPWeeklyRankSettlement\x12#\n" + + "\rsettlement_id\x18\x01 \x01(\tR\fsettlementId\x12&\n" + + "\x0fperiod_start_ms\x18\x02 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x03 \x01(\x03R\vperiodEndMs\x12\x17\n" + + "\arank_no\x18\x04 \x01(\x05R\x06rankNo\x12'\n" + + "\x0frelationship_id\x18\x05 \x01(\tR\x0erelationshipId\x12\x17\n" + + "\auser_id\x18\x06 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\a \x01(\x03R\x05score\x12*\n" + + "\x11resource_group_id\x18\b \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\t \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\n" + + " \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\f \x01(\tR\rfailureReason\x12#\n" + + "\rattempt_count\x18\r \x01(\x05R\fattemptCount\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\"\x7f\n" + + "\x1cGetCPWeeklyRankStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x15\n" + + "\x06now_ms\x18\x02 \x01(\x03R\x05nowMs\x12\x14\n" + + "\x05limit\x18\x03 \x01(\x05R\x05limit\"\xe1\x02\n" + + "\x1dGetCPWeeklyRankStatusResponse\x12=\n" + + "\x06config\x18\x01 \x01(\v2%.hyapp.activity.v1.CPWeeklyRankConfigR\x06config\x12>\n" + + "\aentries\x18\x02 \x03(\v2$.hyapp.activity.v1.CPWeeklyRankEntryR\aentries\x12&\n" + + "\x0fperiod_start_ms\x18\x03 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x04 \x01(\x03R\vperiodEndMs\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\x12O\n" + + "\x10previous_entries\x18\x06 \x03(\v2$.hyapp.activity.v1.CPWeeklyRankEntryR\x0fpreviousEntries\"R\n" + + "\x1cGetCPWeeklyRankConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\"^\n" + + "\x1dGetCPWeeklyRankConfigResponse\x12=\n" + + "\x06config\x18\x01 \x01(\v2%.hyapp.activity.v1.CPWeeklyRankConfigR\x06config\"\xc0\x01\n" + + "\x1fUpdateCPWeeklyRankConfigRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12=\n" + + "\x06config\x18\x02 \x01(\v2%.hyapp.activity.v1.CPWeeklyRankConfigR\x06config\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"a\n" + + " UpdateCPWeeklyRankConfigResponse\x12=\n" + + "\x06config\x18\x01 \x01(\v2%.hyapp.activity.v1.CPWeeklyRankConfigR\x06config\"\xa4\x01\n" + + "\"ListCPWeeklyRankSettlementsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12&\n" + + "\x0fperiod_start_ms\x18\x02 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x03 \x01(\x03R\vperiodEndMs\"r\n" + + "#ListCPWeeklyRankSettlementsResponse\x12K\n" + + "\vsettlements\x18\x01 \x03(\v2).hyapp.activity.v1.CPWeeklyRankSettlementR\vsettlements\"\x8e\x01\n" + + "\x13AgencyOpeningReward\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12,\n" + + "\x12reward_coin_amount\x18\x02 \x01(\x03R\x10rewardCoinAmount\x120\n" + + "\x14threshold_coin_spent\x18\x03 \x01(\x03R\x12thresholdCoinSpent\"\xb0\x04\n" + + "\x12AgencyOpeningCycle\x12\x19\n" + + "\bcycle_id\x18\x01 \x01(\tR\acycleId\x12#\n" + + "\ractivity_code\x18\x02 \x01(\tR\factivityCode\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x19\n" + + "\bstart_ms\x18\x05 \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\x06 \x01(\x03R\x05endMs\x12$\n" + + "\x0emin_host_count\x18\a \x01(\x05R\fminHostCount\x12-\n" + + "\x13max_agency_age_days\x18\b \x01(\x05R\x10maxAgencyAgeDays\x12@\n" + + "\arewards\x18\t \x03(\v2&.hyapp.activity.v1.AgencyOpeningRewardR\arewards\x12-\n" + + "\x13created_by_admin_id\x18\n" + + " \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\v \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rsettled_at_ms\x18\f \x01(\x03R\vsettledAtMs\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\x12\x19\n" + + "\bapp_code\x18\x0f \x01(\tR\aappCode\"\x84\a\n" + + "\x18AgencyOpeningApplication\x12%\n" + + "\x0eapplication_id\x18\x01 \x01(\tR\rapplicationId\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x1b\n" + + "\tagency_id\x18\x03 \x01(\x03R\bagencyId\x12/\n" + + "\x14agency_owner_user_id\x18\x04 \x01(\x03R\x11agencyOwnerUserId\x12\x1f\n" + + "\vagency_name\x18\x05 \x01(\tR\n" + + "agencyName\x12\x1d\n" + + "\n" + + "host_count\x18\x06 \x01(\x05R\thostCount\x12/\n" + + "\x14agency_created_at_ms\x18\a \x01(\x03R\x11agencyCreatedAtMs\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12*\n" + + "\x11score_coin_amount\x18\t \x01(\x03R\x0fscoreCoinAmount\x12$\n" + + "\x0ereward_rank_no\x18\n" + + " \x01(\x05R\frewardRankNo\x12,\n" + + "\x12reward_coin_amount\x18\v \x01(\x03R\x10rewardCoinAmount\x12*\n" + + "\x11wallet_command_id\x18\f \x01(\tR\x0fwalletCommandId\x122\n" + + "\x15wallet_transaction_id\x18\r \x01(\tR\x13walletTransactionId\x12%\n" + + "\x0efailure_reason\x18\x0e \x01(\tR\rfailureReason\x12\"\n" + + "\rapplied_at_ms\x18\x0f \x01(\x03R\vappliedAtMs\x12\"\n" + + "\rgranted_at_ms\x18\x10 \x01(\x03R\vgrantedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x11 \x01(\x03R\vupdatedAtMs\x12=\n" + + "\x1breward_threshold_coin_spent\x18\x12 \x01(\x03R\x18rewardThresholdCoinSpent\x12$\n" + + "\x0eapproved_at_ms\x18\x13 \x01(\x03R\fapprovedAtMs\x12$\n" + + "\x0escore_start_ms\x18\x14 \x01(\x03R\fscoreStartMs\x12 \n" + + "\fscore_end_ms\x18\x15 \x01(\x03R\n" + + "scoreEndMs\x12/\n" + + "\x14reviewed_by_admin_id\x18\x16 \x01(\x03R\x11reviewedByAdminId\"\xda\x01\n" + + "\x1bAgencyOpeningAgencySnapshot\x12\x1b\n" + + "\tagency_id\x18\x01 \x01(\x03R\bagencyId\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "host_count\x18\x05 \x01(\x05R\thostCount\x12/\n" + + "\x14agency_created_at_ms\x18\x06 \x01(\x03R\x11agencyCreatedAtMs\"\xcf\x01\n" + + "\x1eListAgencyOpeningCyclesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x19\n" + + "\bstart_ms\x18\x03 \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\x04 \x01(\x03R\x05endMs\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"v\n" + + "\x1fListAgencyOpeningCyclesResponse\x12=\n" + + "\x06cycles\x18\x01 \x03(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x06cycles\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"m\n" + + "\x1cGetAgencyOpeningCycleRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\"\\\n" + + "\x1dGetAgencyOpeningCycleResponse\x12;\n" + + "\x05cycle\x18\x01 \x01(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x05cycle\"\xbe\x01\n" + + "\x1fUpsertAgencyOpeningCycleRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12;\n" + + "\x05cycle\x18\x02 \x01(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x05cycle\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"y\n" + + " UpsertAgencyOpeningCycleResponse\x12;\n" + + "\x05cycle\x18\x01 \x01(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x05cycle\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\xb7\x01\n" + + "\"SetAgencyOpeningCycleStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"b\n" + + "#SetAgencyOpeningCycleStatusResponse\x12;\n" + + "\x05cycle\x18\x01 \x01(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x05cycle\"\x8c\x02\n" + + "$ListAgencyOpeningApplicationsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bcycle_id\x18\x02 \x01(\tR\acycleId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12/\n" + + "\x14agency_owner_user_id\x18\x05 \x01(\x03R\x11agencyOwnerUserId\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"\x8e\x01\n" + + "%ListAgencyOpeningApplicationsResponse\x12O\n" + + "\fapplications\x18\x01 \x03(\v2+.hyapp.activity.v1.AgencyOpeningApplicationR\fapplications\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xc6\x01\n" + + "%ReviewAgencyOpeningApplicationRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12%\n" + + "\x0eapplication_id\x18\x02 \x01(\tR\rapplicationId\x12\x16\n" + + "\x06action\x18\x03 \x01(\tR\x06action\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"w\n" + + "&ReviewAgencyOpeningApplicationResponse\x12M\n" + + "\vapplication\x18\x01 \x01(\v2+.hyapp.activity.v1.AgencyOpeningApplicationR\vapplication\"l\n" + + "\x1dGetAgencyOpeningStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\x95\x03\n" + + "\x1eGetAgencyOpeningStatusResponse\x12;\n" + + "\x05cycle\x18\x01 \x01(\v2%.hyapp.activity.v1.AgencyOpeningCycleR\x05cycle\x12M\n" + + "\vapplication\x18\x02 \x01(\v2+.hyapp.activity.v1.AgencyOpeningApplicationR\vapplication\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\x12\x1a\n" + + "\beligible\x18\x04 \x01(\bR\beligible\x12\x16\n" + + "\x06joined\x18\x05 \x01(\bR\x06joined\x12+\n" + + "\x11ineligible_reason\x18\x06 \x01(\tR\x10ineligibleReason\x12$\n" + + "\x0eserver_time_ms\x18\a \x01(\x03R\fserverTimeMs\x12F\n" + + "\x06agency\x18\b \x01(\v2..hyapp.activity.v1.AgencyOpeningAgencySnapshotR\x06agency\"\x87\x01\n" + + "\x19ApplyAgencyOpeningRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\"\x85\x01\n" + + "\x1aApplyAgencyOpeningResponse\x12M\n" + + "\vapplication\x18\x01 \x01(\v2+.hyapp.activity.v1.AgencyOpeningApplicationR\vapplication\x12\x18\n" + + "\acreated\x18\x02 \x01(\bR\acreated\"\\\n" + + "\x16ActivityTemplateLocale\x12\x16\n" + + "\x06locale\x18\x01 \x01(\tR\x06locale\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12\x14\n" + + "\x05rules\x18\x03 \x01(\tR\x05rules\"\xc1\x01\n" + + "\x14ActivityTemplateGift\x12\x17\n" + + "\agift_id\x18\x01 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "sort_order\x18\x02 \x01(\x05R\tsortOrder\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x19\n" + + "\bicon_url\x18\x04 \x01(\tR\aiconUrl\x12\x1d\n" + + "\n" + + "coin_price\x18\x05 \x01(\x03R\tcoinPrice\x12#\n" + + "\rprice_version\x18\x06 \x01(\tR\fpriceVersion\"\xe6\x02\n" + + "\x1aActivityTemplateRewardItem\x12\x1b\n" + + "\titem_type\x18\x01 \x01(\tR\bitemType\x12\x1f\n" + + "\vresource_id\x18\x02 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_type\x18\x03 \x01(\tR\fresourceType\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x19\n" + + "\bicon_url\x18\x05 \x01(\tR\aiconUrl\x12\x1a\n" + + "\bquantity\x18\x06 \x01(\x03R\bquantity\x12\x1f\n" + + "\vduration_ms\x18\a \x01(\x03R\n" + + "durationMs\x12*\n" + + "\x11wallet_asset_type\x18\b \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\t \x01(\x03R\x11walletAssetAmount\x12\x1d\n" + + "\n" + + "sort_order\x18\n" + + " \x01(\x05R\tsortOrder\"\x9c\x03\n" + + "\x14ActivityTemplateTask\x12\x19\n" + + "\btask_key\x18\x01 \x01(\tR\ataskKey\x12\x1b\n" + + "\ttask_type\x18\x02 \x01(\tR\btaskType\x12!\n" + + "\ftarget_value\x18\x03 \x01(\x03R\vtargetValue\x127\n" + + "\x18reward_resource_group_id\x18\x04 \x01(\x03R\x15rewardResourceGroupId\x12\x1d\n" + + "\n" + + "sort_order\x18\x05 \x01(\x05R\tsortOrder\x12,\n" + + "\x12reward_snapshot_id\x18\x06 \x01(\tR\x10rewardSnapshotId\x120\n" + + "\x14reward_snapshot_hash\x18\a \x01(\tR\x12rewardSnapshotHash\x12\x1f\n" + + "\vreward_name\x18\b \x01(\tR\n" + + "rewardName\x12P\n" + + "\freward_items\x18\t \x03(\v2-.hyapp.activity.v1.ActivityTemplateRewardItemR\vrewardItems\"\x8f\x03\n" + + "\x1aActivityTemplateRankReward\x12\x1d\n" + + "\n" + + "board_type\x18\x01 \x01(\tR\tboardType\x12\x1b\n" + + "\trank_from\x18\x02 \x01(\x05R\brankFrom\x12\x17\n" + + "\arank_to\x18\x03 \x01(\x05R\x06rankTo\x12*\n" + + "\x11resource_group_id\x18\x04 \x01(\x03R\x0fresourceGroupId\x12\x1d\n" + + "\n" + + "sort_order\x18\x05 \x01(\x05R\tsortOrder\x12,\n" + + "\x12reward_snapshot_id\x18\x06 \x01(\tR\x10rewardSnapshotId\x120\n" + + "\x14reward_snapshot_hash\x18\a \x01(\tR\x12rewardSnapshotHash\x12\x1f\n" + + "\vreward_name\x18\b \x01(\tR\n" + + "rewardName\x12P\n" + + "\freward_items\x18\t \x03(\v2-.hyapp.activity.v1.ActivityTemplateRewardItemR\vrewardItems\"\x9c\x01\n" + + "\x15ActivityTemplateAsset\x12\x1b\n" + + "\tasset_key\x18\x01 \x01(\tR\bassetKey\x12\x16\n" + + "\x06locale\x18\x02 \x01(\tR\x06locale\x12\x10\n" + + "\x03url\x18\x03 \x01(\tR\x03url\x12\x1d\n" + + "\n" + + "media_type\x18\x04 \x01(\tR\tmediaType\x12\x1d\n" + + "\n" + + "sort_order\x18\x05 \x01(\x05R\tsortOrder\"\xc4\t\n" + + "\x10ActivityTemplate\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x03 \x01(\tR\ftemplateCode\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12#\n" + + "\ractivity_type\x18\x05 \x01(\tR\factivityType\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12)\n" + + "\x10lifecycle_status\x18\a \x01(\tR\x0flifecycleStatus\x12\x19\n" + + "\bstart_ms\x18\b \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\t \x01(\x03R\x05endMs\x12\x1f\n" + + "\vall_regions\x18\n" + + " \x01(\bR\n" + + "allRegions\x12\x1d\n" + + "\n" + + "region_ids\x18\v \x03(\x03R\tregionIds\x12C\n" + + "\alocales\x18\f \x03(\v2).hyapp.activity.v1.ActivityTemplateLocaleR\alocales\x12=\n" + + "\x05gifts\x18\r \x03(\v2'.hyapp.activity.v1.ActivityTemplateGiftR\x05gifts\x12=\n" + + "\x05tasks\x18\x0e \x03(\v2'.hyapp.activity.v1.ActivityTemplateTaskR\x05tasks\x124\n" + + "\x16daily_leaderboard_size\x18\x0f \x01(\x05R\x14dailyLeaderboardSize\x124\n" + + "\x16total_leaderboard_size\x18\x10 \x01(\x05R\x14totalLeaderboardSize\x12P\n" + + "\frank_rewards\x18\x11 \x03(\v2-.hyapp.activity.v1.ActivityTemplateRankRewardR\vrankRewards\x12@\n" + + "\x06assets\x18\x12 \x03(\v2(.hyapp.activity.v1.ActivityTemplateAssetR\x06assets\x12.\n" + + "\x13display_config_json\x18\x13 \x01(\tR\x11displayConfigJson\x12\x1a\n" + + "\brevision\x18\x14 \x01(\x03R\brevision\x12+\n" + + "\x11published_version\x18\x15 \x01(\x03R\x10publishedVersion\x12-\n" + + "\x13created_by_admin_id\x18\x16 \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\x17 \x01(\x03R\x10updatedByAdminId\x121\n" + + "\x15published_by_admin_id\x18\x18 \x01(\x03R\x12publishedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x19 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x1a \x01(\x03R\vupdatedAtMs\x12&\n" + + "\x0fpublished_at_ms\x18\x1b \x01(\x03R\rpublishedAtMs\x12$\n" + + "\x0earchived_at_ms\x18\x1c \x01(\x03R\farchivedAtMs\"\xd7\x04\n" + + "\x17ActivityTemplateSummary\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x03 \x01(\tR\ftemplateCode\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12#\n" + + "\ractivity_type\x18\x05 \x01(\tR\factivityType\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12)\n" + + "\x10lifecycle_status\x18\a \x01(\tR\x0flifecycleStatus\x12\x19\n" + + "\bstart_ms\x18\b \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\t \x01(\x03R\x05endMs\x12\x1f\n" + + "\vall_regions\x18\n" + + " \x01(\bR\n" + + "allRegions\x12\x1d\n" + + "\n" + + "region_ids\x18\v \x03(\x03R\tregionIds\x12\x1a\n" + + "\brevision\x18\f \x01(\x03R\brevision\x12+\n" + + "\x11published_version\x18\r \x01(\x03R\x10publishedVersion\x12-\n" + + "\x13created_by_admin_id\x18\x0e \x01(\x03R\x10createdByAdminId\x12-\n" + + "\x13updated_by_admin_id\x18\x0f \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x10 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x11 \x01(\x03R\vupdatedAtMs\"\xcd\x02\n" + + "\x1cListActivityTemplatesRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x18\n" + + "\akeyword\x18\x02 \x01(\tR\akeyword\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12 \n" + + "\tregion_id\x18\x04 \x01(\x03H\x00R\bregionId\x88\x01\x01\x12\x19\n" + + "\bstart_ms\x18\x05 \x01(\x03R\astartMs\x12\x15\n" + + "\x06end_ms\x18\x06 \x01(\x03R\x05endMs\x12\x12\n" + + "\x04page\x18\a \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\x12$\n" + + "\vall_regions\x18\t \x01(\bH\x01R\n" + + "allRegions\x88\x01\x01B\f\n" + + "\n" + + "_region_idB\x0e\n" + + "\f_all_regions\"\xa5\x01\n" + + "\x1dListActivityTemplatesResponse\x12H\n" + + "\ttemplates\x18\x01 \x03(\v2*.hyapp.activity.v1.ActivityTemplateSummaryR\ttemplates\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xc0\x01\n" + + "\x1dCreateActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12?\n" + + "\btemplate\x18\x02 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"a\n" + + "\x1eCreateActivityTemplateResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\"q\n" + + "\x1aGetActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\"^\n" + + "\x1bGetActivityTemplateResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\"\xed\x01\n" + + "\x1dUpdateActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12?\n" + + "\btemplate\x18\x02 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\x12+\n" + + "\x11expected_revision\x18\x03 \x01(\x03R\x10expectedRevision\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"a\n" + + "\x1eUpdateActivityTemplateResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\"\xe8\x01\n" + + " SetActivityTemplateStatusRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12+\n" + + "\x11expected_revision\x18\x04 \x01(\x03R\x10expectedRevision\x12*\n" + + "\x11operator_admin_id\x18\x05 \x01(\x03R\x0foperatorAdminId\"d\n" + + "!SetActivityTemplateStatusResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\"\xcd\x01\n" + + "\x1dDeleteActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12+\n" + + "\x11expected_revision\x18\x03 \x01(\x03R\x10expectedRevision\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"}\n" + + "\x1eDeleteActivityTemplateResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\x12\x1a\n" + + "\barchived\x18\x02 \x01(\bR\barchived\"\xc1\x02\n" + + "\x17ActivityTemplateVersion\x12\x1f\n" + + "\vtemplate_id\x18\x01 \x01(\tR\n" + + "templateId\x12\x1d\n" + + "\n" + + "version_no\x18\x02 \x01(\x03R\tversionNo\x12?\n" + + "\bsnapshot\x18\x03 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\bsnapshot\x121\n" + + "\x15published_by_admin_id\x18\x04 \x01(\x03R\x12publishedByAdminId\x12&\n" + + "\x0fpublished_at_ms\x18\x05 \x01(\x03R\rpublishedAtMs\x12&\n" + + "\x0fruntime_from_ms\x18\x06 \x01(\x03R\rruntimeFromMs\x12\"\n" + + "\rruntime_to_ms\x18\a \x01(\x03R\vruntimeToMs\"\xab\x01\n" + + "#ListActivityTemplateVersionsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"\x84\x01\n" + + "$ListActivityTemplateVersionsResponse\x12F\n" + + "\bversions\x18\x01 \x03(\v2*.hyapp.activity.v1.ActivityTemplateVersionR\bversions\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\x8c\x02\n" + + "\x1cCloneActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12,\n" + + "\x12source_template_id\x18\x02 \x01(\tR\x10sourceTemplateId\x12%\n" + + "\x0esource_version\x18\x03 \x01(\x03R\rsourceVersion\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12*\n" + + "\x11operator_admin_id\x18\x06 \x01(\x03R\x0foperatorAdminId\"`\n" + + "\x1dCloneActivityTemplateResponse\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\"e\n" + + "\x1fActivityTemplateValidationIssue\x12\x14\n" + + "\x05field\x18\x01 \x01(\tR\x05field\x12\x12\n" + + "\x04code\x18\x02 \x01(\tR\x04code\x12\x18\n" + + "\amessage\x18\x03 \x01(\tR\amessage\"\xb7\x01\n" + + "\x1fValidateActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12?\n" + + "\btemplate\x18\x02 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\x12\x1f\n" + + "\vfor_publish\x18\x03 \x01(\bR\n" + + "forPublish\"\x84\x01\n" + + " ValidateActivityTemplateResponse\x12\x14\n" + + "\x05valid\x18\x01 \x01(\bR\x05valid\x12J\n" + + "\x06issues\x18\x02 \x03(\v22.hyapp.activity.v1.ActivityTemplateValidationIssueR\x06issues\"\xeb\x01\n" + + "\x17ActivityTemplateRuntime\x12?\n" + + "\btemplate\x18\x01 \x01(\v2#.hyapp.activity.v1.ActivityTemplateR\btemplate\x12\x1d\n" + + "\n" + + "version_no\x18\x02 \x01(\x03R\tversionNo\x12&\n" + + "\x0fruntime_from_ms\x18\x03 \x01(\x03R\rruntimeFromMs\x12\"\n" + + "\rruntime_to_ms\x18\x04 \x01(\x03R\vruntimeToMs\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\"\xcc\x05\n" + + "\x1bActivityTemplateRuntimeTask\x12\x1f\n" + + "\vtemplate_id\x18\x01 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x02 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "version_no\x18\x03 \x01(\x03R\tversionNo\x12\x19\n" + + "\btask_day\x18\x04 \x01(\tR\ataskDay\x12\x19\n" + + "\btask_key\x18\x05 \x01(\tR\ataskKey\x12\x1b\n" + + "\ttask_type\x18\x06 \x01(\tR\btaskType\x12!\n" + + "\ftarget_value\x18\a \x01(\x03R\vtargetValue\x12%\n" + + "\x0eprogress_value\x18\b \x01(\x03R\rprogressValue\x127\n" + + "\x18reward_resource_group_id\x18\t \x01(\x03R\x15rewardResourceGroupId\x12\x16\n" + + "\x06status\x18\n" + + " \x01(\tR\x06status\x12\x1c\n" + + "\tclaimable\x18\v \x01(\bR\tclaimable\x12&\n" + + "\x0fcompleted_at_ms\x18\f \x01(\x03R\rcompletedAtMs\x12\"\n" + + "\rclaimed_at_ms\x18\r \x01(\x03R\vclaimedAtMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x0e \x01(\x05R\tsortOrder\x12,\n" + + "\x12reward_snapshot_id\x18\x0f \x01(\tR\x10rewardSnapshotId\x120\n" + + "\x14reward_snapshot_hash\x18\x10 \x01(\tR\x12rewardSnapshotHash\x12\x1f\n" + + "\vreward_name\x18\x11 \x01(\tR\n" + + "rewardName\x12P\n" + + "\freward_items\x18\x12 \x03(\v2-.hyapp.activity.v1.ActivityTemplateRewardItemR\vrewardItems\"\x91\a\n" + + "\x19ActivityTemplateTaskClaim\x12\x19\n" + + "\bclaim_id\x18\x01 \x01(\tR\aclaimId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x1f\n" + + "\vtemplate_id\x18\x03 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "version_no\x18\x05 \x01(\x03R\tversionNo\x12\x19\n" + + "\btask_day\x18\x06 \x01(\tR\ataskDay\x12\x19\n" + + "\btask_key\x18\a \x01(\tR\ataskKey\x12\x17\n" + + "\auser_id\x18\b \x01(\x03R\x06userId\x127\n" + + "\x18reward_resource_group_id\x18\t \x01(\x03R\x15rewardResourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\n" + + " \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\v \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\r \x01(\tR\rfailureReason\x12#\n" + + "\rattempt_count\x18\x0e \x01(\x05R\fattemptCount\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12\"\n" + + "\rgranted_at_ms\x18\x11 \x01(\x03R\vgrantedAtMs\x12,\n" + + "\x12reward_snapshot_id\x18\x12 \x01(\tR\x10rewardSnapshotId\x12\x1f\n" + + "\vreward_name\x18\x13 \x01(\tR\n" + + "rewardName\x12P\n" + + "\freward_items\x18\x14 \x03(\v2-.hyapp.activity.v1.ActivityTemplateRewardItemR\vrewardItems\x120\n" + + "\x14reward_snapshot_hash\x18\x15 \x01(\tR\x12rewardSnapshotHash\x12*\n" + + "\x11earning_region_id\x18\x16 \x01(\x03R\x0fearningRegionId\x12*\n" + + "\x11attribution_at_ms\x18\x17 \x01(\x03R\x0fattributionAtMs\"\xf3\x01\n" + + " ActivityTemplateLeaderboardEntry\x12\x17\n" + + "\arank_no\x18\x01 \x01(\x05R\x06rankNo\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x03 \x01(\x03R\x05score\x12\x1d\n" + + "\n" + + "gift_count\x18\x04 \x01(\x03R\tgiftCount\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12+\n" + + "\x12first_scored_at_ms\x18\x06 \x01(\x03R\x0ffirstScoredAtMs\x12\x1a\n" + + "\bsnapshot\x18\a \x01(\bR\bsnapshot\"\xa5\x01\n" + + "!GetCurrentActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x16\n" + + "\x06locale\x18\x04 \x01(\tR\x06locale\"\x80\x01\n" + + "\"GetCurrentActivityTemplateResponse\x12D\n" + + "\aruntime\x18\x01 \x01(\v2*.hyapp.activity.v1.ActivityTemplateRuntimeR\aruntime\x12\x14\n" + + "\x05found\x18\x02 \x01(\bR\x05found\"\xeb\x01\n" + + "\x1cVisitActivityTemplateRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "command_id\x18\x05 \x01(\tR\tcommandId\x12\x1d\n" + + "\n" + + "version_no\x18\x06 \x01(\x03R\tversionNo\"\xcc\x01\n" + + "\x1dVisitActivityTemplateResponse\x12D\n" + + "\aruntime\x18\x01 \x01(\v2*.hyapp.activity.v1.ActivityTemplateRuntimeR\aruntime\x12D\n" + + "\x05tasks\x18\x02 \x03(\v2..hyapp.activity.v1.ActivityTemplateRuntimeTaskR\x05tasks\x12\x1f\n" + + "\vfirst_visit\x18\x03 \x01(\bR\n" + + "firstVisit\"\xeb\x01\n" + + " ListActivityTemplateTasksRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x19\n" + + "\btask_day\x18\x05 \x01(\tR\ataskDay\x12\x1d\n" + + "\n" + + "version_no\x18\x06 \x01(\x03R\tversionNo\"\xdc\x01\n" + + "!ListActivityTemplateTasksResponse\x12D\n" + + "\aruntime\x18\x01 \x01(\v2*.hyapp.activity.v1.ActivityTemplateRuntimeR\aruntime\x12D\n" + + "\x05tasks\x18\x02 \x03(\v2..hyapp.activity.v1.ActivityTemplateRuntimeTaskR\x05tasks\x12+\n" + + "\x12next_refresh_at_ms\x18\x03 \x01(\x03R\x0fnextRefreshAtMs\"\xab\x02\n" + + "&ClaimActivityTemplateTaskRewardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x19\n" + + "\btask_day\x18\x05 \x01(\tR\ataskDay\x12\x19\n" + + "\btask_key\x18\x06 \x01(\tR\ataskKey\x12\x1d\n" + + "\n" + + "command_id\x18\a \x01(\tR\tcommandId\x12\x1d\n" + + "\n" + + "version_no\x18\b \x01(\x03R\tversionNo\"\x87\x01\n" + + "'ClaimActivityTemplateTaskRewardResponse\x12B\n" + + "\x05claim\x18\x01 \x01(\v2,.hyapp.activity.v1.ActivityTemplateTaskClaimR\x05claim\x12\x18\n" + + "\aclaimed\x18\x02 \x01(\bR\aclaimed\"\xc5\x02\n" + + "&ListActivityTemplateLeaderboardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12#\n" + + "\rtemplate_code\x18\x04 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "board_type\x18\x05 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x06 \x01(\tR\tperiodKey\x12\x12\n" + + "\x04page\x18\a \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "version_no\x18\t \x01(\x03R\tversionNo\"\xfb\x03\n" + + "'ListActivityTemplateLeaderboardResponse\x12D\n" + + "\aruntime\x18\x01 \x01(\v2*.hyapp.activity.v1.ActivityTemplateRuntimeR\aruntime\x12\x1d\n" + + "\n" + + "board_type\x18\x02 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x03 \x01(\tR\tperiodKey\x12&\n" + + "\x0fperiod_start_ms\x18\x04 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\x05 \x01(\x03R\vperiodEndMs\x12#\n" + + "\rperiod_status\x18\x06 \x01(\tR\fperiodStatus\x12M\n" + + "\aentries\x18\a \x03(\v23.hyapp.activity.v1.ActivityTemplateLeaderboardEntryR\aentries\x12N\n" + + "\bmy_entry\x18\b \x01(\v23.hyapp.activity.v1.ActivityTemplateLeaderboardEntryR\amyEntry\x12\x14\n" + + "\x05total\x18\t \x01(\x03R\x05total\x12&\n" + + "\x0fsettle_after_ms\x18\n" + + " \x01(\x03R\rsettleAfterMs\"\xef\x02\n" + + "\x1aActivityTemplateRankPeriod\x12\x1f\n" + + "\vtemplate_id\x18\x01 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x02 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "version_no\x18\x03 \x01(\x03R\tversionNo\x12\x1d\n" + + "\n" + + "board_type\x18\x04 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x05 \x01(\tR\tperiodKey\x12&\n" + + "\x0fperiod_start_ms\x18\x06 \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\a \x01(\x03R\vperiodEndMs\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12\"\n" + + "\rsettled_at_ms\x18\t \x01(\x03R\vsettledAtMs\x12&\n" + + "\x0fsettle_after_ms\x18\n" + + " \x01(\x03R\rsettleAfterMs\"\x99\a\n" + + "\x19ActivityTemplateRewardJob\x12\"\n" + + "\rreward_job_id\x18\x01 \x01(\tR\vrewardJobId\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12#\n" + + "\rtemplate_code\x18\x03 \x01(\tR\ftemplateCode\x12\x1d\n" + + "\n" + + "version_no\x18\x04 \x01(\x03R\tversionNo\x12\x1d\n" + + "\n" + + "board_type\x18\x05 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x06 \x01(\tR\tperiodKey\x12\x17\n" + + "\arank_no\x18\a \x01(\x05R\x06rankNo\x12\x17\n" + + "\auser_id\x18\b \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\t \x01(\x03R\x05score\x12*\n" + + "\x11resource_group_id\x18\n" + + " \x01(\x03R\x0fresourceGroupId\x12*\n" + + "\x11wallet_command_id\x18\v \x01(\tR\x0fwalletCommandId\x12&\n" + + "\x0fwallet_grant_id\x18\f \x01(\tR\rwalletGrantId\x12\x16\n" + + "\x06status\x18\r \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\x0e \x01(\tR\rfailureReason\x12#\n" + + "\rattempt_count\x18\x0f \x01(\x05R\fattemptCount\x12\"\n" + + "\rcreated_at_ms\x18\x10 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x11 \x01(\x03R\vupdatedAtMs\x12\"\n" + + "\rgranted_at_ms\x18\x12 \x01(\x03R\vgrantedAtMs\x12,\n" + + "\x12reward_snapshot_id\x18\x13 \x01(\tR\x10rewardSnapshotId\x120\n" + + "\x14reward_snapshot_hash\x18\x14 \x01(\tR\x12rewardSnapshotHash\x12\x1f\n" + + "\vreward_name\x18\x15 \x01(\tR\n" + + "rewardName\x12P\n" + + "\freward_items\x18\x16 \x03(\v2-.hyapp.activity.v1.ActivityTemplateRewardItemR\vrewardItems\x12!\n" + + "\fmax_attempts\x18\x17 \x01(\x05R\vmaxAttempts\x12'\n" + + "\x10next_retry_at_ms\x18\x18 \x01(\x03R\rnextRetryAtMs\"\x90\x02\n" + + "+AdminListActivityTemplateLeaderboardRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x1d\n" + + "\n" + + "version_no\x18\x03 \x01(\x03R\tversionNo\x12\x1d\n" + + "\n" + + "board_type\x18\x04 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x05 \x01(\tR\tperiodKey\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"\xda\x01\n" + + ",AdminListActivityTemplateLeaderboardResponse\x12E\n" + + "\x06period\x18\x01 \x01(\v2-.hyapp.activity.v1.ActivityTemplateRankPeriodR\x06period\x12M\n" + + "\aentries\x18\x02 \x03(\v23.hyapp.activity.v1.ActivityTemplateLeaderboardEntryR\aentries\x12\x14\n" + + "\x05total\x18\x03 \x01(\x03R\x05total\"\xa2\x02\n" + + "%ListActivityTemplateRewardJobsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x1d\n" + + "\n" + + "version_no\x18\x03 \x01(\x03R\tversionNo\x12\x1d\n" + + "\n" + + "board_type\x18\x04 \x01(\tR\tboardType\x12\x1d\n" + + "\n" + + "period_key\x18\x05 \x01(\tR\tperiodKey\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\a \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\"\x80\x01\n" + + "&ListActivityTemplateRewardJobsResponse\x12@\n" + + "\x04jobs\x18\x01 \x03(\v2,.hyapp.activity.v1.ActivityTemplateRewardJobR\x04jobs\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xcc\x01\n" + + "%RetryActivityTemplateRewardJobRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\"\n" + + "\rreward_job_id\x18\x03 \x01(\tR\vrewardJobId\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"h\n" + + "&RetryActivityTemplateRewardJobResponse\x12>\n" + + "\x03job\x18\x01 \x01(\v2,.hyapp.activity.v1.ActivityTemplateRewardJobR\x03job\"\xb3\x02\n" + + "%ListActivityTemplateTaskClaimsRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x1d\n" + + "\n" + + "version_no\x18\x03 \x01(\x03R\tversionNo\x12\x19\n" + + "\btask_day\x18\x04 \x01(\tR\ataskDay\x12\x19\n" + + "\btask_key\x18\x05 \x01(\tR\ataskKey\x12\x17\n" + + "\auser_id\x18\x06 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\b \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\t \x01(\x05R\bpageSize\"\x84\x01\n" + + "&ListActivityTemplateTaskClaimsResponse\x12D\n" + + "\x06claims\x18\x01 \x03(\v2,.hyapp.activity.v1.ActivityTemplateTaskClaimR\x06claims\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xc3\x01\n" + + "%RetryActivityTemplateTaskClaimRequest\x122\n" + + "\x04meta\x18\x01 \x01(\v2\x1e.hyapp.activity.v1.RequestMetaR\x04meta\x12\x1f\n" + + "\vtemplate_id\x18\x02 \x01(\tR\n" + + "templateId\x12\x19\n" + + "\bclaim_id\x18\x03 \x01(\tR\aclaimId\x12*\n" + + "\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"l\n" + + "&RetryActivityTemplateTaskClaimResponse\x12B\n" + + "\x05claim\x18\x01 \x01(\v2,.hyapp.activity.v1.ActivityTemplateTaskClaimR\x05claim2\xe2\x01\n" + + "\x0fActivityService\x12_\n" + + "\fPingActivity\x12&.hyapp.activity.v1.PingActivityRequest\x1a'.hyapp.activity.v1.PingActivityResponse\x12n\n" + + "\x11GetActivityStatus\x12+.hyapp.activity.v1.GetActivityStatusRequest\x1a,.hyapp.activity.v1.GetActivityStatusResponse2\xb1\x06\n" + + "\x13MessageInboxService\x12h\n" + + "\x0fListMessageTabs\x12).hyapp.activity.v1.ListMessageTabsRequest\x1a*.hyapp.activity.v1.ListMessageTabsResponse\x12n\n" + + "\x11ListInboxMessages\x12+.hyapp.activity.v1.ListInboxMessagesRequest\x1a,.hyapp.activity.v1.ListInboxMessagesResponse\x12w\n" + + "\x14MarkInboxMessageRead\x12..hyapp.activity.v1.MarkInboxMessageReadRequest\x1a/.hyapp.activity.v1.MarkInboxMessageReadResponse\x12w\n" + + "\x14MarkInboxSectionRead\x12..hyapp.activity.v1.MarkInboxSectionReadRequest\x1a/.hyapp.activity.v1.MarkInboxSectionReadResponse\x12q\n" + + "\x12DeleteInboxMessage\x12,.hyapp.activity.v1.DeleteInboxMessageRequest\x1a-.hyapp.activity.v1.DeleteInboxMessageResponse\x12q\n" + + "\x12CreateInboxMessage\x12,.hyapp.activity.v1.CreateInboxMessageRequest\x1a-.hyapp.activity.v1.CreateInboxMessageResponse\x12h\n" + + "\x0fCreateFanoutJob\x12).hyapp.activity.v1.CreateFanoutJobRequest\x1a*.hyapp.activity.v1.CreateFanoutJobResponse2\xb0\x04\n" + + "\x1bMessageActionConfirmService\x12t\n" + + "\x13AcceptActionConfirm\x12-.hyapp.activity.v1.AcceptActionConfirmRequest\x1a..hyapp.activity.v1.AcceptActionConfirmResponse\x12t\n" + + "\x13RejectActionConfirm\x12-.hyapp.activity.v1.RejectActionConfirmRequest\x1a..hyapp.activity.v1.RejectActionConfirmResponse\x12\x8c\x01\n" + + "\x1bBatchGetActionConfirmStatus\x125.hyapp.activity.v1.BatchGetActionConfirmStatusRequest\x1a6.hyapp.activity.v1.BatchGetActionConfirmStatusResponse\x12\x95\x01\n" + + "\x1eListConversationActionConfirms\x128.hyapp.activity.v1.ListConversationActionConfirmsRequest\x1a9.hyapp.activity.v1.ListConversationActionConfirmsResponse2\xf6\a\n" + + "\x13ActivityCronService\x12f\n" + + "\x19ProcessMessageFanoutBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12d\n" + + "\x17ProcessLevelRewardBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12g\n" + + "\x1aProcessTemporaryLevelBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12j\n" + + "\x1dProcessAchievementRewardBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12u\n" + + "(ProcessRoomTurnoverRewardSettlementBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12m\n" + + " ProcessWeeklyStarSettlementBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12o\n" + + "\"ProcessCPWeeklyRankSettlementBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12p\n" + + "#ProcessAgencyOpeningSettlementBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse\x12s\n" + + "&ProcessActivityTemplateSettlementBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a$.hyapp.activity.v1.CronBatchResponse2\xe7\x05\n" + + "\x1eActivityTemplateRuntimeService\x12\x89\x01\n" + + "\x1aGetCurrentActivityTemplate\x124.hyapp.activity.v1.GetCurrentActivityTemplateRequest\x1a5.hyapp.activity.v1.GetCurrentActivityTemplateResponse\x12z\n" + + "\x15VisitActivityTemplate\x12/.hyapp.activity.v1.VisitActivityTemplateRequest\x1a0.hyapp.activity.v1.VisitActivityTemplateResponse\x12\x86\x01\n" + + "\x19ListActivityTemplateTasks\x123.hyapp.activity.v1.ListActivityTemplateTasksRequest\x1a4.hyapp.activity.v1.ListActivityTemplateTasksResponse\x12\x98\x01\n" + + "\x1fClaimActivityTemplateTaskReward\x129.hyapp.activity.v1.ClaimActivityTemplateTaskRewardRequest\x1a:.hyapp.activity.v1.ClaimActivityTemplateTaskRewardResponse\x12\x98\x01\n" + + "\x1fListActivityTemplateLeaderboard\x129.hyapp.activity.v1.ListActivityTemplateLeaderboardRequest\x1a:.hyapp.activity.v1.ListActivityTemplateLeaderboardResponse2\xc8\x02\n" + + "\vTaskService\x12b\n" + + "\rListUserTasks\x12'.hyapp.activity.v1.ListUserTasksRequest\x1a(.hyapp.activity.v1.ListUserTasksResponse\x12h\n" + + "\x0fClaimTaskReward\x12).hyapp.activity.v1.ClaimTaskRewardRequest\x1a*.hyapp.activity.v1.ClaimTaskRewardResponse\x12k\n" + + "\x10ConsumeTaskEvent\x12*.hyapp.activity.v1.ConsumeTaskEventRequest\x1a+.hyapp.activity.v1.ConsumeTaskEventResponse2\xd9\x06\n" + + "\x12GrowthLevelService\x12q\n" + + "\x12GetMyLevelOverview\x12,.hyapp.activity.v1.GetMyLevelOverviewRequest\x1a-.hyapp.activity.v1.GetMyLevelOverviewResponse\x12b\n" + + "\rGetLevelTrack\x12'.hyapp.activity.v1.GetLevelTrackRequest\x1a(.hyapp.activity.v1.GetLevelTrackResponse\x12\x9b\x01\n" + + " BatchGetUserLevelDisplayProfiles\x12:.hyapp.activity.v1.BatchGetUserLevelDisplayProfilesRequest\x1a;.hyapp.activity.v1.BatchGetUserLevelDisplayProfilesResponse\x12k\n" + + "\x10ListLevelRewards\x12*.hyapp.activity.v1.ListLevelRewardsRequest\x1a+.hyapp.activity.v1.ListLevelRewardsResponse\x12n\n" + + "\x11ConsumeLevelEvent\x12+.hyapp.activity.v1.ConsumeLevelEventRequest\x1a,.hyapp.activity.v1.ConsumeLevelEventResponse\x12_\n" + + "\fSetUserLevel\x12&.hyapp.activity.v1.SetUserLevelRequest\x1a'.hyapp.activity.v1.SetUserLevelResponse\x12\x8f\x01\n" + + "\x1cIssueRegistrationLevelBadges\x126.hyapp.activity.v1.IssueRegistrationLevelBadgesRequest\x1a7.hyapp.activity.v1.IssueRegistrationLevelBadgesResponse2\xcf\x03\n" + + "\x12AchievementService\x12k\n" + + "\x10ListAchievements\x12*.hyapp.activity.v1.ListAchievementsRequest\x1a+.hyapp.activity.v1.ListAchievementsResponse\x12\x80\x01\n" + + "\x17ConsumeAchievementEvent\x121.hyapp.activity.v1.ConsumeAchievementEventRequest\x1a2.hyapp.activity.v1.ConsumeAchievementEventResponse\x12_\n" + + "\fListMyBadges\x12&.hyapp.activity.v1.ListMyBadgesRequest\x1a'.hyapp.activity.v1.ListMyBadgesResponse\x12h\n" + + "\x0fSetBadgeDisplay\x12).hyapp.activity.v1.SetBadgeDisplayRequest\x1a*.hyapp.activity.v1.SetBadgeDisplayResponse2{\n" + + "\fWheelService\x12k\n" + + "\x10ExecuteWheelDraw\x12*.hyapp.activity.v1.ExecuteWheelDrawRequest\x1a+.hyapp.activity.v1.ExecuteWheelDrawResponse2\xaa\x01\n" + + "\x19RoomTurnoverRewardService\x12\x8c\x01\n" + + "\x1bGetRoomTurnoverRewardStatus\x125.hyapp.activity.v1.GetRoomTurnoverRewardStatusRequest\x1a6.hyapp.activity.v1.GetRoomTurnoverRewardStatusResponse2\x91\x03\n" + + "\x11WeeklyStarService\x12w\n" + + "\x14GetWeeklyStarCurrent\x12..hyapp.activity.v1.GetWeeklyStarCurrentRequest\x1a/.hyapp.activity.v1.GetWeeklyStarCurrentResponse\x12\x86\x01\n" + + "\x19ListWeeklyStarLeaderboard\x123.hyapp.activity.v1.ListWeeklyStarLeaderboardRequest\x1a4.hyapp.activity.v1.ListWeeklyStarLeaderboardResponse\x12z\n" + + "\x15ListWeeklyStarHistory\x12/.hyapp.activity.v1.ListWeeklyStarHistoryRequest\x1a0.hyapp.activity.v1.ListWeeklyStarHistoryResponse2\x91\x01\n" + + "\x13CPWeeklyRankService\x12z\n" + + "\x15GetCPWeeklyRankStatus\x12/.hyapp.activity.v1.GetCPWeeklyRankStatusRequest\x1a0.hyapp.activity.v1.GetCPWeeklyRankStatusResponse2\x9c\x03\n" + + "\x14AgencyOpeningService\x12}\n" + + "\x16GetAgencyOpeningStatus\x120.hyapp.activity.v1.GetAgencyOpeningStatusRequest\x1a1.hyapp.activity.v1.GetAgencyOpeningStatusResponse\x12q\n" + + "\x12ApplyAgencyOpening\x12,.hyapp.activity.v1.ApplyAgencyOpeningRequest\x1a-.hyapp.activity.v1.ApplyAgencyOpeningResponse\x12\x91\x01\n" + + "\x1cListAgencyOpeningLeaderboard\x127.hyapp.activity.v1.ListAgencyOpeningApplicationsRequest\x1a8.hyapp.activity.v1.ListAgencyOpeningApplicationsResponse2\x8b\x05\n" + + "\x10BroadcastService\x12z\n" + + "\x15EnsureBroadcastGroups\x12/.hyapp.activity.v1.EnsureBroadcastGroupsRequest\x1a0.hyapp.activity.v1.EnsureBroadcastGroupsResponse\x12w\n" + + "\x16PublishRegionBroadcast\x120.hyapp.activity.v1.PublishRegionBroadcastRequest\x1a+.hyapp.activity.v1.PublishBroadcastResponse\x12w\n" + + "\x16PublishGlobalBroadcast\x120.hyapp.activity.v1.PublishGlobalBroadcastRequest\x1a+.hyapp.activity.v1.PublishBroadcastResponse\x12\x8c\x01\n" + + "\x1bRemoveRegionBroadcastMember\x125.hyapp.activity.v1.RemoveRegionBroadcastMemberRequest\x1a6.hyapp.activity.v1.RemoveRegionBroadcastMemberResponse\x12z\n" + + "\x1bProcessBroadcastOutboxBatch\x12#.hyapp.activity.v1.CronBatchRequest\x1a6.hyapp.activity.v1.ProcessBroadcastOutboxBatchResponse2\x87\x01\n" + + "\x18RoomEventConsumerService\x12k\n" + + "\x10ConsumeRoomEvent\x12*.hyapp.activity.v1.ConsumeRoomEventRequest\x1a+.hyapp.activity.v1.ConsumeRoomEventResponse2\x87\x04\n" + + "\x10AdminTaskService\x12t\n" + + "\x13ListTaskDefinitions\x12-.hyapp.activity.v1.ListTaskDefinitionsRequest\x1a..hyapp.activity.v1.ListTaskDefinitionsResponse\x12w\n" + + "\x14UpsertTaskDefinition\x12..hyapp.activity.v1.UpsertTaskDefinitionRequest\x1a/.hyapp.activity.v1.UpsertTaskDefinitionResponse\x12\x80\x01\n" + + "\x17SetTaskDefinitionStatus\x121.hyapp.activity.v1.SetTaskDefinitionStatusRequest\x1a2.hyapp.activity.v1.SetTaskDefinitionStatusResponse\x12\x80\x01\n" + + "\x17PublishTaskRewardPolicy\x121.hyapp.activity.v1.PublishTaskRewardPolicyRequest\x1a2.hyapp.activity.v1.PublishTaskRewardPolicyResponse2\xbc\x02\n" + + "\x19RegistrationRewardService\x12\x9b\x01\n" + + " GetRegistrationRewardEligibility\x12:.hyapp.activity.v1.GetRegistrationRewardEligibilityRequest\x1a;.hyapp.activity.v1.GetRegistrationRewardEligibilityResponse\x12\x80\x01\n" + + "\x17IssueRegistrationReward\x121.hyapp.activity.v1.IssueRegistrationRewardRequest\x1a2.hyapp.activity.v1.IssueRegistrationRewardResponse2\xd9\x03\n" + + "\x1eAdminRegistrationRewardService\x12\x8c\x01\n" + + "\x1bGetRegistrationRewardConfig\x125.hyapp.activity.v1.GetRegistrationRewardConfigRequest\x1a6.hyapp.activity.v1.GetRegistrationRewardConfigResponse\x12\x95\x01\n" + + "\x1eUpdateRegistrationRewardConfig\x128.hyapp.activity.v1.UpdateRegistrationRewardConfigRequest\x1a9.hyapp.activity.v1.UpdateRegistrationRewardConfigResponse\x12\x8f\x01\n" + + "\x1cListRegistrationRewardClaims\x126.hyapp.activity.v1.ListRegistrationRewardClaimsRequest\x1a7.hyapp.activity.v1.ListRegistrationRewardClaimsResponse2\xba\x02\n" + + "\x1aFirstRechargeRewardService\x12\x8f\x01\n" + + "\x1cGetFirstRechargeRewardStatus\x126.hyapp.activity.v1.GetFirstRechargeRewardStatusRequest\x1a7.hyapp.activity.v1.GetFirstRechargeRewardStatusResponse\x12\x89\x01\n" + + "\x1aConsumeFirstRechargeReward\x124.hyapp.activity.v1.ConsumeFirstRechargeRewardRequest\x1a5.hyapp.activity.v1.ConsumeFirstRechargeRewardResponse2\xe3\x03\n" + + "\x1fAdminFirstRechargeRewardService\x12\x8f\x01\n" + + "\x1cGetFirstRechargeRewardConfig\x126.hyapp.activity.v1.GetFirstRechargeRewardConfigRequest\x1a7.hyapp.activity.v1.GetFirstRechargeRewardConfigResponse\x12\x98\x01\n" + + "\x1fUpdateFirstRechargeRewardConfig\x129.hyapp.activity.v1.UpdateFirstRechargeRewardConfigRequest\x1a:.hyapp.activity.v1.UpdateFirstRechargeRewardConfigResponse\x12\x92\x01\n" + + "\x1dListFirstRechargeRewardClaims\x127.hyapp.activity.v1.ListFirstRechargeRewardClaimsRequest\x1a8.hyapp.activity.v1.ListFirstRechargeRewardClaimsResponse2\xdd\x02\n" + + "\x1fCumulativeRechargeRewardService\x12\x9e\x01\n" + + "!GetCumulativeRechargeRewardStatus\x12;.hyapp.activity.v1.GetCumulativeRechargeRewardStatusRequest\x1a<.hyapp.activity.v1.GetCumulativeRechargeRewardStatusResponse\x12\x98\x01\n" + + "\x1fConsumeCumulativeRechargeReward\x129.hyapp.activity.v1.ConsumeCumulativeRechargeRewardRequest\x1a:.hyapp.activity.v1.ConsumeCumulativeRechargeRewardResponse2\xd0\x03\n" + + "\x1bInviteActivityRewardService\x12\x92\x01\n" + + "\x1dGetInviteActivityRewardStatus\x127.hyapp.activity.v1.GetInviteActivityRewardStatusRequest\x1a8.hyapp.activity.v1.GetInviteActivityRewardStatusResponse\x12\x86\x01\n" + + "\x19ClaimInviteActivityReward\x123.hyapp.activity.v1.ClaimInviteActivityRewardRequest\x1a4.hyapp.activity.v1.ClaimInviteActivityRewardResponse\x12\x92\x01\n" + + "\x1dListInviteActivityLeaderboard\x127.hyapp.activity.v1.ListInviteActivityLeaderboardRequest\x1a8.hyapp.activity.v1.ListInviteActivityLeaderboardResponse2\x95\x04\n" + + "$AdminCumulativeRechargeRewardService\x12\x9e\x01\n" + + "!GetCumulativeRechargeRewardConfig\x12;.hyapp.activity.v1.GetCumulativeRechargeRewardConfigRequest\x1a<.hyapp.activity.v1.GetCumulativeRechargeRewardConfigResponse\x12\xa7\x01\n" + + "$UpdateCumulativeRechargeRewardConfig\x12>.hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigRequest\x1a?.hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigResponse\x12\xa1\x01\n" + + "\"ListCumulativeRechargeRewardGrants\x12<.hyapp.activity.v1.ListCumulativeRechargeRewardGrantsRequest\x1a=.hyapp.activity.v1.ListCumulativeRechargeRewardGrantsResponse2\x8e\x05\n" + + " AdminInviteActivityRewardService\x12\x92\x01\n" + + "\x1dGetInviteActivityRewardConfig\x127.hyapp.activity.v1.GetInviteActivityRewardConfigRequest\x1a8.hyapp.activity.v1.GetInviteActivityRewardConfigResponse\x12\x9b\x01\n" + + " UpdateInviteActivityRewardConfig\x12:.hyapp.activity.v1.UpdateInviteActivityRewardConfigRequest\x1a;.hyapp.activity.v1.UpdateInviteActivityRewardConfigResponse\x12\x95\x01\n" + + "\x1eListInviteActivityRewardClaims\x128.hyapp.activity.v1.ListInviteActivityRewardClaimsRequest\x1a9.hyapp.activity.v1.ListInviteActivityRewardClaimsResponse\x12\x9e\x01\n" + + "!ListInviteActivityRewardSummaries\x12;.hyapp.activity.v1.ListInviteActivityRewardSummariesRequest\x1a<.hyapp.activity.v1.ListInviteActivityRewardSummariesResponse2\x89\x05\n" + + "\x1eAdminRoomTurnoverRewardService\x12\x8c\x01\n" + + "\x1bGetRoomTurnoverRewardConfig\x125.hyapp.activity.v1.GetRoomTurnoverRewardConfigRequest\x1a6.hyapp.activity.v1.GetRoomTurnoverRewardConfigResponse\x12\x95\x01\n" + + "\x1eUpdateRoomTurnoverRewardConfig\x128.hyapp.activity.v1.UpdateRoomTurnoverRewardConfigRequest\x1a9.hyapp.activity.v1.UpdateRoomTurnoverRewardConfigResponse\x12\x9e\x01\n" + + "!ListRoomTurnoverRewardSettlements\x12;.hyapp.activity.v1.ListRoomTurnoverRewardSettlementsRequest\x1a<.hyapp.activity.v1.ListRoomTurnoverRewardSettlementsResponse\x12\x9e\x01\n" + + "!RetryRoomTurnoverRewardSettlement\x12;.hyapp.activity.v1.RetryRoomTurnoverRewardSettlementRequest\x1a<.hyapp.activity.v1.RetryRoomTurnoverRewardSettlementResponse2\x94\a\n" + + "\x16AdminWeeklyStarService\x12w\n" + + "\x14ListWeeklyStarCycles\x12..hyapp.activity.v1.ListWeeklyStarCyclesRequest\x1a/.hyapp.activity.v1.ListWeeklyStarCyclesResponse\x12z\n" + + "\x15CreateWeeklyStarCycle\x12/.hyapp.activity.v1.UpsertWeeklyStarCycleRequest\x1a0.hyapp.activity.v1.UpsertWeeklyStarCycleResponse\x12q\n" + + "\x12GetWeeklyStarCycle\x12,.hyapp.activity.v1.GetWeeklyStarCycleRequest\x1a-.hyapp.activity.v1.GetWeeklyStarCycleResponse\x12z\n" + + "\x15UpdateWeeklyStarCycle\x12/.hyapp.activity.v1.UpsertWeeklyStarCycleRequest\x1a0.hyapp.activity.v1.UpsertWeeklyStarCycleResponse\x12\x83\x01\n" + + "\x18SetWeeklyStarCycleStatus\x122.hyapp.activity.v1.SetWeeklyStarCycleStatusRequest\x1a3.hyapp.activity.v1.SetWeeklyStarCycleStatusResponse\x12\x86\x01\n" + + "\x19ListWeeklyStarLeaderboard\x123.hyapp.activity.v1.ListWeeklyStarLeaderboardRequest\x1a4.hyapp.activity.v1.ListWeeklyStarLeaderboardResponse\x12\x86\x01\n" + + "\x19ListWeeklyStarSettlements\x123.hyapp.activity.v1.ListWeeklyStarSettlementsRequest\x1a4.hyapp.activity.v1.ListWeeklyStarSettlementsResponse2\xab\x03\n" + + "\x18AdminCPWeeklyRankService\x12z\n" + + "\x15GetCPWeeklyRankConfig\x12/.hyapp.activity.v1.GetCPWeeklyRankConfigRequest\x1a0.hyapp.activity.v1.GetCPWeeklyRankConfigResponse\x12\x83\x01\n" + + "\x18UpdateCPWeeklyRankConfig\x122.hyapp.activity.v1.UpdateCPWeeklyRankConfigRequest\x1a3.hyapp.activity.v1.UpdateCPWeeklyRankConfigResponse\x12\x8c\x01\n" + + "\x1bListCPWeeklyRankSettlements\x125.hyapp.activity.v1.ListCPWeeklyRankSettlementsRequest\x1a6.hyapp.activity.v1.ListCPWeeklyRankSettlementsResponse2\xe2\a\n" + + "\x19AdminAgencyOpeningService\x12\x80\x01\n" + + "\x17ListAgencyOpeningCycles\x121.hyapp.activity.v1.ListAgencyOpeningCyclesRequest\x1a2.hyapp.activity.v1.ListAgencyOpeningCyclesResponse\x12\x83\x01\n" + + "\x18CreateAgencyOpeningCycle\x122.hyapp.activity.v1.UpsertAgencyOpeningCycleRequest\x1a3.hyapp.activity.v1.UpsertAgencyOpeningCycleResponse\x12z\n" + + "\x15GetAgencyOpeningCycle\x12/.hyapp.activity.v1.GetAgencyOpeningCycleRequest\x1a0.hyapp.activity.v1.GetAgencyOpeningCycleResponse\x12\x83\x01\n" + + "\x18UpdateAgencyOpeningCycle\x122.hyapp.activity.v1.UpsertAgencyOpeningCycleRequest\x1a3.hyapp.activity.v1.UpsertAgencyOpeningCycleResponse\x12\x8c\x01\n" + + "\x1bSetAgencyOpeningCycleStatus\x125.hyapp.activity.v1.SetAgencyOpeningCycleStatusRequest\x1a6.hyapp.activity.v1.SetAgencyOpeningCycleStatusResponse\x12\x92\x01\n" + + "\x1dListAgencyOpeningApplications\x127.hyapp.activity.v1.ListAgencyOpeningApplicationsRequest\x1a8.hyapp.activity.v1.ListAgencyOpeningApplicationsResponse\x12\x95\x01\n" + + "\x1eReviewAgencyOpeningApplication\x128.hyapp.activity.v1.ReviewAgencyOpeningApplicationRequest\x1a9.hyapp.activity.v1.ReviewAgencyOpeningApplicationResponse2\xaf\x0f\n" + + "\x1cAdminActivityTemplateService\x12z\n" + + "\x15ListActivityTemplates\x12/.hyapp.activity.v1.ListActivityTemplatesRequest\x1a0.hyapp.activity.v1.ListActivityTemplatesResponse\x12}\n" + + "\x16CreateActivityTemplate\x120.hyapp.activity.v1.CreateActivityTemplateRequest\x1a1.hyapp.activity.v1.CreateActivityTemplateResponse\x12t\n" + + "\x13GetActivityTemplate\x12-.hyapp.activity.v1.GetActivityTemplateRequest\x1a..hyapp.activity.v1.GetActivityTemplateResponse\x12}\n" + + "\x16UpdateActivityTemplate\x120.hyapp.activity.v1.UpdateActivityTemplateRequest\x1a1.hyapp.activity.v1.UpdateActivityTemplateResponse\x12\x86\x01\n" + + "\x19SetActivityTemplateStatus\x123.hyapp.activity.v1.SetActivityTemplateStatusRequest\x1a4.hyapp.activity.v1.SetActivityTemplateStatusResponse\x12}\n" + + "\x16DeleteActivityTemplate\x120.hyapp.activity.v1.DeleteActivityTemplateRequest\x1a1.hyapp.activity.v1.DeleteActivityTemplateResponse\x12\x8f\x01\n" + + "\x1cListActivityTemplateVersions\x126.hyapp.activity.v1.ListActivityTemplateVersionsRequest\x1a7.hyapp.activity.v1.ListActivityTemplateVersionsResponse\x12z\n" + + "\x15CloneActivityTemplate\x12/.hyapp.activity.v1.CloneActivityTemplateRequest\x1a0.hyapp.activity.v1.CloneActivityTemplateResponse\x12\x83\x01\n" + + "\x18ValidateActivityTemplate\x122.hyapp.activity.v1.ValidateActivityTemplateRequest\x1a3.hyapp.activity.v1.ValidateActivityTemplateResponse\x12\xa2\x01\n" + + "\x1fListActivityTemplateLeaderboard\x12>.hyapp.activity.v1.AdminListActivityTemplateLeaderboardRequest\x1a?.hyapp.activity.v1.AdminListActivityTemplateLeaderboardResponse\x12\x95\x01\n" + + "\x1eListActivityTemplateRewardJobs\x128.hyapp.activity.v1.ListActivityTemplateRewardJobsRequest\x1a9.hyapp.activity.v1.ListActivityTemplateRewardJobsResponse\x12\x95\x01\n" + + "\x1eRetryActivityTemplateRewardJob\x128.hyapp.activity.v1.RetryActivityTemplateRewardJobRequest\x1a9.hyapp.activity.v1.RetryActivityTemplateRewardJobResponse\x12\x95\x01\n" + + "\x1eListActivityTemplateTaskClaims\x128.hyapp.activity.v1.ListActivityTemplateTaskClaimsRequest\x1a9.hyapp.activity.v1.ListActivityTemplateTaskClaimsResponse\x12\x95\x01\n" + + "\x1eRetryActivityTemplateTaskClaim\x128.hyapp.activity.v1.RetryActivityTemplateTaskClaimRequest\x1a9.hyapp.activity.v1.RetryActivityTemplateTaskClaimResponse2\x94\x02\n" + + "\x16SevenDayCheckInService\x12\x83\x01\n" + + "\x18GetSevenDayCheckInStatus\x122.hyapp.activity.v1.GetSevenDayCheckInStatusRequest\x1a3.hyapp.activity.v1.GetSevenDayCheckInStatusResponse\x12t\n" + + "\x13SignSevenDayCheckIn\x12-.hyapp.activity.v1.SignSevenDayCheckInRequest\x1a..hyapp.activity.v1.SignSevenDayCheckInResponse2\xbb\x03\n" + + "\x1bAdminSevenDayCheckInService\x12\x83\x01\n" + + "\x18GetSevenDayCheckInConfig\x122.hyapp.activity.v1.GetSevenDayCheckInConfigRequest\x1a3.hyapp.activity.v1.GetSevenDayCheckInConfigResponse\x12\x8c\x01\n" + + "\x1bUpdateSevenDayCheckInConfig\x125.hyapp.activity.v1.UpdateSevenDayCheckInConfigRequest\x1a6.hyapp.activity.v1.UpdateSevenDayCheckInConfigResponse\x12\x86\x01\n" + + "\x19ListSevenDayCheckInClaims\x123.hyapp.activity.v1.ListSevenDayCheckInClaimsRequest\x1a4.hyapp.activity.v1.ListSevenDayCheckInClaimsResponse2\xe4\x06\n" + + "\x17AdminGrowthLevelService\x12h\n" + + "\x0fListLevelConfig\x12).hyapp.activity.v1.ListLevelConfigRequest\x1a*.hyapp.activity.v1.ListLevelConfigResponse\x12k\n" + + "\x10UpsertLevelTrack\x12*.hyapp.activity.v1.UpsertLevelTrackRequest\x1a+.hyapp.activity.v1.UpsertLevelTrackResponse\x12h\n" + + "\x0fUpsertLevelRule\x12).hyapp.activity.v1.UpsertLevelRuleRequest\x1a*.hyapp.activity.v1.UpsertLevelRuleResponse\x12h\n" + + "\x0fUpsertLevelTier\x12).hyapp.activity.v1.UpsertLevelTierRequest\x1a*.hyapp.activity.v1.UpsertLevelTierResponse\x12}\n" + + "\x16BatchUpsertLevelConfig\x120.hyapp.activity.v1.BatchUpsertLevelConfigRequest\x1a1.hyapp.activity.v1.BatchUpsertLevelConfigResponse\x12\x95\x01\n" + + "\x1eBatchGetUserLevelAdminProfiles\x128.hyapp.activity.v1.BatchGetUserLevelAdminProfilesRequest\x1a9.hyapp.activity.v1.BatchGetUserLevelAdminProfilesResponse\x12\x86\x01\n" + + "\x19AdjustTemporaryUserLevels\x123.hyapp.activity.v1.AdjustTemporaryUserLevelsRequest\x1a4.hyapp.activity.v1.AdjustTemporaryUserLevelsResponse2\xae\x03\n" + + "\x17AdminAchievementService\x12u\n" + + "\x1aListAchievementDefinitions\x12*.hyapp.activity.v1.ListAchievementsRequest\x1a+.hyapp.activity.v1.ListAchievementsResponse\x12\x8c\x01\n" + + "\x1bUpsertAchievementDefinition\x125.hyapp.activity.v1.UpsertAchievementDefinitionRequest\x1a6.hyapp.activity.v1.UpsertAchievementDefinitionResponse\x12\x8c\x01\n" + + "\x1bDeleteAchievementDefinition\x125.hyapp.activity.v1.DeleteAchievementDefinitionRequest\x1a6.hyapp.activity.v1.DeleteAchievementDefinitionResponse2\xc7\x03\n" + + "\x11AdminWheelService\x12e\n" + + "\x0eGetWheelConfig\x12(.hyapp.activity.v1.GetWheelConfigRequest\x1a).hyapp.activity.v1.GetWheelConfigResponse\x12n\n" + + "\x11UpsertWheelConfig\x12+.hyapp.activity.v1.UpsertWheelConfigRequest\x1a,.hyapp.activity.v1.UpsertWheelConfigResponse\x12e\n" + + "\x0eListWheelDraws\x12(.hyapp.activity.v1.ListWheelDrawsRequest\x1a).hyapp.activity.v1.ListWheelDrawsResponse\x12t\n" + + "\x13GetWheelDrawSummary\x12-.hyapp.activity.v1.GetWheelDrawSummaryRequest\x1a..hyapp.activity.v1.GetWheelDrawSummaryResponseB.Z,hyapp.local/api/proto/activity/v1;activityv1b\x06proto3" var ( file_proto_activity_v1_activity_proto_rawDescOnce sync.Once - file_proto_activity_v1_activity_proto_rawDescData = file_proto_activity_v1_activity_proto_rawDesc + file_proto_activity_v1_activity_proto_rawDescData []byte ) func file_proto_activity_v1_activity_proto_rawDescGZIP() []byte { file_proto_activity_v1_activity_proto_rawDescOnce.Do(func() { - file_proto_activity_v1_activity_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_activity_v1_activity_proto_rawDescData) + file_proto_activity_v1_activity_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_activity_v1_activity_proto_rawDesc), len(file_proto_activity_v1_activity_proto_rawDesc))) }) return file_proto_activity_v1_activity_proto_rawDescData } -var file_proto_activity_v1_activity_proto_msgTypes = make([]protoimpl.MessageInfo, 278) +var file_proto_activity_v1_activity_proto_msgTypes = make([]protoimpl.MessageInfo, 332) var file_proto_activity_v1_activity_proto_goTypes = []any{ (*RequestMeta)(nil), // 0: hyapp.activity.v1.RequestMeta (*PingActivityRequest)(nil), // 1: hyapp.activity.v1.PingActivityRequest @@ -27217,7 +29071,61 @@ var file_proto_activity_v1_activity_proto_goTypes = []any{ (*GetAgencyOpeningStatusResponse)(nil), // 275: hyapp.activity.v1.GetAgencyOpeningStatusResponse (*ApplyAgencyOpeningRequest)(nil), // 276: hyapp.activity.v1.ApplyAgencyOpeningRequest (*ApplyAgencyOpeningResponse)(nil), // 277: hyapp.activity.v1.ApplyAgencyOpeningResponse - (*v1.EventEnvelope)(nil), // 278: hyapp.events.room.v1.EventEnvelope + (*ActivityTemplateLocale)(nil), // 278: hyapp.activity.v1.ActivityTemplateLocale + (*ActivityTemplateGift)(nil), // 279: hyapp.activity.v1.ActivityTemplateGift + (*ActivityTemplateRewardItem)(nil), // 280: hyapp.activity.v1.ActivityTemplateRewardItem + (*ActivityTemplateTask)(nil), // 281: hyapp.activity.v1.ActivityTemplateTask + (*ActivityTemplateRankReward)(nil), // 282: hyapp.activity.v1.ActivityTemplateRankReward + (*ActivityTemplateAsset)(nil), // 283: hyapp.activity.v1.ActivityTemplateAsset + (*ActivityTemplate)(nil), // 284: hyapp.activity.v1.ActivityTemplate + (*ActivityTemplateSummary)(nil), // 285: hyapp.activity.v1.ActivityTemplateSummary + (*ListActivityTemplatesRequest)(nil), // 286: hyapp.activity.v1.ListActivityTemplatesRequest + (*ListActivityTemplatesResponse)(nil), // 287: hyapp.activity.v1.ListActivityTemplatesResponse + (*CreateActivityTemplateRequest)(nil), // 288: hyapp.activity.v1.CreateActivityTemplateRequest + (*CreateActivityTemplateResponse)(nil), // 289: hyapp.activity.v1.CreateActivityTemplateResponse + (*GetActivityTemplateRequest)(nil), // 290: hyapp.activity.v1.GetActivityTemplateRequest + (*GetActivityTemplateResponse)(nil), // 291: hyapp.activity.v1.GetActivityTemplateResponse + (*UpdateActivityTemplateRequest)(nil), // 292: hyapp.activity.v1.UpdateActivityTemplateRequest + (*UpdateActivityTemplateResponse)(nil), // 293: hyapp.activity.v1.UpdateActivityTemplateResponse + (*SetActivityTemplateStatusRequest)(nil), // 294: hyapp.activity.v1.SetActivityTemplateStatusRequest + (*SetActivityTemplateStatusResponse)(nil), // 295: hyapp.activity.v1.SetActivityTemplateStatusResponse + (*DeleteActivityTemplateRequest)(nil), // 296: hyapp.activity.v1.DeleteActivityTemplateRequest + (*DeleteActivityTemplateResponse)(nil), // 297: hyapp.activity.v1.DeleteActivityTemplateResponse + (*ActivityTemplateVersion)(nil), // 298: hyapp.activity.v1.ActivityTemplateVersion + (*ListActivityTemplateVersionsRequest)(nil), // 299: hyapp.activity.v1.ListActivityTemplateVersionsRequest + (*ListActivityTemplateVersionsResponse)(nil), // 300: hyapp.activity.v1.ListActivityTemplateVersionsResponse + (*CloneActivityTemplateRequest)(nil), // 301: hyapp.activity.v1.CloneActivityTemplateRequest + (*CloneActivityTemplateResponse)(nil), // 302: hyapp.activity.v1.CloneActivityTemplateResponse + (*ActivityTemplateValidationIssue)(nil), // 303: hyapp.activity.v1.ActivityTemplateValidationIssue + (*ValidateActivityTemplateRequest)(nil), // 304: hyapp.activity.v1.ValidateActivityTemplateRequest + (*ValidateActivityTemplateResponse)(nil), // 305: hyapp.activity.v1.ValidateActivityTemplateResponse + (*ActivityTemplateRuntime)(nil), // 306: hyapp.activity.v1.ActivityTemplateRuntime + (*ActivityTemplateRuntimeTask)(nil), // 307: hyapp.activity.v1.ActivityTemplateRuntimeTask + (*ActivityTemplateTaskClaim)(nil), // 308: hyapp.activity.v1.ActivityTemplateTaskClaim + (*ActivityTemplateLeaderboardEntry)(nil), // 309: hyapp.activity.v1.ActivityTemplateLeaderboardEntry + (*GetCurrentActivityTemplateRequest)(nil), // 310: hyapp.activity.v1.GetCurrentActivityTemplateRequest + (*GetCurrentActivityTemplateResponse)(nil), // 311: hyapp.activity.v1.GetCurrentActivityTemplateResponse + (*VisitActivityTemplateRequest)(nil), // 312: hyapp.activity.v1.VisitActivityTemplateRequest + (*VisitActivityTemplateResponse)(nil), // 313: hyapp.activity.v1.VisitActivityTemplateResponse + (*ListActivityTemplateTasksRequest)(nil), // 314: hyapp.activity.v1.ListActivityTemplateTasksRequest + (*ListActivityTemplateTasksResponse)(nil), // 315: hyapp.activity.v1.ListActivityTemplateTasksResponse + (*ClaimActivityTemplateTaskRewardRequest)(nil), // 316: hyapp.activity.v1.ClaimActivityTemplateTaskRewardRequest + (*ClaimActivityTemplateTaskRewardResponse)(nil), // 317: hyapp.activity.v1.ClaimActivityTemplateTaskRewardResponse + (*ListActivityTemplateLeaderboardRequest)(nil), // 318: hyapp.activity.v1.ListActivityTemplateLeaderboardRequest + (*ListActivityTemplateLeaderboardResponse)(nil), // 319: hyapp.activity.v1.ListActivityTemplateLeaderboardResponse + (*ActivityTemplateRankPeriod)(nil), // 320: hyapp.activity.v1.ActivityTemplateRankPeriod + (*ActivityTemplateRewardJob)(nil), // 321: hyapp.activity.v1.ActivityTemplateRewardJob + (*AdminListActivityTemplateLeaderboardRequest)(nil), // 322: hyapp.activity.v1.AdminListActivityTemplateLeaderboardRequest + (*AdminListActivityTemplateLeaderboardResponse)(nil), // 323: hyapp.activity.v1.AdminListActivityTemplateLeaderboardResponse + (*ListActivityTemplateRewardJobsRequest)(nil), // 324: hyapp.activity.v1.ListActivityTemplateRewardJobsRequest + (*ListActivityTemplateRewardJobsResponse)(nil), // 325: hyapp.activity.v1.ListActivityTemplateRewardJobsResponse + (*RetryActivityTemplateRewardJobRequest)(nil), // 326: hyapp.activity.v1.RetryActivityTemplateRewardJobRequest + (*RetryActivityTemplateRewardJobResponse)(nil), // 327: hyapp.activity.v1.RetryActivityTemplateRewardJobResponse + (*ListActivityTemplateTaskClaimsRequest)(nil), // 328: hyapp.activity.v1.ListActivityTemplateTaskClaimsRequest + (*ListActivityTemplateTaskClaimsResponse)(nil), // 329: hyapp.activity.v1.ListActivityTemplateTaskClaimsResponse + (*RetryActivityTemplateTaskClaimRequest)(nil), // 330: hyapp.activity.v1.RetryActivityTemplateTaskClaimRequest + (*RetryActivityTemplateTaskClaimResponse)(nil), // 331: hyapp.activity.v1.RetryActivityTemplateTaskClaimResponse + (*v1.EventEnvelope)(nil), // 332: hyapp.events.room.v1.EventEnvelope } var file_proto_activity_v1_activity_proto_depIdxs = []int32{ 0, // 0: hyapp.activity.v1.PingActivityRequest.meta:type_name -> hyapp.activity.v1.RequestMeta @@ -27250,7 +29158,7 @@ var file_proto_activity_v1_activity_proto_depIdxs = []int32{ 0, // 27: hyapp.activity.v1.PublishGlobalBroadcastRequest.meta:type_name -> hyapp.activity.v1.RequestMeta 0, // 28: hyapp.activity.v1.RemoveRegionBroadcastMemberRequest.meta:type_name -> hyapp.activity.v1.RequestMeta 0, // 29: hyapp.activity.v1.ConsumeRoomEventRequest.meta:type_name -> hyapp.activity.v1.RequestMeta - 278, // 30: hyapp.activity.v1.ConsumeRoomEventRequest.envelope:type_name -> hyapp.events.room.v1.EventEnvelope + 332, // 30: hyapp.activity.v1.ConsumeRoomEventRequest.envelope:type_name -> hyapp.events.room.v1.EventEnvelope 0, // 31: hyapp.activity.v1.ListTaskDefinitionsRequest.meta:type_name -> hyapp.activity.v1.RequestMeta 51, // 32: hyapp.activity.v1.ListTaskDefinitionsResponse.tasks:type_name -> hyapp.activity.v1.TaskDefinition 0, // 33: hyapp.activity.v1.UpsertTaskDefinitionRequest.meta:type_name -> hyapp.activity.v1.RequestMeta @@ -27473,243 +29381,341 @@ var file_proto_activity_v1_activity_proto_depIdxs = []int32{ 261, // 250: hyapp.activity.v1.GetAgencyOpeningStatusResponse.agency:type_name -> hyapp.activity.v1.AgencyOpeningAgencySnapshot 0, // 251: hyapp.activity.v1.ApplyAgencyOpeningRequest.meta:type_name -> hyapp.activity.v1.RequestMeta 260, // 252: hyapp.activity.v1.ApplyAgencyOpeningResponse.application:type_name -> hyapp.activity.v1.AgencyOpeningApplication - 1, // 253: hyapp.activity.v1.ActivityService.PingActivity:input_type -> hyapp.activity.v1.PingActivityRequest - 3, // 254: hyapp.activity.v1.ActivityService.GetActivityStatus:input_type -> hyapp.activity.v1.GetActivityStatusRequest - 6, // 255: hyapp.activity.v1.MessageInboxService.ListMessageTabs:input_type -> hyapp.activity.v1.ListMessageTabsRequest - 9, // 256: hyapp.activity.v1.MessageInboxService.ListInboxMessages:input_type -> hyapp.activity.v1.ListInboxMessagesRequest - 11, // 257: hyapp.activity.v1.MessageInboxService.MarkInboxMessageRead:input_type -> hyapp.activity.v1.MarkInboxMessageReadRequest - 13, // 258: hyapp.activity.v1.MessageInboxService.MarkInboxSectionRead:input_type -> hyapp.activity.v1.MarkInboxSectionReadRequest - 15, // 259: hyapp.activity.v1.MessageInboxService.DeleteInboxMessage:input_type -> hyapp.activity.v1.DeleteInboxMessageRequest - 17, // 260: hyapp.activity.v1.MessageInboxService.CreateInboxMessage:input_type -> hyapp.activity.v1.CreateInboxMessageRequest - 19, // 261: hyapp.activity.v1.MessageInboxService.CreateFanoutJob:input_type -> hyapp.activity.v1.CreateFanoutJobRequest - 22, // 262: hyapp.activity.v1.MessageActionConfirmService.AcceptActionConfirm:input_type -> hyapp.activity.v1.AcceptActionConfirmRequest - 24, // 263: hyapp.activity.v1.MessageActionConfirmService.RejectActionConfirm:input_type -> hyapp.activity.v1.RejectActionConfirmRequest - 26, // 264: hyapp.activity.v1.MessageActionConfirmService.BatchGetActionConfirmStatus:input_type -> hyapp.activity.v1.BatchGetActionConfirmStatusRequest - 28, // 265: hyapp.activity.v1.MessageActionConfirmService.ListConversationActionConfirms:input_type -> hyapp.activity.v1.ListConversationActionConfirmsRequest - 30, // 266: hyapp.activity.v1.ActivityCronService.ProcessMessageFanoutBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 267: hyapp.activity.v1.ActivityCronService.ProcessLevelRewardBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 268: hyapp.activity.v1.ActivityCronService.ProcessTemporaryLevelBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 269: hyapp.activity.v1.ActivityCronService.ProcessAchievementRewardBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 270: hyapp.activity.v1.ActivityCronService.ProcessRoomTurnoverRewardSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 271: hyapp.activity.v1.ActivityCronService.ProcessWeeklyStarSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 272: hyapp.activity.v1.ActivityCronService.ProcessCPWeeklyRankSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 30, // 273: hyapp.activity.v1.ActivityCronService.ProcessAgencyOpeningSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 34, // 274: hyapp.activity.v1.TaskService.ListUserTasks:input_type -> hyapp.activity.v1.ListUserTasksRequest - 36, // 275: hyapp.activity.v1.TaskService.ClaimTaskReward:input_type -> hyapp.activity.v1.ClaimTaskRewardRequest - 38, // 276: hyapp.activity.v1.TaskService.ConsumeTaskEvent:input_type -> hyapp.activity.v1.ConsumeTaskEventRequest - 156, // 277: hyapp.activity.v1.GrowthLevelService.GetMyLevelOverview:input_type -> hyapp.activity.v1.GetMyLevelOverviewRequest - 158, // 278: hyapp.activity.v1.GrowthLevelService.GetLevelTrack:input_type -> hyapp.activity.v1.GetLevelTrackRequest - 162, // 279: hyapp.activity.v1.GrowthLevelService.BatchGetUserLevelDisplayProfiles:input_type -> hyapp.activity.v1.BatchGetUserLevelDisplayProfilesRequest - 165, // 280: hyapp.activity.v1.GrowthLevelService.ListLevelRewards:input_type -> hyapp.activity.v1.ListLevelRewardsRequest - 167, // 281: hyapp.activity.v1.GrowthLevelService.ConsumeLevelEvent:input_type -> hyapp.activity.v1.ConsumeLevelEventRequest - 169, // 282: hyapp.activity.v1.GrowthLevelService.SetUserLevel:input_type -> hyapp.activity.v1.SetUserLevelRequest - 179, // 283: hyapp.activity.v1.GrowthLevelService.IssueRegistrationLevelBadges:input_type -> hyapp.activity.v1.IssueRegistrationLevelBadgesRequest - 194, // 284: hyapp.activity.v1.AchievementService.ListAchievements:input_type -> hyapp.activity.v1.ListAchievementsRequest - 196, // 285: hyapp.activity.v1.AchievementService.ConsumeAchievementEvent:input_type -> hyapp.activity.v1.ConsumeAchievementEventRequest - 199, // 286: hyapp.activity.v1.AchievementService.ListMyBadges:input_type -> hyapp.activity.v1.ListMyBadgesRequest - 201, // 287: hyapp.activity.v1.AchievementService.SetBadgeDisplay:input_type -> hyapp.activity.v1.SetBadgeDisplayRequest - 212, // 288: hyapp.activity.v1.WheelService.ExecuteWheelDraw:input_type -> hyapp.activity.v1.ExecuteWheelDrawRequest - 128, // 289: hyapp.activity.v1.RoomTurnoverRewardService.GetRoomTurnoverRewardStatus:input_type -> hyapp.activity.v1.GetRoomTurnoverRewardStatusRequest - 240, // 290: hyapp.activity.v1.WeeklyStarService.GetWeeklyStarCurrent:input_type -> hyapp.activity.v1.GetWeeklyStarCurrentRequest - 236, // 291: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarLeaderboard:input_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardRequest - 242, // 292: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarHistory:input_type -> hyapp.activity.v1.ListWeeklyStarHistoryRequest - 250, // 293: hyapp.activity.v1.CPWeeklyRankService.GetCPWeeklyRankStatus:input_type -> hyapp.activity.v1.GetCPWeeklyRankStatusRequest - 274, // 294: hyapp.activity.v1.AgencyOpeningService.GetAgencyOpeningStatus:input_type -> hyapp.activity.v1.GetAgencyOpeningStatusRequest - 276, // 295: hyapp.activity.v1.AgencyOpeningService.ApplyAgencyOpening:input_type -> hyapp.activity.v1.ApplyAgencyOpeningRequest - 270, // 296: hyapp.activity.v1.AgencyOpeningService.ListAgencyOpeningLeaderboard:input_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsRequest - 41, // 297: hyapp.activity.v1.BroadcastService.EnsureBroadcastGroups:input_type -> hyapp.activity.v1.EnsureBroadcastGroupsRequest - 43, // 298: hyapp.activity.v1.BroadcastService.PublishRegionBroadcast:input_type -> hyapp.activity.v1.PublishRegionBroadcastRequest - 44, // 299: hyapp.activity.v1.BroadcastService.PublishGlobalBroadcast:input_type -> hyapp.activity.v1.PublishGlobalBroadcastRequest - 46, // 300: hyapp.activity.v1.BroadcastService.RemoveRegionBroadcastMember:input_type -> hyapp.activity.v1.RemoveRegionBroadcastMemberRequest - 30, // 301: hyapp.activity.v1.BroadcastService.ProcessBroadcastOutboxBatch:input_type -> hyapp.activity.v1.CronBatchRequest - 49, // 302: hyapp.activity.v1.RoomEventConsumerService.ConsumeRoomEvent:input_type -> hyapp.activity.v1.ConsumeRoomEventRequest - 52, // 303: hyapp.activity.v1.AdminTaskService.ListTaskDefinitions:input_type -> hyapp.activity.v1.ListTaskDefinitionsRequest - 54, // 304: hyapp.activity.v1.AdminTaskService.UpsertTaskDefinition:input_type -> hyapp.activity.v1.UpsertTaskDefinitionRequest - 56, // 305: hyapp.activity.v1.AdminTaskService.SetTaskDefinitionStatus:input_type -> hyapp.activity.v1.SetTaskDefinitionStatusRequest - 58, // 306: hyapp.activity.v1.AdminTaskService.PublishTaskRewardPolicy:input_type -> hyapp.activity.v1.PublishTaskRewardPolicyRequest - 63, // 307: hyapp.activity.v1.RegistrationRewardService.GetRegistrationRewardEligibility:input_type -> hyapp.activity.v1.GetRegistrationRewardEligibilityRequest - 65, // 308: hyapp.activity.v1.RegistrationRewardService.IssueRegistrationReward:input_type -> hyapp.activity.v1.IssueRegistrationRewardRequest - 67, // 309: hyapp.activity.v1.AdminRegistrationRewardService.GetRegistrationRewardConfig:input_type -> hyapp.activity.v1.GetRegistrationRewardConfigRequest - 69, // 310: hyapp.activity.v1.AdminRegistrationRewardService.UpdateRegistrationRewardConfig:input_type -> hyapp.activity.v1.UpdateRegistrationRewardConfigRequest - 71, // 311: hyapp.activity.v1.AdminRegistrationRewardService.ListRegistrationRewardClaims:input_type -> hyapp.activity.v1.ListRegistrationRewardClaimsRequest - 77, // 312: hyapp.activity.v1.FirstRechargeRewardService.GetFirstRechargeRewardStatus:input_type -> hyapp.activity.v1.GetFirstRechargeRewardStatusRequest - 79, // 313: hyapp.activity.v1.FirstRechargeRewardService.ConsumeFirstRechargeReward:input_type -> hyapp.activity.v1.ConsumeFirstRechargeRewardRequest - 81, // 314: hyapp.activity.v1.AdminFirstRechargeRewardService.GetFirstRechargeRewardConfig:input_type -> hyapp.activity.v1.GetFirstRechargeRewardConfigRequest - 83, // 315: hyapp.activity.v1.AdminFirstRechargeRewardService.UpdateFirstRechargeRewardConfig:input_type -> hyapp.activity.v1.UpdateFirstRechargeRewardConfigRequest - 85, // 316: hyapp.activity.v1.AdminFirstRechargeRewardService.ListFirstRechargeRewardClaims:input_type -> hyapp.activity.v1.ListFirstRechargeRewardClaimsRequest - 92, // 317: hyapp.activity.v1.CumulativeRechargeRewardService.GetCumulativeRechargeRewardStatus:input_type -> hyapp.activity.v1.GetCumulativeRechargeRewardStatusRequest - 94, // 318: hyapp.activity.v1.CumulativeRechargeRewardService.ConsumeCumulativeRechargeReward:input_type -> hyapp.activity.v1.ConsumeCumulativeRechargeRewardRequest - 107, // 319: hyapp.activity.v1.InviteActivityRewardService.GetInviteActivityRewardStatus:input_type -> hyapp.activity.v1.GetInviteActivityRewardStatusRequest - 109, // 320: hyapp.activity.v1.InviteActivityRewardService.ClaimInviteActivityReward:input_type -> hyapp.activity.v1.ClaimInviteActivityRewardRequest - 112, // 321: hyapp.activity.v1.InviteActivityRewardService.ListInviteActivityLeaderboard:input_type -> hyapp.activity.v1.ListInviteActivityLeaderboardRequest - 96, // 322: hyapp.activity.v1.AdminCumulativeRechargeRewardService.GetCumulativeRechargeRewardConfig:input_type -> hyapp.activity.v1.GetCumulativeRechargeRewardConfigRequest - 98, // 323: hyapp.activity.v1.AdminCumulativeRechargeRewardService.UpdateCumulativeRechargeRewardConfig:input_type -> hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigRequest - 100, // 324: hyapp.activity.v1.AdminCumulativeRechargeRewardService.ListCumulativeRechargeRewardGrants:input_type -> hyapp.activity.v1.ListCumulativeRechargeRewardGrantsRequest - 114, // 325: hyapp.activity.v1.AdminInviteActivityRewardService.GetInviteActivityRewardConfig:input_type -> hyapp.activity.v1.GetInviteActivityRewardConfigRequest - 116, // 326: hyapp.activity.v1.AdminInviteActivityRewardService.UpdateInviteActivityRewardConfig:input_type -> hyapp.activity.v1.UpdateInviteActivityRewardConfigRequest - 118, // 327: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardClaims:input_type -> hyapp.activity.v1.ListInviteActivityRewardClaimsRequest - 122, // 328: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardSummaries:input_type -> hyapp.activity.v1.ListInviteActivityRewardSummariesRequest - 130, // 329: hyapp.activity.v1.AdminRoomTurnoverRewardService.GetRoomTurnoverRewardConfig:input_type -> hyapp.activity.v1.GetRoomTurnoverRewardConfigRequest - 132, // 330: hyapp.activity.v1.AdminRoomTurnoverRewardService.UpdateRoomTurnoverRewardConfig:input_type -> hyapp.activity.v1.UpdateRoomTurnoverRewardConfigRequest - 134, // 331: hyapp.activity.v1.AdminRoomTurnoverRewardService.ListRoomTurnoverRewardSettlements:input_type -> hyapp.activity.v1.ListRoomTurnoverRewardSettlementsRequest - 136, // 332: hyapp.activity.v1.AdminRoomTurnoverRewardService.RetryRoomTurnoverRewardSettlement:input_type -> hyapp.activity.v1.RetryRoomTurnoverRewardSettlementRequest - 228, // 333: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarCycles:input_type -> hyapp.activity.v1.ListWeeklyStarCyclesRequest - 232, // 334: hyapp.activity.v1.AdminWeeklyStarService.CreateWeeklyStarCycle:input_type -> hyapp.activity.v1.UpsertWeeklyStarCycleRequest - 230, // 335: hyapp.activity.v1.AdminWeeklyStarService.GetWeeklyStarCycle:input_type -> hyapp.activity.v1.GetWeeklyStarCycleRequest - 232, // 336: hyapp.activity.v1.AdminWeeklyStarService.UpdateWeeklyStarCycle:input_type -> hyapp.activity.v1.UpsertWeeklyStarCycleRequest - 234, // 337: hyapp.activity.v1.AdminWeeklyStarService.SetWeeklyStarCycleStatus:input_type -> hyapp.activity.v1.SetWeeklyStarCycleStatusRequest - 236, // 338: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarLeaderboard:input_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardRequest - 238, // 339: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarSettlements:input_type -> hyapp.activity.v1.ListWeeklyStarSettlementsRequest - 252, // 340: hyapp.activity.v1.AdminCPWeeklyRankService.GetCPWeeklyRankConfig:input_type -> hyapp.activity.v1.GetCPWeeklyRankConfigRequest - 254, // 341: hyapp.activity.v1.AdminCPWeeklyRankService.UpdateCPWeeklyRankConfig:input_type -> hyapp.activity.v1.UpdateCPWeeklyRankConfigRequest - 256, // 342: hyapp.activity.v1.AdminCPWeeklyRankService.ListCPWeeklyRankSettlements:input_type -> hyapp.activity.v1.ListCPWeeklyRankSettlementsRequest - 262, // 343: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningCycles:input_type -> hyapp.activity.v1.ListAgencyOpeningCyclesRequest - 266, // 344: hyapp.activity.v1.AdminAgencyOpeningService.CreateAgencyOpeningCycle:input_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleRequest - 264, // 345: hyapp.activity.v1.AdminAgencyOpeningService.GetAgencyOpeningCycle:input_type -> hyapp.activity.v1.GetAgencyOpeningCycleRequest - 266, // 346: hyapp.activity.v1.AdminAgencyOpeningService.UpdateAgencyOpeningCycle:input_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleRequest - 268, // 347: hyapp.activity.v1.AdminAgencyOpeningService.SetAgencyOpeningCycleStatus:input_type -> hyapp.activity.v1.SetAgencyOpeningCycleStatusRequest - 270, // 348: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningApplications:input_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsRequest - 272, // 349: hyapp.activity.v1.AdminAgencyOpeningService.ReviewAgencyOpeningApplication:input_type -> hyapp.activity.v1.ReviewAgencyOpeningApplicationRequest - 141, // 350: hyapp.activity.v1.SevenDayCheckInService.GetSevenDayCheckInStatus:input_type -> hyapp.activity.v1.GetSevenDayCheckInStatusRequest - 143, // 351: hyapp.activity.v1.SevenDayCheckInService.SignSevenDayCheckIn:input_type -> hyapp.activity.v1.SignSevenDayCheckInRequest - 145, // 352: hyapp.activity.v1.AdminSevenDayCheckInService.GetSevenDayCheckInConfig:input_type -> hyapp.activity.v1.GetSevenDayCheckInConfigRequest - 147, // 353: hyapp.activity.v1.AdminSevenDayCheckInService.UpdateSevenDayCheckInConfig:input_type -> hyapp.activity.v1.UpdateSevenDayCheckInConfigRequest - 150, // 354: hyapp.activity.v1.AdminSevenDayCheckInService.ListSevenDayCheckInClaims:input_type -> hyapp.activity.v1.ListSevenDayCheckInClaimsRequest - 189, // 355: hyapp.activity.v1.AdminGrowthLevelService.ListLevelConfig:input_type -> hyapp.activity.v1.ListLevelConfigRequest - 181, // 356: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTrack:input_type -> hyapp.activity.v1.UpsertLevelTrackRequest - 183, // 357: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelRule:input_type -> hyapp.activity.v1.UpsertLevelRuleRequest - 185, // 358: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTier:input_type -> hyapp.activity.v1.UpsertLevelTierRequest - 187, // 359: hyapp.activity.v1.AdminGrowthLevelService.BatchUpsertLevelConfig:input_type -> hyapp.activity.v1.BatchUpsertLevelConfigRequest - 173, // 360: hyapp.activity.v1.AdminGrowthLevelService.BatchGetUserLevelAdminProfiles:input_type -> hyapp.activity.v1.BatchGetUserLevelAdminProfilesRequest - 176, // 361: hyapp.activity.v1.AdminGrowthLevelService.AdjustTemporaryUserLevels:input_type -> hyapp.activity.v1.AdjustTemporaryUserLevelsRequest - 194, // 362: hyapp.activity.v1.AdminAchievementService.ListAchievementDefinitions:input_type -> hyapp.activity.v1.ListAchievementsRequest - 203, // 363: hyapp.activity.v1.AdminAchievementService.UpsertAchievementDefinition:input_type -> hyapp.activity.v1.UpsertAchievementDefinitionRequest - 205, // 364: hyapp.activity.v1.AdminAchievementService.DeleteAchievementDefinition:input_type -> hyapp.activity.v1.DeleteAchievementDefinitionRequest - 214, // 365: hyapp.activity.v1.AdminWheelService.GetWheelConfig:input_type -> hyapp.activity.v1.GetWheelConfigRequest - 216, // 366: hyapp.activity.v1.AdminWheelService.UpsertWheelConfig:input_type -> hyapp.activity.v1.UpsertWheelConfigRequest - 218, // 367: hyapp.activity.v1.AdminWheelService.ListWheelDraws:input_type -> hyapp.activity.v1.ListWheelDrawsRequest - 221, // 368: hyapp.activity.v1.AdminWheelService.GetWheelDrawSummary:input_type -> hyapp.activity.v1.GetWheelDrawSummaryRequest - 2, // 369: hyapp.activity.v1.ActivityService.PingActivity:output_type -> hyapp.activity.v1.PingActivityResponse - 4, // 370: hyapp.activity.v1.ActivityService.GetActivityStatus:output_type -> hyapp.activity.v1.GetActivityStatusResponse - 7, // 371: hyapp.activity.v1.MessageInboxService.ListMessageTabs:output_type -> hyapp.activity.v1.ListMessageTabsResponse - 10, // 372: hyapp.activity.v1.MessageInboxService.ListInboxMessages:output_type -> hyapp.activity.v1.ListInboxMessagesResponse - 12, // 373: hyapp.activity.v1.MessageInboxService.MarkInboxMessageRead:output_type -> hyapp.activity.v1.MarkInboxMessageReadResponse - 14, // 374: hyapp.activity.v1.MessageInboxService.MarkInboxSectionRead:output_type -> hyapp.activity.v1.MarkInboxSectionReadResponse - 16, // 375: hyapp.activity.v1.MessageInboxService.DeleteInboxMessage:output_type -> hyapp.activity.v1.DeleteInboxMessageResponse - 18, // 376: hyapp.activity.v1.MessageInboxService.CreateInboxMessage:output_type -> hyapp.activity.v1.CreateInboxMessageResponse - 20, // 377: hyapp.activity.v1.MessageInboxService.CreateFanoutJob:output_type -> hyapp.activity.v1.CreateFanoutJobResponse - 23, // 378: hyapp.activity.v1.MessageActionConfirmService.AcceptActionConfirm:output_type -> hyapp.activity.v1.AcceptActionConfirmResponse - 25, // 379: hyapp.activity.v1.MessageActionConfirmService.RejectActionConfirm:output_type -> hyapp.activity.v1.RejectActionConfirmResponse - 27, // 380: hyapp.activity.v1.MessageActionConfirmService.BatchGetActionConfirmStatus:output_type -> hyapp.activity.v1.BatchGetActionConfirmStatusResponse - 29, // 381: hyapp.activity.v1.MessageActionConfirmService.ListConversationActionConfirms:output_type -> hyapp.activity.v1.ListConversationActionConfirmsResponse - 31, // 382: hyapp.activity.v1.ActivityCronService.ProcessMessageFanoutBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 383: hyapp.activity.v1.ActivityCronService.ProcessLevelRewardBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 384: hyapp.activity.v1.ActivityCronService.ProcessTemporaryLevelBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 385: hyapp.activity.v1.ActivityCronService.ProcessAchievementRewardBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 386: hyapp.activity.v1.ActivityCronService.ProcessRoomTurnoverRewardSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 387: hyapp.activity.v1.ActivityCronService.ProcessWeeklyStarSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 388: hyapp.activity.v1.ActivityCronService.ProcessCPWeeklyRankSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 31, // 389: hyapp.activity.v1.ActivityCronService.ProcessAgencyOpeningSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse - 35, // 390: hyapp.activity.v1.TaskService.ListUserTasks:output_type -> hyapp.activity.v1.ListUserTasksResponse - 37, // 391: hyapp.activity.v1.TaskService.ClaimTaskReward:output_type -> hyapp.activity.v1.ClaimTaskRewardResponse - 39, // 392: hyapp.activity.v1.TaskService.ConsumeTaskEvent:output_type -> hyapp.activity.v1.ConsumeTaskEventResponse - 157, // 393: hyapp.activity.v1.GrowthLevelService.GetMyLevelOverview:output_type -> hyapp.activity.v1.GetMyLevelOverviewResponse - 159, // 394: hyapp.activity.v1.GrowthLevelService.GetLevelTrack:output_type -> hyapp.activity.v1.GetLevelTrackResponse - 163, // 395: hyapp.activity.v1.GrowthLevelService.BatchGetUserLevelDisplayProfiles:output_type -> hyapp.activity.v1.BatchGetUserLevelDisplayProfilesResponse - 166, // 396: hyapp.activity.v1.GrowthLevelService.ListLevelRewards:output_type -> hyapp.activity.v1.ListLevelRewardsResponse - 168, // 397: hyapp.activity.v1.GrowthLevelService.ConsumeLevelEvent:output_type -> hyapp.activity.v1.ConsumeLevelEventResponse - 170, // 398: hyapp.activity.v1.GrowthLevelService.SetUserLevel:output_type -> hyapp.activity.v1.SetUserLevelResponse - 180, // 399: hyapp.activity.v1.GrowthLevelService.IssueRegistrationLevelBadges:output_type -> hyapp.activity.v1.IssueRegistrationLevelBadgesResponse - 195, // 400: hyapp.activity.v1.AchievementService.ListAchievements:output_type -> hyapp.activity.v1.ListAchievementsResponse - 197, // 401: hyapp.activity.v1.AchievementService.ConsumeAchievementEvent:output_type -> hyapp.activity.v1.ConsumeAchievementEventResponse - 200, // 402: hyapp.activity.v1.AchievementService.ListMyBadges:output_type -> hyapp.activity.v1.ListMyBadgesResponse - 202, // 403: hyapp.activity.v1.AchievementService.SetBadgeDisplay:output_type -> hyapp.activity.v1.SetBadgeDisplayResponse - 213, // 404: hyapp.activity.v1.WheelService.ExecuteWheelDraw:output_type -> hyapp.activity.v1.ExecuteWheelDrawResponse - 129, // 405: hyapp.activity.v1.RoomTurnoverRewardService.GetRoomTurnoverRewardStatus:output_type -> hyapp.activity.v1.GetRoomTurnoverRewardStatusResponse - 241, // 406: hyapp.activity.v1.WeeklyStarService.GetWeeklyStarCurrent:output_type -> hyapp.activity.v1.GetWeeklyStarCurrentResponse - 237, // 407: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarLeaderboard:output_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardResponse - 244, // 408: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarHistory:output_type -> hyapp.activity.v1.ListWeeklyStarHistoryResponse - 251, // 409: hyapp.activity.v1.CPWeeklyRankService.GetCPWeeklyRankStatus:output_type -> hyapp.activity.v1.GetCPWeeklyRankStatusResponse - 275, // 410: hyapp.activity.v1.AgencyOpeningService.GetAgencyOpeningStatus:output_type -> hyapp.activity.v1.GetAgencyOpeningStatusResponse - 277, // 411: hyapp.activity.v1.AgencyOpeningService.ApplyAgencyOpening:output_type -> hyapp.activity.v1.ApplyAgencyOpeningResponse - 271, // 412: hyapp.activity.v1.AgencyOpeningService.ListAgencyOpeningLeaderboard:output_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsResponse - 42, // 413: hyapp.activity.v1.BroadcastService.EnsureBroadcastGroups:output_type -> hyapp.activity.v1.EnsureBroadcastGroupsResponse - 45, // 414: hyapp.activity.v1.BroadcastService.PublishRegionBroadcast:output_type -> hyapp.activity.v1.PublishBroadcastResponse - 45, // 415: hyapp.activity.v1.BroadcastService.PublishGlobalBroadcast:output_type -> hyapp.activity.v1.PublishBroadcastResponse - 47, // 416: hyapp.activity.v1.BroadcastService.RemoveRegionBroadcastMember:output_type -> hyapp.activity.v1.RemoveRegionBroadcastMemberResponse - 48, // 417: hyapp.activity.v1.BroadcastService.ProcessBroadcastOutboxBatch:output_type -> hyapp.activity.v1.ProcessBroadcastOutboxBatchResponse - 50, // 418: hyapp.activity.v1.RoomEventConsumerService.ConsumeRoomEvent:output_type -> hyapp.activity.v1.ConsumeRoomEventResponse - 53, // 419: hyapp.activity.v1.AdminTaskService.ListTaskDefinitions:output_type -> hyapp.activity.v1.ListTaskDefinitionsResponse - 55, // 420: hyapp.activity.v1.AdminTaskService.UpsertTaskDefinition:output_type -> hyapp.activity.v1.UpsertTaskDefinitionResponse - 57, // 421: hyapp.activity.v1.AdminTaskService.SetTaskDefinitionStatus:output_type -> hyapp.activity.v1.SetTaskDefinitionStatusResponse - 59, // 422: hyapp.activity.v1.AdminTaskService.PublishTaskRewardPolicy:output_type -> hyapp.activity.v1.PublishTaskRewardPolicyResponse - 64, // 423: hyapp.activity.v1.RegistrationRewardService.GetRegistrationRewardEligibility:output_type -> hyapp.activity.v1.GetRegistrationRewardEligibilityResponse - 66, // 424: hyapp.activity.v1.RegistrationRewardService.IssueRegistrationReward:output_type -> hyapp.activity.v1.IssueRegistrationRewardResponse - 68, // 425: hyapp.activity.v1.AdminRegistrationRewardService.GetRegistrationRewardConfig:output_type -> hyapp.activity.v1.GetRegistrationRewardConfigResponse - 70, // 426: hyapp.activity.v1.AdminRegistrationRewardService.UpdateRegistrationRewardConfig:output_type -> hyapp.activity.v1.UpdateRegistrationRewardConfigResponse - 72, // 427: hyapp.activity.v1.AdminRegistrationRewardService.ListRegistrationRewardClaims:output_type -> hyapp.activity.v1.ListRegistrationRewardClaimsResponse - 78, // 428: hyapp.activity.v1.FirstRechargeRewardService.GetFirstRechargeRewardStatus:output_type -> hyapp.activity.v1.GetFirstRechargeRewardStatusResponse - 80, // 429: hyapp.activity.v1.FirstRechargeRewardService.ConsumeFirstRechargeReward:output_type -> hyapp.activity.v1.ConsumeFirstRechargeRewardResponse - 82, // 430: hyapp.activity.v1.AdminFirstRechargeRewardService.GetFirstRechargeRewardConfig:output_type -> hyapp.activity.v1.GetFirstRechargeRewardConfigResponse - 84, // 431: hyapp.activity.v1.AdminFirstRechargeRewardService.UpdateFirstRechargeRewardConfig:output_type -> hyapp.activity.v1.UpdateFirstRechargeRewardConfigResponse - 86, // 432: hyapp.activity.v1.AdminFirstRechargeRewardService.ListFirstRechargeRewardClaims:output_type -> hyapp.activity.v1.ListFirstRechargeRewardClaimsResponse - 93, // 433: hyapp.activity.v1.CumulativeRechargeRewardService.GetCumulativeRechargeRewardStatus:output_type -> hyapp.activity.v1.GetCumulativeRechargeRewardStatusResponse - 95, // 434: hyapp.activity.v1.CumulativeRechargeRewardService.ConsumeCumulativeRechargeReward:output_type -> hyapp.activity.v1.ConsumeCumulativeRechargeRewardResponse - 108, // 435: hyapp.activity.v1.InviteActivityRewardService.GetInviteActivityRewardStatus:output_type -> hyapp.activity.v1.GetInviteActivityRewardStatusResponse - 110, // 436: hyapp.activity.v1.InviteActivityRewardService.ClaimInviteActivityReward:output_type -> hyapp.activity.v1.ClaimInviteActivityRewardResponse - 113, // 437: hyapp.activity.v1.InviteActivityRewardService.ListInviteActivityLeaderboard:output_type -> hyapp.activity.v1.ListInviteActivityLeaderboardResponse - 97, // 438: hyapp.activity.v1.AdminCumulativeRechargeRewardService.GetCumulativeRechargeRewardConfig:output_type -> hyapp.activity.v1.GetCumulativeRechargeRewardConfigResponse - 99, // 439: hyapp.activity.v1.AdminCumulativeRechargeRewardService.UpdateCumulativeRechargeRewardConfig:output_type -> hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigResponse - 101, // 440: hyapp.activity.v1.AdminCumulativeRechargeRewardService.ListCumulativeRechargeRewardGrants:output_type -> hyapp.activity.v1.ListCumulativeRechargeRewardGrantsResponse - 115, // 441: hyapp.activity.v1.AdminInviteActivityRewardService.GetInviteActivityRewardConfig:output_type -> hyapp.activity.v1.GetInviteActivityRewardConfigResponse - 117, // 442: hyapp.activity.v1.AdminInviteActivityRewardService.UpdateInviteActivityRewardConfig:output_type -> hyapp.activity.v1.UpdateInviteActivityRewardConfigResponse - 119, // 443: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardClaims:output_type -> hyapp.activity.v1.ListInviteActivityRewardClaimsResponse - 123, // 444: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardSummaries:output_type -> hyapp.activity.v1.ListInviteActivityRewardSummariesResponse - 131, // 445: hyapp.activity.v1.AdminRoomTurnoverRewardService.GetRoomTurnoverRewardConfig:output_type -> hyapp.activity.v1.GetRoomTurnoverRewardConfigResponse - 133, // 446: hyapp.activity.v1.AdminRoomTurnoverRewardService.UpdateRoomTurnoverRewardConfig:output_type -> hyapp.activity.v1.UpdateRoomTurnoverRewardConfigResponse - 135, // 447: hyapp.activity.v1.AdminRoomTurnoverRewardService.ListRoomTurnoverRewardSettlements:output_type -> hyapp.activity.v1.ListRoomTurnoverRewardSettlementsResponse - 137, // 448: hyapp.activity.v1.AdminRoomTurnoverRewardService.RetryRoomTurnoverRewardSettlement:output_type -> hyapp.activity.v1.RetryRoomTurnoverRewardSettlementResponse - 229, // 449: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarCycles:output_type -> hyapp.activity.v1.ListWeeklyStarCyclesResponse - 233, // 450: hyapp.activity.v1.AdminWeeklyStarService.CreateWeeklyStarCycle:output_type -> hyapp.activity.v1.UpsertWeeklyStarCycleResponse - 231, // 451: hyapp.activity.v1.AdminWeeklyStarService.GetWeeklyStarCycle:output_type -> hyapp.activity.v1.GetWeeklyStarCycleResponse - 233, // 452: hyapp.activity.v1.AdminWeeklyStarService.UpdateWeeklyStarCycle:output_type -> hyapp.activity.v1.UpsertWeeklyStarCycleResponse - 235, // 453: hyapp.activity.v1.AdminWeeklyStarService.SetWeeklyStarCycleStatus:output_type -> hyapp.activity.v1.SetWeeklyStarCycleStatusResponse - 237, // 454: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarLeaderboard:output_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardResponse - 239, // 455: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarSettlements:output_type -> hyapp.activity.v1.ListWeeklyStarSettlementsResponse - 253, // 456: hyapp.activity.v1.AdminCPWeeklyRankService.GetCPWeeklyRankConfig:output_type -> hyapp.activity.v1.GetCPWeeklyRankConfigResponse - 255, // 457: hyapp.activity.v1.AdminCPWeeklyRankService.UpdateCPWeeklyRankConfig:output_type -> hyapp.activity.v1.UpdateCPWeeklyRankConfigResponse - 257, // 458: hyapp.activity.v1.AdminCPWeeklyRankService.ListCPWeeklyRankSettlements:output_type -> hyapp.activity.v1.ListCPWeeklyRankSettlementsResponse - 263, // 459: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningCycles:output_type -> hyapp.activity.v1.ListAgencyOpeningCyclesResponse - 267, // 460: hyapp.activity.v1.AdminAgencyOpeningService.CreateAgencyOpeningCycle:output_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleResponse - 265, // 461: hyapp.activity.v1.AdminAgencyOpeningService.GetAgencyOpeningCycle:output_type -> hyapp.activity.v1.GetAgencyOpeningCycleResponse - 267, // 462: hyapp.activity.v1.AdminAgencyOpeningService.UpdateAgencyOpeningCycle:output_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleResponse - 269, // 463: hyapp.activity.v1.AdminAgencyOpeningService.SetAgencyOpeningCycleStatus:output_type -> hyapp.activity.v1.SetAgencyOpeningCycleStatusResponse - 271, // 464: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningApplications:output_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsResponse - 273, // 465: hyapp.activity.v1.AdminAgencyOpeningService.ReviewAgencyOpeningApplication:output_type -> hyapp.activity.v1.ReviewAgencyOpeningApplicationResponse - 142, // 466: hyapp.activity.v1.SevenDayCheckInService.GetSevenDayCheckInStatus:output_type -> hyapp.activity.v1.GetSevenDayCheckInStatusResponse - 144, // 467: hyapp.activity.v1.SevenDayCheckInService.SignSevenDayCheckIn:output_type -> hyapp.activity.v1.SignSevenDayCheckInResponse - 146, // 468: hyapp.activity.v1.AdminSevenDayCheckInService.GetSevenDayCheckInConfig:output_type -> hyapp.activity.v1.GetSevenDayCheckInConfigResponse - 148, // 469: hyapp.activity.v1.AdminSevenDayCheckInService.UpdateSevenDayCheckInConfig:output_type -> hyapp.activity.v1.UpdateSevenDayCheckInConfigResponse - 151, // 470: hyapp.activity.v1.AdminSevenDayCheckInService.ListSevenDayCheckInClaims:output_type -> hyapp.activity.v1.ListSevenDayCheckInClaimsResponse - 190, // 471: hyapp.activity.v1.AdminGrowthLevelService.ListLevelConfig:output_type -> hyapp.activity.v1.ListLevelConfigResponse - 182, // 472: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTrack:output_type -> hyapp.activity.v1.UpsertLevelTrackResponse - 184, // 473: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelRule:output_type -> hyapp.activity.v1.UpsertLevelRuleResponse - 186, // 474: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTier:output_type -> hyapp.activity.v1.UpsertLevelTierResponse - 188, // 475: hyapp.activity.v1.AdminGrowthLevelService.BatchUpsertLevelConfig:output_type -> hyapp.activity.v1.BatchUpsertLevelConfigResponse - 174, // 476: hyapp.activity.v1.AdminGrowthLevelService.BatchGetUserLevelAdminProfiles:output_type -> hyapp.activity.v1.BatchGetUserLevelAdminProfilesResponse - 177, // 477: hyapp.activity.v1.AdminGrowthLevelService.AdjustTemporaryUserLevels:output_type -> hyapp.activity.v1.AdjustTemporaryUserLevelsResponse - 195, // 478: hyapp.activity.v1.AdminAchievementService.ListAchievementDefinitions:output_type -> hyapp.activity.v1.ListAchievementsResponse - 204, // 479: hyapp.activity.v1.AdminAchievementService.UpsertAchievementDefinition:output_type -> hyapp.activity.v1.UpsertAchievementDefinitionResponse - 206, // 480: hyapp.activity.v1.AdminAchievementService.DeleteAchievementDefinition:output_type -> hyapp.activity.v1.DeleteAchievementDefinitionResponse - 215, // 481: hyapp.activity.v1.AdminWheelService.GetWheelConfig:output_type -> hyapp.activity.v1.GetWheelConfigResponse - 217, // 482: hyapp.activity.v1.AdminWheelService.UpsertWheelConfig:output_type -> hyapp.activity.v1.UpsertWheelConfigResponse - 219, // 483: hyapp.activity.v1.AdminWheelService.ListWheelDraws:output_type -> hyapp.activity.v1.ListWheelDrawsResponse - 222, // 484: hyapp.activity.v1.AdminWheelService.GetWheelDrawSummary:output_type -> hyapp.activity.v1.GetWheelDrawSummaryResponse - 369, // [369:485] is the sub-list for method output_type - 253, // [253:369] is the sub-list for method input_type - 253, // [253:253] is the sub-list for extension type_name - 253, // [253:253] is the sub-list for extension extendee - 0, // [0:253] is the sub-list for field type_name + 280, // 253: hyapp.activity.v1.ActivityTemplateTask.reward_items:type_name -> hyapp.activity.v1.ActivityTemplateRewardItem + 280, // 254: hyapp.activity.v1.ActivityTemplateRankReward.reward_items:type_name -> hyapp.activity.v1.ActivityTemplateRewardItem + 278, // 255: hyapp.activity.v1.ActivityTemplate.locales:type_name -> hyapp.activity.v1.ActivityTemplateLocale + 279, // 256: hyapp.activity.v1.ActivityTemplate.gifts:type_name -> hyapp.activity.v1.ActivityTemplateGift + 281, // 257: hyapp.activity.v1.ActivityTemplate.tasks:type_name -> hyapp.activity.v1.ActivityTemplateTask + 282, // 258: hyapp.activity.v1.ActivityTemplate.rank_rewards:type_name -> hyapp.activity.v1.ActivityTemplateRankReward + 283, // 259: hyapp.activity.v1.ActivityTemplate.assets:type_name -> hyapp.activity.v1.ActivityTemplateAsset + 0, // 260: hyapp.activity.v1.ListActivityTemplatesRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 285, // 261: hyapp.activity.v1.ListActivityTemplatesResponse.templates:type_name -> hyapp.activity.v1.ActivityTemplateSummary + 0, // 262: hyapp.activity.v1.CreateActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 263: hyapp.activity.v1.CreateActivityTemplateRequest.template:type_name -> hyapp.activity.v1.ActivityTemplate + 284, // 264: hyapp.activity.v1.CreateActivityTemplateResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 265: hyapp.activity.v1.GetActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 266: hyapp.activity.v1.GetActivityTemplateResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 267: hyapp.activity.v1.UpdateActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 268: hyapp.activity.v1.UpdateActivityTemplateRequest.template:type_name -> hyapp.activity.v1.ActivityTemplate + 284, // 269: hyapp.activity.v1.UpdateActivityTemplateResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 270: hyapp.activity.v1.SetActivityTemplateStatusRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 271: hyapp.activity.v1.SetActivityTemplateStatusResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 272: hyapp.activity.v1.DeleteActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 273: hyapp.activity.v1.DeleteActivityTemplateResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 284, // 274: hyapp.activity.v1.ActivityTemplateVersion.snapshot:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 275: hyapp.activity.v1.ListActivityTemplateVersionsRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 298, // 276: hyapp.activity.v1.ListActivityTemplateVersionsResponse.versions:type_name -> hyapp.activity.v1.ActivityTemplateVersion + 0, // 277: hyapp.activity.v1.CloneActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 278: hyapp.activity.v1.CloneActivityTemplateResponse.template:type_name -> hyapp.activity.v1.ActivityTemplate + 0, // 279: hyapp.activity.v1.ValidateActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 284, // 280: hyapp.activity.v1.ValidateActivityTemplateRequest.template:type_name -> hyapp.activity.v1.ActivityTemplate + 303, // 281: hyapp.activity.v1.ValidateActivityTemplateResponse.issues:type_name -> hyapp.activity.v1.ActivityTemplateValidationIssue + 284, // 282: hyapp.activity.v1.ActivityTemplateRuntime.template:type_name -> hyapp.activity.v1.ActivityTemplate + 280, // 283: hyapp.activity.v1.ActivityTemplateRuntimeTask.reward_items:type_name -> hyapp.activity.v1.ActivityTemplateRewardItem + 280, // 284: hyapp.activity.v1.ActivityTemplateTaskClaim.reward_items:type_name -> hyapp.activity.v1.ActivityTemplateRewardItem + 0, // 285: hyapp.activity.v1.GetCurrentActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 306, // 286: hyapp.activity.v1.GetCurrentActivityTemplateResponse.runtime:type_name -> hyapp.activity.v1.ActivityTemplateRuntime + 0, // 287: hyapp.activity.v1.VisitActivityTemplateRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 306, // 288: hyapp.activity.v1.VisitActivityTemplateResponse.runtime:type_name -> hyapp.activity.v1.ActivityTemplateRuntime + 307, // 289: hyapp.activity.v1.VisitActivityTemplateResponse.tasks:type_name -> hyapp.activity.v1.ActivityTemplateRuntimeTask + 0, // 290: hyapp.activity.v1.ListActivityTemplateTasksRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 306, // 291: hyapp.activity.v1.ListActivityTemplateTasksResponse.runtime:type_name -> hyapp.activity.v1.ActivityTemplateRuntime + 307, // 292: hyapp.activity.v1.ListActivityTemplateTasksResponse.tasks:type_name -> hyapp.activity.v1.ActivityTemplateRuntimeTask + 0, // 293: hyapp.activity.v1.ClaimActivityTemplateTaskRewardRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 308, // 294: hyapp.activity.v1.ClaimActivityTemplateTaskRewardResponse.claim:type_name -> hyapp.activity.v1.ActivityTemplateTaskClaim + 0, // 295: hyapp.activity.v1.ListActivityTemplateLeaderboardRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 306, // 296: hyapp.activity.v1.ListActivityTemplateLeaderboardResponse.runtime:type_name -> hyapp.activity.v1.ActivityTemplateRuntime + 309, // 297: hyapp.activity.v1.ListActivityTemplateLeaderboardResponse.entries:type_name -> hyapp.activity.v1.ActivityTemplateLeaderboardEntry + 309, // 298: hyapp.activity.v1.ListActivityTemplateLeaderboardResponse.my_entry:type_name -> hyapp.activity.v1.ActivityTemplateLeaderboardEntry + 280, // 299: hyapp.activity.v1.ActivityTemplateRewardJob.reward_items:type_name -> hyapp.activity.v1.ActivityTemplateRewardItem + 0, // 300: hyapp.activity.v1.AdminListActivityTemplateLeaderboardRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 320, // 301: hyapp.activity.v1.AdminListActivityTemplateLeaderboardResponse.period:type_name -> hyapp.activity.v1.ActivityTemplateRankPeriod + 309, // 302: hyapp.activity.v1.AdminListActivityTemplateLeaderboardResponse.entries:type_name -> hyapp.activity.v1.ActivityTemplateLeaderboardEntry + 0, // 303: hyapp.activity.v1.ListActivityTemplateRewardJobsRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 321, // 304: hyapp.activity.v1.ListActivityTemplateRewardJobsResponse.jobs:type_name -> hyapp.activity.v1.ActivityTemplateRewardJob + 0, // 305: hyapp.activity.v1.RetryActivityTemplateRewardJobRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 321, // 306: hyapp.activity.v1.RetryActivityTemplateRewardJobResponse.job:type_name -> hyapp.activity.v1.ActivityTemplateRewardJob + 0, // 307: hyapp.activity.v1.ListActivityTemplateTaskClaimsRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 308, // 308: hyapp.activity.v1.ListActivityTemplateTaskClaimsResponse.claims:type_name -> hyapp.activity.v1.ActivityTemplateTaskClaim + 0, // 309: hyapp.activity.v1.RetryActivityTemplateTaskClaimRequest.meta:type_name -> hyapp.activity.v1.RequestMeta + 308, // 310: hyapp.activity.v1.RetryActivityTemplateTaskClaimResponse.claim:type_name -> hyapp.activity.v1.ActivityTemplateTaskClaim + 1, // 311: hyapp.activity.v1.ActivityService.PingActivity:input_type -> hyapp.activity.v1.PingActivityRequest + 3, // 312: hyapp.activity.v1.ActivityService.GetActivityStatus:input_type -> hyapp.activity.v1.GetActivityStatusRequest + 6, // 313: hyapp.activity.v1.MessageInboxService.ListMessageTabs:input_type -> hyapp.activity.v1.ListMessageTabsRequest + 9, // 314: hyapp.activity.v1.MessageInboxService.ListInboxMessages:input_type -> hyapp.activity.v1.ListInboxMessagesRequest + 11, // 315: hyapp.activity.v1.MessageInboxService.MarkInboxMessageRead:input_type -> hyapp.activity.v1.MarkInboxMessageReadRequest + 13, // 316: hyapp.activity.v1.MessageInboxService.MarkInboxSectionRead:input_type -> hyapp.activity.v1.MarkInboxSectionReadRequest + 15, // 317: hyapp.activity.v1.MessageInboxService.DeleteInboxMessage:input_type -> hyapp.activity.v1.DeleteInboxMessageRequest + 17, // 318: hyapp.activity.v1.MessageInboxService.CreateInboxMessage:input_type -> hyapp.activity.v1.CreateInboxMessageRequest + 19, // 319: hyapp.activity.v1.MessageInboxService.CreateFanoutJob:input_type -> hyapp.activity.v1.CreateFanoutJobRequest + 22, // 320: hyapp.activity.v1.MessageActionConfirmService.AcceptActionConfirm:input_type -> hyapp.activity.v1.AcceptActionConfirmRequest + 24, // 321: hyapp.activity.v1.MessageActionConfirmService.RejectActionConfirm:input_type -> hyapp.activity.v1.RejectActionConfirmRequest + 26, // 322: hyapp.activity.v1.MessageActionConfirmService.BatchGetActionConfirmStatus:input_type -> hyapp.activity.v1.BatchGetActionConfirmStatusRequest + 28, // 323: hyapp.activity.v1.MessageActionConfirmService.ListConversationActionConfirms:input_type -> hyapp.activity.v1.ListConversationActionConfirmsRequest + 30, // 324: hyapp.activity.v1.ActivityCronService.ProcessMessageFanoutBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 325: hyapp.activity.v1.ActivityCronService.ProcessLevelRewardBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 326: hyapp.activity.v1.ActivityCronService.ProcessTemporaryLevelBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 327: hyapp.activity.v1.ActivityCronService.ProcessAchievementRewardBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 328: hyapp.activity.v1.ActivityCronService.ProcessRoomTurnoverRewardSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 329: hyapp.activity.v1.ActivityCronService.ProcessWeeklyStarSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 330: hyapp.activity.v1.ActivityCronService.ProcessCPWeeklyRankSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 331: hyapp.activity.v1.ActivityCronService.ProcessAgencyOpeningSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 30, // 332: hyapp.activity.v1.ActivityCronService.ProcessActivityTemplateSettlementBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 310, // 333: hyapp.activity.v1.ActivityTemplateRuntimeService.GetCurrentActivityTemplate:input_type -> hyapp.activity.v1.GetCurrentActivityTemplateRequest + 312, // 334: hyapp.activity.v1.ActivityTemplateRuntimeService.VisitActivityTemplate:input_type -> hyapp.activity.v1.VisitActivityTemplateRequest + 314, // 335: hyapp.activity.v1.ActivityTemplateRuntimeService.ListActivityTemplateTasks:input_type -> hyapp.activity.v1.ListActivityTemplateTasksRequest + 316, // 336: hyapp.activity.v1.ActivityTemplateRuntimeService.ClaimActivityTemplateTaskReward:input_type -> hyapp.activity.v1.ClaimActivityTemplateTaskRewardRequest + 318, // 337: hyapp.activity.v1.ActivityTemplateRuntimeService.ListActivityTemplateLeaderboard:input_type -> hyapp.activity.v1.ListActivityTemplateLeaderboardRequest + 34, // 338: hyapp.activity.v1.TaskService.ListUserTasks:input_type -> hyapp.activity.v1.ListUserTasksRequest + 36, // 339: hyapp.activity.v1.TaskService.ClaimTaskReward:input_type -> hyapp.activity.v1.ClaimTaskRewardRequest + 38, // 340: hyapp.activity.v1.TaskService.ConsumeTaskEvent:input_type -> hyapp.activity.v1.ConsumeTaskEventRequest + 156, // 341: hyapp.activity.v1.GrowthLevelService.GetMyLevelOverview:input_type -> hyapp.activity.v1.GetMyLevelOverviewRequest + 158, // 342: hyapp.activity.v1.GrowthLevelService.GetLevelTrack:input_type -> hyapp.activity.v1.GetLevelTrackRequest + 162, // 343: hyapp.activity.v1.GrowthLevelService.BatchGetUserLevelDisplayProfiles:input_type -> hyapp.activity.v1.BatchGetUserLevelDisplayProfilesRequest + 165, // 344: hyapp.activity.v1.GrowthLevelService.ListLevelRewards:input_type -> hyapp.activity.v1.ListLevelRewardsRequest + 167, // 345: hyapp.activity.v1.GrowthLevelService.ConsumeLevelEvent:input_type -> hyapp.activity.v1.ConsumeLevelEventRequest + 169, // 346: hyapp.activity.v1.GrowthLevelService.SetUserLevel:input_type -> hyapp.activity.v1.SetUserLevelRequest + 179, // 347: hyapp.activity.v1.GrowthLevelService.IssueRegistrationLevelBadges:input_type -> hyapp.activity.v1.IssueRegistrationLevelBadgesRequest + 194, // 348: hyapp.activity.v1.AchievementService.ListAchievements:input_type -> hyapp.activity.v1.ListAchievementsRequest + 196, // 349: hyapp.activity.v1.AchievementService.ConsumeAchievementEvent:input_type -> hyapp.activity.v1.ConsumeAchievementEventRequest + 199, // 350: hyapp.activity.v1.AchievementService.ListMyBadges:input_type -> hyapp.activity.v1.ListMyBadgesRequest + 201, // 351: hyapp.activity.v1.AchievementService.SetBadgeDisplay:input_type -> hyapp.activity.v1.SetBadgeDisplayRequest + 212, // 352: hyapp.activity.v1.WheelService.ExecuteWheelDraw:input_type -> hyapp.activity.v1.ExecuteWheelDrawRequest + 128, // 353: hyapp.activity.v1.RoomTurnoverRewardService.GetRoomTurnoverRewardStatus:input_type -> hyapp.activity.v1.GetRoomTurnoverRewardStatusRequest + 240, // 354: hyapp.activity.v1.WeeklyStarService.GetWeeklyStarCurrent:input_type -> hyapp.activity.v1.GetWeeklyStarCurrentRequest + 236, // 355: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarLeaderboard:input_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardRequest + 242, // 356: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarHistory:input_type -> hyapp.activity.v1.ListWeeklyStarHistoryRequest + 250, // 357: hyapp.activity.v1.CPWeeklyRankService.GetCPWeeklyRankStatus:input_type -> hyapp.activity.v1.GetCPWeeklyRankStatusRequest + 274, // 358: hyapp.activity.v1.AgencyOpeningService.GetAgencyOpeningStatus:input_type -> hyapp.activity.v1.GetAgencyOpeningStatusRequest + 276, // 359: hyapp.activity.v1.AgencyOpeningService.ApplyAgencyOpening:input_type -> hyapp.activity.v1.ApplyAgencyOpeningRequest + 270, // 360: hyapp.activity.v1.AgencyOpeningService.ListAgencyOpeningLeaderboard:input_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsRequest + 41, // 361: hyapp.activity.v1.BroadcastService.EnsureBroadcastGroups:input_type -> hyapp.activity.v1.EnsureBroadcastGroupsRequest + 43, // 362: hyapp.activity.v1.BroadcastService.PublishRegionBroadcast:input_type -> hyapp.activity.v1.PublishRegionBroadcastRequest + 44, // 363: hyapp.activity.v1.BroadcastService.PublishGlobalBroadcast:input_type -> hyapp.activity.v1.PublishGlobalBroadcastRequest + 46, // 364: hyapp.activity.v1.BroadcastService.RemoveRegionBroadcastMember:input_type -> hyapp.activity.v1.RemoveRegionBroadcastMemberRequest + 30, // 365: hyapp.activity.v1.BroadcastService.ProcessBroadcastOutboxBatch:input_type -> hyapp.activity.v1.CronBatchRequest + 49, // 366: hyapp.activity.v1.RoomEventConsumerService.ConsumeRoomEvent:input_type -> hyapp.activity.v1.ConsumeRoomEventRequest + 52, // 367: hyapp.activity.v1.AdminTaskService.ListTaskDefinitions:input_type -> hyapp.activity.v1.ListTaskDefinitionsRequest + 54, // 368: hyapp.activity.v1.AdminTaskService.UpsertTaskDefinition:input_type -> hyapp.activity.v1.UpsertTaskDefinitionRequest + 56, // 369: hyapp.activity.v1.AdminTaskService.SetTaskDefinitionStatus:input_type -> hyapp.activity.v1.SetTaskDefinitionStatusRequest + 58, // 370: hyapp.activity.v1.AdminTaskService.PublishTaskRewardPolicy:input_type -> hyapp.activity.v1.PublishTaskRewardPolicyRequest + 63, // 371: hyapp.activity.v1.RegistrationRewardService.GetRegistrationRewardEligibility:input_type -> hyapp.activity.v1.GetRegistrationRewardEligibilityRequest + 65, // 372: hyapp.activity.v1.RegistrationRewardService.IssueRegistrationReward:input_type -> hyapp.activity.v1.IssueRegistrationRewardRequest + 67, // 373: hyapp.activity.v1.AdminRegistrationRewardService.GetRegistrationRewardConfig:input_type -> hyapp.activity.v1.GetRegistrationRewardConfigRequest + 69, // 374: hyapp.activity.v1.AdminRegistrationRewardService.UpdateRegistrationRewardConfig:input_type -> hyapp.activity.v1.UpdateRegistrationRewardConfigRequest + 71, // 375: hyapp.activity.v1.AdminRegistrationRewardService.ListRegistrationRewardClaims:input_type -> hyapp.activity.v1.ListRegistrationRewardClaimsRequest + 77, // 376: hyapp.activity.v1.FirstRechargeRewardService.GetFirstRechargeRewardStatus:input_type -> hyapp.activity.v1.GetFirstRechargeRewardStatusRequest + 79, // 377: hyapp.activity.v1.FirstRechargeRewardService.ConsumeFirstRechargeReward:input_type -> hyapp.activity.v1.ConsumeFirstRechargeRewardRequest + 81, // 378: hyapp.activity.v1.AdminFirstRechargeRewardService.GetFirstRechargeRewardConfig:input_type -> hyapp.activity.v1.GetFirstRechargeRewardConfigRequest + 83, // 379: hyapp.activity.v1.AdminFirstRechargeRewardService.UpdateFirstRechargeRewardConfig:input_type -> hyapp.activity.v1.UpdateFirstRechargeRewardConfigRequest + 85, // 380: hyapp.activity.v1.AdminFirstRechargeRewardService.ListFirstRechargeRewardClaims:input_type -> hyapp.activity.v1.ListFirstRechargeRewardClaimsRequest + 92, // 381: hyapp.activity.v1.CumulativeRechargeRewardService.GetCumulativeRechargeRewardStatus:input_type -> hyapp.activity.v1.GetCumulativeRechargeRewardStatusRequest + 94, // 382: hyapp.activity.v1.CumulativeRechargeRewardService.ConsumeCumulativeRechargeReward:input_type -> hyapp.activity.v1.ConsumeCumulativeRechargeRewardRequest + 107, // 383: hyapp.activity.v1.InviteActivityRewardService.GetInviteActivityRewardStatus:input_type -> hyapp.activity.v1.GetInviteActivityRewardStatusRequest + 109, // 384: hyapp.activity.v1.InviteActivityRewardService.ClaimInviteActivityReward:input_type -> hyapp.activity.v1.ClaimInviteActivityRewardRequest + 112, // 385: hyapp.activity.v1.InviteActivityRewardService.ListInviteActivityLeaderboard:input_type -> hyapp.activity.v1.ListInviteActivityLeaderboardRequest + 96, // 386: hyapp.activity.v1.AdminCumulativeRechargeRewardService.GetCumulativeRechargeRewardConfig:input_type -> hyapp.activity.v1.GetCumulativeRechargeRewardConfigRequest + 98, // 387: hyapp.activity.v1.AdminCumulativeRechargeRewardService.UpdateCumulativeRechargeRewardConfig:input_type -> hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigRequest + 100, // 388: hyapp.activity.v1.AdminCumulativeRechargeRewardService.ListCumulativeRechargeRewardGrants:input_type -> hyapp.activity.v1.ListCumulativeRechargeRewardGrantsRequest + 114, // 389: hyapp.activity.v1.AdminInviteActivityRewardService.GetInviteActivityRewardConfig:input_type -> hyapp.activity.v1.GetInviteActivityRewardConfigRequest + 116, // 390: hyapp.activity.v1.AdminInviteActivityRewardService.UpdateInviteActivityRewardConfig:input_type -> hyapp.activity.v1.UpdateInviteActivityRewardConfigRequest + 118, // 391: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardClaims:input_type -> hyapp.activity.v1.ListInviteActivityRewardClaimsRequest + 122, // 392: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardSummaries:input_type -> hyapp.activity.v1.ListInviteActivityRewardSummariesRequest + 130, // 393: hyapp.activity.v1.AdminRoomTurnoverRewardService.GetRoomTurnoverRewardConfig:input_type -> hyapp.activity.v1.GetRoomTurnoverRewardConfigRequest + 132, // 394: hyapp.activity.v1.AdminRoomTurnoverRewardService.UpdateRoomTurnoverRewardConfig:input_type -> hyapp.activity.v1.UpdateRoomTurnoverRewardConfigRequest + 134, // 395: hyapp.activity.v1.AdminRoomTurnoverRewardService.ListRoomTurnoverRewardSettlements:input_type -> hyapp.activity.v1.ListRoomTurnoverRewardSettlementsRequest + 136, // 396: hyapp.activity.v1.AdminRoomTurnoverRewardService.RetryRoomTurnoverRewardSettlement:input_type -> hyapp.activity.v1.RetryRoomTurnoverRewardSettlementRequest + 228, // 397: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarCycles:input_type -> hyapp.activity.v1.ListWeeklyStarCyclesRequest + 232, // 398: hyapp.activity.v1.AdminWeeklyStarService.CreateWeeklyStarCycle:input_type -> hyapp.activity.v1.UpsertWeeklyStarCycleRequest + 230, // 399: hyapp.activity.v1.AdminWeeklyStarService.GetWeeklyStarCycle:input_type -> hyapp.activity.v1.GetWeeklyStarCycleRequest + 232, // 400: hyapp.activity.v1.AdminWeeklyStarService.UpdateWeeklyStarCycle:input_type -> hyapp.activity.v1.UpsertWeeklyStarCycleRequest + 234, // 401: hyapp.activity.v1.AdminWeeklyStarService.SetWeeklyStarCycleStatus:input_type -> hyapp.activity.v1.SetWeeklyStarCycleStatusRequest + 236, // 402: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarLeaderboard:input_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardRequest + 238, // 403: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarSettlements:input_type -> hyapp.activity.v1.ListWeeklyStarSettlementsRequest + 252, // 404: hyapp.activity.v1.AdminCPWeeklyRankService.GetCPWeeklyRankConfig:input_type -> hyapp.activity.v1.GetCPWeeklyRankConfigRequest + 254, // 405: hyapp.activity.v1.AdminCPWeeklyRankService.UpdateCPWeeklyRankConfig:input_type -> hyapp.activity.v1.UpdateCPWeeklyRankConfigRequest + 256, // 406: hyapp.activity.v1.AdminCPWeeklyRankService.ListCPWeeklyRankSettlements:input_type -> hyapp.activity.v1.ListCPWeeklyRankSettlementsRequest + 262, // 407: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningCycles:input_type -> hyapp.activity.v1.ListAgencyOpeningCyclesRequest + 266, // 408: hyapp.activity.v1.AdminAgencyOpeningService.CreateAgencyOpeningCycle:input_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleRequest + 264, // 409: hyapp.activity.v1.AdminAgencyOpeningService.GetAgencyOpeningCycle:input_type -> hyapp.activity.v1.GetAgencyOpeningCycleRequest + 266, // 410: hyapp.activity.v1.AdminAgencyOpeningService.UpdateAgencyOpeningCycle:input_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleRequest + 268, // 411: hyapp.activity.v1.AdminAgencyOpeningService.SetAgencyOpeningCycleStatus:input_type -> hyapp.activity.v1.SetAgencyOpeningCycleStatusRequest + 270, // 412: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningApplications:input_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsRequest + 272, // 413: hyapp.activity.v1.AdminAgencyOpeningService.ReviewAgencyOpeningApplication:input_type -> hyapp.activity.v1.ReviewAgencyOpeningApplicationRequest + 286, // 414: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplates:input_type -> hyapp.activity.v1.ListActivityTemplatesRequest + 288, // 415: hyapp.activity.v1.AdminActivityTemplateService.CreateActivityTemplate:input_type -> hyapp.activity.v1.CreateActivityTemplateRequest + 290, // 416: hyapp.activity.v1.AdminActivityTemplateService.GetActivityTemplate:input_type -> hyapp.activity.v1.GetActivityTemplateRequest + 292, // 417: hyapp.activity.v1.AdminActivityTemplateService.UpdateActivityTemplate:input_type -> hyapp.activity.v1.UpdateActivityTemplateRequest + 294, // 418: hyapp.activity.v1.AdminActivityTemplateService.SetActivityTemplateStatus:input_type -> hyapp.activity.v1.SetActivityTemplateStatusRequest + 296, // 419: hyapp.activity.v1.AdminActivityTemplateService.DeleteActivityTemplate:input_type -> hyapp.activity.v1.DeleteActivityTemplateRequest + 299, // 420: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateVersions:input_type -> hyapp.activity.v1.ListActivityTemplateVersionsRequest + 301, // 421: hyapp.activity.v1.AdminActivityTemplateService.CloneActivityTemplate:input_type -> hyapp.activity.v1.CloneActivityTemplateRequest + 304, // 422: hyapp.activity.v1.AdminActivityTemplateService.ValidateActivityTemplate:input_type -> hyapp.activity.v1.ValidateActivityTemplateRequest + 322, // 423: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateLeaderboard:input_type -> hyapp.activity.v1.AdminListActivityTemplateLeaderboardRequest + 324, // 424: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateRewardJobs:input_type -> hyapp.activity.v1.ListActivityTemplateRewardJobsRequest + 326, // 425: hyapp.activity.v1.AdminActivityTemplateService.RetryActivityTemplateRewardJob:input_type -> hyapp.activity.v1.RetryActivityTemplateRewardJobRequest + 328, // 426: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateTaskClaims:input_type -> hyapp.activity.v1.ListActivityTemplateTaskClaimsRequest + 330, // 427: hyapp.activity.v1.AdminActivityTemplateService.RetryActivityTemplateTaskClaim:input_type -> hyapp.activity.v1.RetryActivityTemplateTaskClaimRequest + 141, // 428: hyapp.activity.v1.SevenDayCheckInService.GetSevenDayCheckInStatus:input_type -> hyapp.activity.v1.GetSevenDayCheckInStatusRequest + 143, // 429: hyapp.activity.v1.SevenDayCheckInService.SignSevenDayCheckIn:input_type -> hyapp.activity.v1.SignSevenDayCheckInRequest + 145, // 430: hyapp.activity.v1.AdminSevenDayCheckInService.GetSevenDayCheckInConfig:input_type -> hyapp.activity.v1.GetSevenDayCheckInConfigRequest + 147, // 431: hyapp.activity.v1.AdminSevenDayCheckInService.UpdateSevenDayCheckInConfig:input_type -> hyapp.activity.v1.UpdateSevenDayCheckInConfigRequest + 150, // 432: hyapp.activity.v1.AdminSevenDayCheckInService.ListSevenDayCheckInClaims:input_type -> hyapp.activity.v1.ListSevenDayCheckInClaimsRequest + 189, // 433: hyapp.activity.v1.AdminGrowthLevelService.ListLevelConfig:input_type -> hyapp.activity.v1.ListLevelConfigRequest + 181, // 434: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTrack:input_type -> hyapp.activity.v1.UpsertLevelTrackRequest + 183, // 435: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelRule:input_type -> hyapp.activity.v1.UpsertLevelRuleRequest + 185, // 436: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTier:input_type -> hyapp.activity.v1.UpsertLevelTierRequest + 187, // 437: hyapp.activity.v1.AdminGrowthLevelService.BatchUpsertLevelConfig:input_type -> hyapp.activity.v1.BatchUpsertLevelConfigRequest + 173, // 438: hyapp.activity.v1.AdminGrowthLevelService.BatchGetUserLevelAdminProfiles:input_type -> hyapp.activity.v1.BatchGetUserLevelAdminProfilesRequest + 176, // 439: hyapp.activity.v1.AdminGrowthLevelService.AdjustTemporaryUserLevels:input_type -> hyapp.activity.v1.AdjustTemporaryUserLevelsRequest + 194, // 440: hyapp.activity.v1.AdminAchievementService.ListAchievementDefinitions:input_type -> hyapp.activity.v1.ListAchievementsRequest + 203, // 441: hyapp.activity.v1.AdminAchievementService.UpsertAchievementDefinition:input_type -> hyapp.activity.v1.UpsertAchievementDefinitionRequest + 205, // 442: hyapp.activity.v1.AdminAchievementService.DeleteAchievementDefinition:input_type -> hyapp.activity.v1.DeleteAchievementDefinitionRequest + 214, // 443: hyapp.activity.v1.AdminWheelService.GetWheelConfig:input_type -> hyapp.activity.v1.GetWheelConfigRequest + 216, // 444: hyapp.activity.v1.AdminWheelService.UpsertWheelConfig:input_type -> hyapp.activity.v1.UpsertWheelConfigRequest + 218, // 445: hyapp.activity.v1.AdminWheelService.ListWheelDraws:input_type -> hyapp.activity.v1.ListWheelDrawsRequest + 221, // 446: hyapp.activity.v1.AdminWheelService.GetWheelDrawSummary:input_type -> hyapp.activity.v1.GetWheelDrawSummaryRequest + 2, // 447: hyapp.activity.v1.ActivityService.PingActivity:output_type -> hyapp.activity.v1.PingActivityResponse + 4, // 448: hyapp.activity.v1.ActivityService.GetActivityStatus:output_type -> hyapp.activity.v1.GetActivityStatusResponse + 7, // 449: hyapp.activity.v1.MessageInboxService.ListMessageTabs:output_type -> hyapp.activity.v1.ListMessageTabsResponse + 10, // 450: hyapp.activity.v1.MessageInboxService.ListInboxMessages:output_type -> hyapp.activity.v1.ListInboxMessagesResponse + 12, // 451: hyapp.activity.v1.MessageInboxService.MarkInboxMessageRead:output_type -> hyapp.activity.v1.MarkInboxMessageReadResponse + 14, // 452: hyapp.activity.v1.MessageInboxService.MarkInboxSectionRead:output_type -> hyapp.activity.v1.MarkInboxSectionReadResponse + 16, // 453: hyapp.activity.v1.MessageInboxService.DeleteInboxMessage:output_type -> hyapp.activity.v1.DeleteInboxMessageResponse + 18, // 454: hyapp.activity.v1.MessageInboxService.CreateInboxMessage:output_type -> hyapp.activity.v1.CreateInboxMessageResponse + 20, // 455: hyapp.activity.v1.MessageInboxService.CreateFanoutJob:output_type -> hyapp.activity.v1.CreateFanoutJobResponse + 23, // 456: hyapp.activity.v1.MessageActionConfirmService.AcceptActionConfirm:output_type -> hyapp.activity.v1.AcceptActionConfirmResponse + 25, // 457: hyapp.activity.v1.MessageActionConfirmService.RejectActionConfirm:output_type -> hyapp.activity.v1.RejectActionConfirmResponse + 27, // 458: hyapp.activity.v1.MessageActionConfirmService.BatchGetActionConfirmStatus:output_type -> hyapp.activity.v1.BatchGetActionConfirmStatusResponse + 29, // 459: hyapp.activity.v1.MessageActionConfirmService.ListConversationActionConfirms:output_type -> hyapp.activity.v1.ListConversationActionConfirmsResponse + 31, // 460: hyapp.activity.v1.ActivityCronService.ProcessMessageFanoutBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 461: hyapp.activity.v1.ActivityCronService.ProcessLevelRewardBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 462: hyapp.activity.v1.ActivityCronService.ProcessTemporaryLevelBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 463: hyapp.activity.v1.ActivityCronService.ProcessAchievementRewardBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 464: hyapp.activity.v1.ActivityCronService.ProcessRoomTurnoverRewardSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 465: hyapp.activity.v1.ActivityCronService.ProcessWeeklyStarSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 466: hyapp.activity.v1.ActivityCronService.ProcessCPWeeklyRankSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 467: hyapp.activity.v1.ActivityCronService.ProcessAgencyOpeningSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 31, // 468: hyapp.activity.v1.ActivityCronService.ProcessActivityTemplateSettlementBatch:output_type -> hyapp.activity.v1.CronBatchResponse + 311, // 469: hyapp.activity.v1.ActivityTemplateRuntimeService.GetCurrentActivityTemplate:output_type -> hyapp.activity.v1.GetCurrentActivityTemplateResponse + 313, // 470: hyapp.activity.v1.ActivityTemplateRuntimeService.VisitActivityTemplate:output_type -> hyapp.activity.v1.VisitActivityTemplateResponse + 315, // 471: hyapp.activity.v1.ActivityTemplateRuntimeService.ListActivityTemplateTasks:output_type -> hyapp.activity.v1.ListActivityTemplateTasksResponse + 317, // 472: hyapp.activity.v1.ActivityTemplateRuntimeService.ClaimActivityTemplateTaskReward:output_type -> hyapp.activity.v1.ClaimActivityTemplateTaskRewardResponse + 319, // 473: hyapp.activity.v1.ActivityTemplateRuntimeService.ListActivityTemplateLeaderboard:output_type -> hyapp.activity.v1.ListActivityTemplateLeaderboardResponse + 35, // 474: hyapp.activity.v1.TaskService.ListUserTasks:output_type -> hyapp.activity.v1.ListUserTasksResponse + 37, // 475: hyapp.activity.v1.TaskService.ClaimTaskReward:output_type -> hyapp.activity.v1.ClaimTaskRewardResponse + 39, // 476: hyapp.activity.v1.TaskService.ConsumeTaskEvent:output_type -> hyapp.activity.v1.ConsumeTaskEventResponse + 157, // 477: hyapp.activity.v1.GrowthLevelService.GetMyLevelOverview:output_type -> hyapp.activity.v1.GetMyLevelOverviewResponse + 159, // 478: hyapp.activity.v1.GrowthLevelService.GetLevelTrack:output_type -> hyapp.activity.v1.GetLevelTrackResponse + 163, // 479: hyapp.activity.v1.GrowthLevelService.BatchGetUserLevelDisplayProfiles:output_type -> hyapp.activity.v1.BatchGetUserLevelDisplayProfilesResponse + 166, // 480: hyapp.activity.v1.GrowthLevelService.ListLevelRewards:output_type -> hyapp.activity.v1.ListLevelRewardsResponse + 168, // 481: hyapp.activity.v1.GrowthLevelService.ConsumeLevelEvent:output_type -> hyapp.activity.v1.ConsumeLevelEventResponse + 170, // 482: hyapp.activity.v1.GrowthLevelService.SetUserLevel:output_type -> hyapp.activity.v1.SetUserLevelResponse + 180, // 483: hyapp.activity.v1.GrowthLevelService.IssueRegistrationLevelBadges:output_type -> hyapp.activity.v1.IssueRegistrationLevelBadgesResponse + 195, // 484: hyapp.activity.v1.AchievementService.ListAchievements:output_type -> hyapp.activity.v1.ListAchievementsResponse + 197, // 485: hyapp.activity.v1.AchievementService.ConsumeAchievementEvent:output_type -> hyapp.activity.v1.ConsumeAchievementEventResponse + 200, // 486: hyapp.activity.v1.AchievementService.ListMyBadges:output_type -> hyapp.activity.v1.ListMyBadgesResponse + 202, // 487: hyapp.activity.v1.AchievementService.SetBadgeDisplay:output_type -> hyapp.activity.v1.SetBadgeDisplayResponse + 213, // 488: hyapp.activity.v1.WheelService.ExecuteWheelDraw:output_type -> hyapp.activity.v1.ExecuteWheelDrawResponse + 129, // 489: hyapp.activity.v1.RoomTurnoverRewardService.GetRoomTurnoverRewardStatus:output_type -> hyapp.activity.v1.GetRoomTurnoverRewardStatusResponse + 241, // 490: hyapp.activity.v1.WeeklyStarService.GetWeeklyStarCurrent:output_type -> hyapp.activity.v1.GetWeeklyStarCurrentResponse + 237, // 491: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarLeaderboard:output_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardResponse + 244, // 492: hyapp.activity.v1.WeeklyStarService.ListWeeklyStarHistory:output_type -> hyapp.activity.v1.ListWeeklyStarHistoryResponse + 251, // 493: hyapp.activity.v1.CPWeeklyRankService.GetCPWeeklyRankStatus:output_type -> hyapp.activity.v1.GetCPWeeklyRankStatusResponse + 275, // 494: hyapp.activity.v1.AgencyOpeningService.GetAgencyOpeningStatus:output_type -> hyapp.activity.v1.GetAgencyOpeningStatusResponse + 277, // 495: hyapp.activity.v1.AgencyOpeningService.ApplyAgencyOpening:output_type -> hyapp.activity.v1.ApplyAgencyOpeningResponse + 271, // 496: hyapp.activity.v1.AgencyOpeningService.ListAgencyOpeningLeaderboard:output_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsResponse + 42, // 497: hyapp.activity.v1.BroadcastService.EnsureBroadcastGroups:output_type -> hyapp.activity.v1.EnsureBroadcastGroupsResponse + 45, // 498: hyapp.activity.v1.BroadcastService.PublishRegionBroadcast:output_type -> hyapp.activity.v1.PublishBroadcastResponse + 45, // 499: hyapp.activity.v1.BroadcastService.PublishGlobalBroadcast:output_type -> hyapp.activity.v1.PublishBroadcastResponse + 47, // 500: hyapp.activity.v1.BroadcastService.RemoveRegionBroadcastMember:output_type -> hyapp.activity.v1.RemoveRegionBroadcastMemberResponse + 48, // 501: hyapp.activity.v1.BroadcastService.ProcessBroadcastOutboxBatch:output_type -> hyapp.activity.v1.ProcessBroadcastOutboxBatchResponse + 50, // 502: hyapp.activity.v1.RoomEventConsumerService.ConsumeRoomEvent:output_type -> hyapp.activity.v1.ConsumeRoomEventResponse + 53, // 503: hyapp.activity.v1.AdminTaskService.ListTaskDefinitions:output_type -> hyapp.activity.v1.ListTaskDefinitionsResponse + 55, // 504: hyapp.activity.v1.AdminTaskService.UpsertTaskDefinition:output_type -> hyapp.activity.v1.UpsertTaskDefinitionResponse + 57, // 505: hyapp.activity.v1.AdminTaskService.SetTaskDefinitionStatus:output_type -> hyapp.activity.v1.SetTaskDefinitionStatusResponse + 59, // 506: hyapp.activity.v1.AdminTaskService.PublishTaskRewardPolicy:output_type -> hyapp.activity.v1.PublishTaskRewardPolicyResponse + 64, // 507: hyapp.activity.v1.RegistrationRewardService.GetRegistrationRewardEligibility:output_type -> hyapp.activity.v1.GetRegistrationRewardEligibilityResponse + 66, // 508: hyapp.activity.v1.RegistrationRewardService.IssueRegistrationReward:output_type -> hyapp.activity.v1.IssueRegistrationRewardResponse + 68, // 509: hyapp.activity.v1.AdminRegistrationRewardService.GetRegistrationRewardConfig:output_type -> hyapp.activity.v1.GetRegistrationRewardConfigResponse + 70, // 510: hyapp.activity.v1.AdminRegistrationRewardService.UpdateRegistrationRewardConfig:output_type -> hyapp.activity.v1.UpdateRegistrationRewardConfigResponse + 72, // 511: hyapp.activity.v1.AdminRegistrationRewardService.ListRegistrationRewardClaims:output_type -> hyapp.activity.v1.ListRegistrationRewardClaimsResponse + 78, // 512: hyapp.activity.v1.FirstRechargeRewardService.GetFirstRechargeRewardStatus:output_type -> hyapp.activity.v1.GetFirstRechargeRewardStatusResponse + 80, // 513: hyapp.activity.v1.FirstRechargeRewardService.ConsumeFirstRechargeReward:output_type -> hyapp.activity.v1.ConsumeFirstRechargeRewardResponse + 82, // 514: hyapp.activity.v1.AdminFirstRechargeRewardService.GetFirstRechargeRewardConfig:output_type -> hyapp.activity.v1.GetFirstRechargeRewardConfigResponse + 84, // 515: hyapp.activity.v1.AdminFirstRechargeRewardService.UpdateFirstRechargeRewardConfig:output_type -> hyapp.activity.v1.UpdateFirstRechargeRewardConfigResponse + 86, // 516: hyapp.activity.v1.AdminFirstRechargeRewardService.ListFirstRechargeRewardClaims:output_type -> hyapp.activity.v1.ListFirstRechargeRewardClaimsResponse + 93, // 517: hyapp.activity.v1.CumulativeRechargeRewardService.GetCumulativeRechargeRewardStatus:output_type -> hyapp.activity.v1.GetCumulativeRechargeRewardStatusResponse + 95, // 518: hyapp.activity.v1.CumulativeRechargeRewardService.ConsumeCumulativeRechargeReward:output_type -> hyapp.activity.v1.ConsumeCumulativeRechargeRewardResponse + 108, // 519: hyapp.activity.v1.InviteActivityRewardService.GetInviteActivityRewardStatus:output_type -> hyapp.activity.v1.GetInviteActivityRewardStatusResponse + 110, // 520: hyapp.activity.v1.InviteActivityRewardService.ClaimInviteActivityReward:output_type -> hyapp.activity.v1.ClaimInviteActivityRewardResponse + 113, // 521: hyapp.activity.v1.InviteActivityRewardService.ListInviteActivityLeaderboard:output_type -> hyapp.activity.v1.ListInviteActivityLeaderboardResponse + 97, // 522: hyapp.activity.v1.AdminCumulativeRechargeRewardService.GetCumulativeRechargeRewardConfig:output_type -> hyapp.activity.v1.GetCumulativeRechargeRewardConfigResponse + 99, // 523: hyapp.activity.v1.AdminCumulativeRechargeRewardService.UpdateCumulativeRechargeRewardConfig:output_type -> hyapp.activity.v1.UpdateCumulativeRechargeRewardConfigResponse + 101, // 524: hyapp.activity.v1.AdminCumulativeRechargeRewardService.ListCumulativeRechargeRewardGrants:output_type -> hyapp.activity.v1.ListCumulativeRechargeRewardGrantsResponse + 115, // 525: hyapp.activity.v1.AdminInviteActivityRewardService.GetInviteActivityRewardConfig:output_type -> hyapp.activity.v1.GetInviteActivityRewardConfigResponse + 117, // 526: hyapp.activity.v1.AdminInviteActivityRewardService.UpdateInviteActivityRewardConfig:output_type -> hyapp.activity.v1.UpdateInviteActivityRewardConfigResponse + 119, // 527: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardClaims:output_type -> hyapp.activity.v1.ListInviteActivityRewardClaimsResponse + 123, // 528: hyapp.activity.v1.AdminInviteActivityRewardService.ListInviteActivityRewardSummaries:output_type -> hyapp.activity.v1.ListInviteActivityRewardSummariesResponse + 131, // 529: hyapp.activity.v1.AdminRoomTurnoverRewardService.GetRoomTurnoverRewardConfig:output_type -> hyapp.activity.v1.GetRoomTurnoverRewardConfigResponse + 133, // 530: hyapp.activity.v1.AdminRoomTurnoverRewardService.UpdateRoomTurnoverRewardConfig:output_type -> hyapp.activity.v1.UpdateRoomTurnoverRewardConfigResponse + 135, // 531: hyapp.activity.v1.AdminRoomTurnoverRewardService.ListRoomTurnoverRewardSettlements:output_type -> hyapp.activity.v1.ListRoomTurnoverRewardSettlementsResponse + 137, // 532: hyapp.activity.v1.AdminRoomTurnoverRewardService.RetryRoomTurnoverRewardSettlement:output_type -> hyapp.activity.v1.RetryRoomTurnoverRewardSettlementResponse + 229, // 533: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarCycles:output_type -> hyapp.activity.v1.ListWeeklyStarCyclesResponse + 233, // 534: hyapp.activity.v1.AdminWeeklyStarService.CreateWeeklyStarCycle:output_type -> hyapp.activity.v1.UpsertWeeklyStarCycleResponse + 231, // 535: hyapp.activity.v1.AdminWeeklyStarService.GetWeeklyStarCycle:output_type -> hyapp.activity.v1.GetWeeklyStarCycleResponse + 233, // 536: hyapp.activity.v1.AdminWeeklyStarService.UpdateWeeklyStarCycle:output_type -> hyapp.activity.v1.UpsertWeeklyStarCycleResponse + 235, // 537: hyapp.activity.v1.AdminWeeklyStarService.SetWeeklyStarCycleStatus:output_type -> hyapp.activity.v1.SetWeeklyStarCycleStatusResponse + 237, // 538: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarLeaderboard:output_type -> hyapp.activity.v1.ListWeeklyStarLeaderboardResponse + 239, // 539: hyapp.activity.v1.AdminWeeklyStarService.ListWeeklyStarSettlements:output_type -> hyapp.activity.v1.ListWeeklyStarSettlementsResponse + 253, // 540: hyapp.activity.v1.AdminCPWeeklyRankService.GetCPWeeklyRankConfig:output_type -> hyapp.activity.v1.GetCPWeeklyRankConfigResponse + 255, // 541: hyapp.activity.v1.AdminCPWeeklyRankService.UpdateCPWeeklyRankConfig:output_type -> hyapp.activity.v1.UpdateCPWeeklyRankConfigResponse + 257, // 542: hyapp.activity.v1.AdminCPWeeklyRankService.ListCPWeeklyRankSettlements:output_type -> hyapp.activity.v1.ListCPWeeklyRankSettlementsResponse + 263, // 543: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningCycles:output_type -> hyapp.activity.v1.ListAgencyOpeningCyclesResponse + 267, // 544: hyapp.activity.v1.AdminAgencyOpeningService.CreateAgencyOpeningCycle:output_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleResponse + 265, // 545: hyapp.activity.v1.AdminAgencyOpeningService.GetAgencyOpeningCycle:output_type -> hyapp.activity.v1.GetAgencyOpeningCycleResponse + 267, // 546: hyapp.activity.v1.AdminAgencyOpeningService.UpdateAgencyOpeningCycle:output_type -> hyapp.activity.v1.UpsertAgencyOpeningCycleResponse + 269, // 547: hyapp.activity.v1.AdminAgencyOpeningService.SetAgencyOpeningCycleStatus:output_type -> hyapp.activity.v1.SetAgencyOpeningCycleStatusResponse + 271, // 548: hyapp.activity.v1.AdminAgencyOpeningService.ListAgencyOpeningApplications:output_type -> hyapp.activity.v1.ListAgencyOpeningApplicationsResponse + 273, // 549: hyapp.activity.v1.AdminAgencyOpeningService.ReviewAgencyOpeningApplication:output_type -> hyapp.activity.v1.ReviewAgencyOpeningApplicationResponse + 287, // 550: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplates:output_type -> hyapp.activity.v1.ListActivityTemplatesResponse + 289, // 551: hyapp.activity.v1.AdminActivityTemplateService.CreateActivityTemplate:output_type -> hyapp.activity.v1.CreateActivityTemplateResponse + 291, // 552: hyapp.activity.v1.AdminActivityTemplateService.GetActivityTemplate:output_type -> hyapp.activity.v1.GetActivityTemplateResponse + 293, // 553: hyapp.activity.v1.AdminActivityTemplateService.UpdateActivityTemplate:output_type -> hyapp.activity.v1.UpdateActivityTemplateResponse + 295, // 554: hyapp.activity.v1.AdminActivityTemplateService.SetActivityTemplateStatus:output_type -> hyapp.activity.v1.SetActivityTemplateStatusResponse + 297, // 555: hyapp.activity.v1.AdminActivityTemplateService.DeleteActivityTemplate:output_type -> hyapp.activity.v1.DeleteActivityTemplateResponse + 300, // 556: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateVersions:output_type -> hyapp.activity.v1.ListActivityTemplateVersionsResponse + 302, // 557: hyapp.activity.v1.AdminActivityTemplateService.CloneActivityTemplate:output_type -> hyapp.activity.v1.CloneActivityTemplateResponse + 305, // 558: hyapp.activity.v1.AdminActivityTemplateService.ValidateActivityTemplate:output_type -> hyapp.activity.v1.ValidateActivityTemplateResponse + 323, // 559: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateLeaderboard:output_type -> hyapp.activity.v1.AdminListActivityTemplateLeaderboardResponse + 325, // 560: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateRewardJobs:output_type -> hyapp.activity.v1.ListActivityTemplateRewardJobsResponse + 327, // 561: hyapp.activity.v1.AdminActivityTemplateService.RetryActivityTemplateRewardJob:output_type -> hyapp.activity.v1.RetryActivityTemplateRewardJobResponse + 329, // 562: hyapp.activity.v1.AdminActivityTemplateService.ListActivityTemplateTaskClaims:output_type -> hyapp.activity.v1.ListActivityTemplateTaskClaimsResponse + 331, // 563: hyapp.activity.v1.AdminActivityTemplateService.RetryActivityTemplateTaskClaim:output_type -> hyapp.activity.v1.RetryActivityTemplateTaskClaimResponse + 142, // 564: hyapp.activity.v1.SevenDayCheckInService.GetSevenDayCheckInStatus:output_type -> hyapp.activity.v1.GetSevenDayCheckInStatusResponse + 144, // 565: hyapp.activity.v1.SevenDayCheckInService.SignSevenDayCheckIn:output_type -> hyapp.activity.v1.SignSevenDayCheckInResponse + 146, // 566: hyapp.activity.v1.AdminSevenDayCheckInService.GetSevenDayCheckInConfig:output_type -> hyapp.activity.v1.GetSevenDayCheckInConfigResponse + 148, // 567: hyapp.activity.v1.AdminSevenDayCheckInService.UpdateSevenDayCheckInConfig:output_type -> hyapp.activity.v1.UpdateSevenDayCheckInConfigResponse + 151, // 568: hyapp.activity.v1.AdminSevenDayCheckInService.ListSevenDayCheckInClaims:output_type -> hyapp.activity.v1.ListSevenDayCheckInClaimsResponse + 190, // 569: hyapp.activity.v1.AdminGrowthLevelService.ListLevelConfig:output_type -> hyapp.activity.v1.ListLevelConfigResponse + 182, // 570: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTrack:output_type -> hyapp.activity.v1.UpsertLevelTrackResponse + 184, // 571: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelRule:output_type -> hyapp.activity.v1.UpsertLevelRuleResponse + 186, // 572: hyapp.activity.v1.AdminGrowthLevelService.UpsertLevelTier:output_type -> hyapp.activity.v1.UpsertLevelTierResponse + 188, // 573: hyapp.activity.v1.AdminGrowthLevelService.BatchUpsertLevelConfig:output_type -> hyapp.activity.v1.BatchUpsertLevelConfigResponse + 174, // 574: hyapp.activity.v1.AdminGrowthLevelService.BatchGetUserLevelAdminProfiles:output_type -> hyapp.activity.v1.BatchGetUserLevelAdminProfilesResponse + 177, // 575: hyapp.activity.v1.AdminGrowthLevelService.AdjustTemporaryUserLevels:output_type -> hyapp.activity.v1.AdjustTemporaryUserLevelsResponse + 195, // 576: hyapp.activity.v1.AdminAchievementService.ListAchievementDefinitions:output_type -> hyapp.activity.v1.ListAchievementsResponse + 204, // 577: hyapp.activity.v1.AdminAchievementService.UpsertAchievementDefinition:output_type -> hyapp.activity.v1.UpsertAchievementDefinitionResponse + 206, // 578: hyapp.activity.v1.AdminAchievementService.DeleteAchievementDefinition:output_type -> hyapp.activity.v1.DeleteAchievementDefinitionResponse + 215, // 579: hyapp.activity.v1.AdminWheelService.GetWheelConfig:output_type -> hyapp.activity.v1.GetWheelConfigResponse + 217, // 580: hyapp.activity.v1.AdminWheelService.UpsertWheelConfig:output_type -> hyapp.activity.v1.UpsertWheelConfigResponse + 219, // 581: hyapp.activity.v1.AdminWheelService.ListWheelDraws:output_type -> hyapp.activity.v1.ListWheelDrawsResponse + 222, // 582: hyapp.activity.v1.AdminWheelService.GetWheelDrawSummary:output_type -> hyapp.activity.v1.GetWheelDrawSummaryResponse + 447, // [447:583] is the sub-list for method output_type + 311, // [311:447] is the sub-list for method input_type + 311, // [311:311] is the sub-list for extension type_name + 311, // [311:311] is the sub-list for extension extendee + 0, // [0:311] is the sub-list for field type_name } func init() { file_proto_activity_v1_activity_proto_init() } @@ -27717,22 +29723,22 @@ func file_proto_activity_v1_activity_proto_init() { if File_proto_activity_v1_activity_proto != nil { return } + file_proto_activity_v1_activity_proto_msgTypes[286].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_activity_v1_activity_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_activity_v1_activity_proto_rawDesc), len(file_proto_activity_v1_activity_proto_rawDesc)), NumEnums: 0, - NumMessages: 278, + NumMessages: 332, NumExtensions: 0, - NumServices: 32, + NumServices: 34, }, GoTypes: file_proto_activity_v1_activity_proto_goTypes, DependencyIndexes: file_proto_activity_v1_activity_proto_depIdxs, MessageInfos: file_proto_activity_v1_activity_proto_msgTypes, }.Build() File_proto_activity_v1_activity_proto = out.File - file_proto_activity_v1_activity_proto_rawDesc = nil file_proto_activity_v1_activity_proto_goTypes = nil file_proto_activity_v1_activity_proto_depIdxs = nil } diff --git a/api/proto/activity/v1/activity.proto b/api/proto/activity/v1/activity.proto index c68fb5eb..c4c758b3 100644 --- a/api/proto/activity/v1/activity.proto +++ b/api/proto/activity/v1/activity.proto @@ -2377,6 +2377,533 @@ message ApplyAgencyOpeningResponse { bool created = 2; } +// ActivityTemplateLocale 是活动模版的单语言文案。locale 使用 BCP-47 基础语言码, +// 当前运营后台至少配置 en,客户端按 locale -> en 的顺序回退。 +message ActivityTemplateLocale { + string locale = 1; + string title = 2; + string rules = 3; +} + +// ActivityTemplateGift 是礼物挑战赛允许计分的礼物快照引用。 +message ActivityTemplateGift { + string gift_id = 1; + int32 sort_order = 2; + string name = 3; + string icon_url = 4; + int64 coin_price = 5; + string price_version = 6; +} + +// ActivityTemplateRewardItem 是 wallet pinned snapshot 的安全展示投影;不暴露发放策略和管理字段。 +message ActivityTemplateRewardItem { + string item_type = 1; + int64 resource_id = 2; + string resource_type = 3; + string name = 4; + string icon_url = 5; + int64 quantity = 6; + int64 duration_ms = 7; + string wallet_asset_type = 8; + int64 wallet_asset_amount = 9; + int32 sort_order = 10; +} + +// ActivityTemplateTask 表达模版内的一档每日任务。奖励使用 wallet-service 资源组, +// 由资源组负责展开头像框、座驾、金币等实际资产。 +message ActivityTemplateTask { + string task_key = 1; + string task_type = 2; + int64 target_value = 3; + int64 reward_resource_group_id = 4; + int32 sort_order = 5; + string reward_snapshot_id = 6; + string reward_snapshot_hash = 7; + string reward_name = 8; + repeated ActivityTemplateRewardItem reward_items = 9; +} + +// ActivityTemplateRankReward 是日榜或总榜的一个不重叠名次区间奖励。 +message ActivityTemplateRankReward { + string board_type = 1; + int32 rank_from = 2; + int32 rank_to = 3; + int64 resource_group_id = 4; + int32 sort_order = 5; + string reward_snapshot_id = 6; + string reward_snapshot_hash = 7; + string reward_name = 8; + repeated ActivityTemplateRewardItem reward_items = 9; +} + +// ActivityTemplateAsset 是客户端活动页素材引用。locale="*" 表示所有语言共享, +// 独立语言素材覆盖共享素材;media_type 支持 image/webp/svga/pag。 +message ActivityTemplateAsset { + string asset_key = 1; + string locale = 2; + string url = 3; + string media_type = 4; + int32 sort_order = 5; +} + +// ActivityTemplate 是可排期的运营活动实例。运营侧沿用“活动模版”名称, +// 发布时 activity-service 会固化完整版本快照,避免运行中的配置被后台编辑覆盖。 +message ActivityTemplate { + string app_code = 1; + string template_id = 2; + string template_code = 3; + string name = 4; + string activity_type = 5; + string status = 6; + string lifecycle_status = 7; + int64 start_ms = 8; + int64 end_ms = 9; + bool all_regions = 10; + repeated int64 region_ids = 11; + repeated ActivityTemplateLocale locales = 12; + repeated ActivityTemplateGift gifts = 13; + repeated ActivityTemplateTask tasks = 14; + int32 daily_leaderboard_size = 15; + int32 total_leaderboard_size = 16; + repeated ActivityTemplateRankReward rank_rewards = 17; + repeated ActivityTemplateAsset assets = 18; + string display_config_json = 19; + int64 revision = 20; + int64 published_version = 21; + int64 created_by_admin_id = 22; + int64 updated_by_admin_id = 23; + int64 published_by_admin_id = 24; + int64 created_at_ms = 25; + int64 updated_at_ms = 26; + int64 published_at_ms = 27; + int64 archived_at_ms = 28; +} + +// ActivityTemplateSummary 是高密度列表专用投影,不携带规则、任务、素材和展示 JSON, +// 避免后台翻页时把每个模版的完整聚合重复传输。 +message ActivityTemplateSummary { + string app_code = 1; + string template_id = 2; + string template_code = 3; + string name = 4; + string activity_type = 5; + string status = 6; + string lifecycle_status = 7; + int64 start_ms = 8; + int64 end_ms = 9; + bool all_regions = 10; + repeated int64 region_ids = 11; + int64 revision = 12; + int64 published_version = 13; + int64 created_by_admin_id = 14; + int64 updated_by_admin_id = 15; + int64 created_at_ms = 16; + int64 updated_at_ms = 17; +} + +message ListActivityTemplatesRequest { + RequestMeta meta = 1; + string keyword = 2; + string status = 3; + optional int64 region_id = 4; + int64 start_ms = 5; + int64 end_ms = 6; + int32 page = 7; + int32 page_size = 8; + optional bool all_regions = 9; +} + +message ListActivityTemplatesResponse { + repeated ActivityTemplateSummary templates = 1; + int64 total = 2; + int64 server_time_ms = 3; +} + +message CreateActivityTemplateRequest { + RequestMeta meta = 1; + ActivityTemplate template = 2; + int64 operator_admin_id = 3; +} + +message CreateActivityTemplateResponse { + ActivityTemplate template = 1; +} + +message GetActivityTemplateRequest { + RequestMeta meta = 1; + string template_id = 2; +} + +message GetActivityTemplateResponse { + ActivityTemplate template = 1; +} + +message UpdateActivityTemplateRequest { + RequestMeta meta = 1; + ActivityTemplate template = 2; + int64 expected_revision = 3; + int64 operator_admin_id = 4; +} + +message UpdateActivityTemplateResponse { + ActivityTemplate template = 1; +} + +message SetActivityTemplateStatusRequest { + RequestMeta meta = 1; + string template_id = 2; + string status = 3; + int64 expected_revision = 4; + int64 operator_admin_id = 5; +} + +message SetActivityTemplateStatusResponse { + ActivityTemplate template = 1; +} + +message DeleteActivityTemplateRequest { + RequestMeta meta = 1; + string template_id = 2; + int64 expected_revision = 3; + int64 operator_admin_id = 4; +} + +message DeleteActivityTemplateResponse { + ActivityTemplate template = 1; + bool archived = 2; +} + +// ActivityTemplateVersion 是每次发布形成的不可变完整配置快照。 +message ActivityTemplateVersion { + string template_id = 1; + int64 version_no = 2; + ActivityTemplate snapshot = 3; + int64 published_by_admin_id = 4; + int64 published_at_ms = 5; + // 实际运行窗口来自 activity_template_runtime_versions;停用后 runtime_to_ms 固化,重发会创建新版本窗口。 + int64 runtime_from_ms = 6; + int64 runtime_to_ms = 7; +} + +message ListActivityTemplateVersionsRequest { + RequestMeta meta = 1; + string template_id = 2; + int32 page = 3; + int32 page_size = 4; +} + +message ListActivityTemplateVersionsResponse { + repeated ActivityTemplateVersion versions = 1; + int64 total = 2; +} + +// CloneActivityTemplateRequest 从当前配置或指定发布版本复制为新草稿; +// source_version=0 表示复制当前配置,新的 template_code 必须在 App 内唯一。 +message CloneActivityTemplateRequest { + RequestMeta meta = 1; + string source_template_id = 2; + int64 source_version = 3; + string template_code = 4; + string name = 5; + int64 operator_admin_id = 6; +} + +message CloneActivityTemplateResponse { + ActivityTemplate template = 1; +} + +message ActivityTemplateValidationIssue { + string field = 1; + string code = 2; + string message = 3; +} + +// ValidateActivityTemplateRequest 让编辑页在正式保存或发布前复用 owner service 的校验规则。 +message ValidateActivityTemplateRequest { + RequestMeta meta = 1; + ActivityTemplate template = 2; + bool for_publish = 3; +} + +message ValidateActivityTemplateResponse { + bool valid = 1; + repeated ActivityTemplateValidationIssue issues = 2; +} + +// ActivityTemplateRuntime 描述一个用户当前命中的已发布不可变版本。 +// runtime_from_ms/runtime_to_ms 是该版本的实际启停窗口,活动排期仍以 template 的 [start_ms,end_ms) 为准。 +message ActivityTemplateRuntime { + ActivityTemplate template = 1; + int64 version_no = 2; + int64 runtime_from_ms = 3; + int64 runtime_to_ms = 4; + int64 server_time_ms = 5; +} + +// ActivityTemplateRuntimeTask 是发布版本内一档 UTC 每日任务及当前用户进度。 +message ActivityTemplateRuntimeTask { + string template_id = 1; + string template_code = 2; + int64 version_no = 3; + string task_day = 4; + string task_key = 5; + string task_type = 6; + int64 target_value = 7; + int64 progress_value = 8; + int64 reward_resource_group_id = 9; + string status = 10; + bool claimable = 11; + int64 completed_at_ms = 12; + int64 claimed_at_ms = 13; + int32 sort_order = 14; + string reward_snapshot_id = 15; + string reward_snapshot_hash = 16; + string reward_name = 17; + repeated ActivityTemplateRewardItem reward_items = 18; +} + +// ActivityTemplateTaskClaim 是 activity-service 与 wallet-service 之间可审计、可重放的领奖事实。 +message ActivityTemplateTaskClaim { + string claim_id = 1; + string command_id = 2; + string template_id = 3; + string template_code = 4; + int64 version_no = 5; + string task_day = 6; + string task_key = 7; + int64 user_id = 8; + int64 reward_resource_group_id = 9; + string wallet_command_id = 10; + string wallet_grant_id = 11; + string status = 12; + string failure_reason = 13; + int32 attempt_count = 14; + int64 created_at_ms = 15; + int64 updated_at_ms = 16; + int64 granted_at_ms = 17; + string reward_snapshot_id = 18; + string reward_name = 19; + repeated ActivityTemplateRewardItem reward_items = 20; + string reward_snapshot_hash = 21; + // earning_region_id/attribution_at_ms are frozen from the progress event that completed the task. + int64 earning_region_id = 22; + int64 attribution_at_ms = 23; +} + +// ActivityTemplateLeaderboardEntry 同时用于实时榜和结算后冻结快照。 +message ActivityTemplateLeaderboardEntry { + int32 rank_no = 1; + int64 user_id = 2; + int64 score = 3; + int64 gift_count = 4; + int64 coin_amount = 5; + int64 first_scored_at_ms = 6; + bool snapshot = 7; +} + +message GetCurrentActivityTemplateRequest { + RequestMeta meta = 1; + int64 user_id = 2; + int64 region_id = 3; + string locale = 4; +} + +message GetCurrentActivityTemplateResponse { + ActivityTemplateRuntime runtime = 1; + bool found = 2; +} + +// VisitActivityTemplate 是 daily_visit 的唯一事实入口;command_id 负责请求重放, +// 自然幂等键仍是用户+发布版本+UTC task_day。 +message VisitActivityTemplateRequest { + RequestMeta meta = 1; + int64 user_id = 2; + int64 region_id = 3; + string template_code = 4; + string command_id = 5; + // version_no comes from GetCurrentActivityTemplate and prevents disable/re-publish races. + int64 version_no = 6; +} + +message VisitActivityTemplateResponse { + ActivityTemplateRuntime runtime = 1; + repeated ActivityTemplateRuntimeTask tasks = 2; + bool first_visit = 3; +} + +message ListActivityTemplateTasksRequest { + RequestMeta meta = 1; + int64 user_id = 2; + int64 region_id = 3; + string template_code = 4; + string task_day = 5; + // version_no 与 task_day 同时提供时读取该用户确实参与过的历史不可变任务版本。 + int64 version_no = 6; +} + +message ListActivityTemplateTasksResponse { + ActivityTemplateRuntime runtime = 1; + repeated ActivityTemplateRuntimeTask tasks = 2; + int64 next_refresh_at_ms = 3; +} + +message ClaimActivityTemplateTaskRewardRequest { + RequestMeta meta = 1; + int64 user_id = 2; + int64 region_id = 3; + string template_code = 4; + string task_day = 5; + string task_key = 6; + string command_id = 7; + // version_no 来自 tasks/runtime 响应,强制把同日重发前后的任务领奖绑定到正确不可变版本。 + int64 version_no = 8; +} + +message ClaimActivityTemplateTaskRewardResponse { + ActivityTemplateTaskClaim claim = 1; + bool claimed = 2; +} + +message ListActivityTemplateLeaderboardRequest { + RequestMeta meta = 1; + int64 user_id = 2; + int64 region_id = 3; + string template_code = 4; + string board_type = 5; + string period_key = 6; + int32 page = 7; + int32 page_size = 8; + // version_no > 0 时严格读取该发布版本;省略仅用于当前/最近版本兼容查询。 + int64 version_no = 9; +} + +message ListActivityTemplateLeaderboardResponse { + ActivityTemplateRuntime runtime = 1; + string board_type = 2; + string period_key = 3; + int64 period_start_ms = 4; + int64 period_end_ms = 5; + string period_status = 6; + repeated ActivityTemplateLeaderboardEntry entries = 7; + ActivityTemplateLeaderboardEntry my_entry = 8; + int64 total = 9; + // settle_after_ms 是含迟到窗口的排他结算水位;到达该毫秒后榜单不再接收事件。 + int64 settle_after_ms = 10; +} + +// ActivityTemplateRankPeriod 是 UTC 日榜或活动总榜的冻结/发奖状态机。 +message ActivityTemplateRankPeriod { + string template_id = 1; + string template_code = 2; + int64 version_no = 3; + string board_type = 4; + string period_key = 5; + int64 period_start_ms = 6; + int64 period_end_ms = 7; + // pending -> settling(物化中)-> rewarding(奖励 job 独立推进)-> settled;也可 cancelled。 + string status = 8; + int64 settled_at_ms = 9; + int64 settle_after_ms = 10; +} + +message ActivityTemplateRewardJob { + string reward_job_id = 1; + string template_id = 2; + string template_code = 3; + int64 version_no = 4; + string board_type = 5; + string period_key = 6; + int32 rank_no = 7; + int64 user_id = 8; + int64 score = 9; + int64 resource_group_id = 10; + string wallet_command_id = 11; + string wallet_grant_id = 12; + string status = 13; + string failure_reason = 14; + int32 attempt_count = 15; + int64 created_at_ms = 16; + int64 updated_at_ms = 17; + int64 granted_at_ms = 18; + string reward_snapshot_id = 19; + string reward_snapshot_hash = 20; + string reward_name = 21; + repeated ActivityTemplateRewardItem reward_items = 22; + int32 max_attempts = 23; + int64 next_retry_at_ms = 24; +} + +message AdminListActivityTemplateLeaderboardRequest { + RequestMeta meta = 1; + string template_id = 2; + int64 version_no = 3; + string board_type = 4; + string period_key = 5; + int32 page = 6; + int32 page_size = 7; +} + +message AdminListActivityTemplateLeaderboardResponse { + ActivityTemplateRankPeriod period = 1; + repeated ActivityTemplateLeaderboardEntry entries = 2; + int64 total = 3; +} + +message ListActivityTemplateRewardJobsRequest { + RequestMeta meta = 1; + string template_id = 2; + int64 version_no = 3; + string board_type = 4; + string period_key = 5; + string status = 6; + int32 page = 7; + int32 page_size = 8; +} + +message ListActivityTemplateRewardJobsResponse { + repeated ActivityTemplateRewardJob jobs = 1; + int64 total = 2; +} + +message RetryActivityTemplateRewardJobRequest { + RequestMeta meta = 1; + string template_id = 2; + string reward_job_id = 3; + int64 operator_admin_id = 4; +} + +message RetryActivityTemplateRewardJobResponse { + ActivityTemplateRewardJob job = 1; +} + +message ListActivityTemplateTaskClaimsRequest { + RequestMeta meta = 1; + string template_id = 2; + int64 version_no = 3; + string task_day = 4; + string task_key = 5; + int64 user_id = 6; + string status = 7; + int32 page = 8; + int32 page_size = 9; +} + +message ListActivityTemplateTaskClaimsResponse { + repeated ActivityTemplateTaskClaim claims = 1; + int64 total = 2; +} + +message RetryActivityTemplateTaskClaimRequest { + RequestMeta meta = 1; + string template_id = 2; + string claim_id = 3; + int64 operator_admin_id = 4; +} + +message RetryActivityTemplateTaskClaimResponse { + ActivityTemplateTaskClaim claim = 1; +} + // ActivityService 只暴露同步查询,不把事件消费伪装成 RPC。 service ActivityService { rpc PingActivity(PingActivityRequest) returns (PingActivityResponse); @@ -2412,6 +2939,16 @@ service ActivityCronService { rpc ProcessWeeklyStarSettlementBatch(CronBatchRequest) returns (CronBatchResponse); rpc ProcessCPWeeklyRankSettlementBatch(CronBatchRequest) returns (CronBatchResponse); rpc ProcessAgencyOpeningSettlementBatch(CronBatchRequest) returns (CronBatchResponse); + rpc ProcessActivityTemplateSettlementBatch(CronBatchRequest) returns (CronBatchResponse); +} + +// ActivityTemplateRuntimeService 是 App/H5 读取已发布版本、任务进度、榜单和领奖的 owner 入口。 +service ActivityTemplateRuntimeService { + rpc GetCurrentActivityTemplate(GetCurrentActivityTemplateRequest) returns (GetCurrentActivityTemplateResponse); + rpc VisitActivityTemplate(VisitActivityTemplateRequest) returns (VisitActivityTemplateResponse); + rpc ListActivityTemplateTasks(ListActivityTemplateTasksRequest) returns (ListActivityTemplateTasksResponse); + rpc ClaimActivityTemplateTaskReward(ClaimActivityTemplateTaskRewardRequest) returns (ClaimActivityTemplateTaskRewardResponse); + rpc ListActivityTemplateLeaderboard(ListActivityTemplateLeaderboardRequest) returns (ListActivityTemplateLeaderboardResponse); } // TaskService 拥有 App 任务查询、事件进度消费和领奖状态。 @@ -2582,6 +3119,25 @@ service AdminAgencyOpeningService { rpc ReviewAgencyOpeningApplication(ReviewAgencyOpeningApplicationRequest) returns (ReviewAgencyOpeningApplicationResponse); } +// AdminActivityTemplateService 是后台活动模版访问 activity-service 的唯一入口。 +// admin-server 只做鉴权、协议转换和审计,不能直写 activity-service 的配置表。 +service AdminActivityTemplateService { + rpc ListActivityTemplates(ListActivityTemplatesRequest) returns (ListActivityTemplatesResponse); + rpc CreateActivityTemplate(CreateActivityTemplateRequest) returns (CreateActivityTemplateResponse); + rpc GetActivityTemplate(GetActivityTemplateRequest) returns (GetActivityTemplateResponse); + rpc UpdateActivityTemplate(UpdateActivityTemplateRequest) returns (UpdateActivityTemplateResponse); + rpc SetActivityTemplateStatus(SetActivityTemplateStatusRequest) returns (SetActivityTemplateStatusResponse); + rpc DeleteActivityTemplate(DeleteActivityTemplateRequest) returns (DeleteActivityTemplateResponse); + rpc ListActivityTemplateVersions(ListActivityTemplateVersionsRequest) returns (ListActivityTemplateVersionsResponse); + rpc CloneActivityTemplate(CloneActivityTemplateRequest) returns (CloneActivityTemplateResponse); + rpc ValidateActivityTemplate(ValidateActivityTemplateRequest) returns (ValidateActivityTemplateResponse); + rpc ListActivityTemplateLeaderboard(AdminListActivityTemplateLeaderboardRequest) returns (AdminListActivityTemplateLeaderboardResponse); + rpc ListActivityTemplateRewardJobs(ListActivityTemplateRewardJobsRequest) returns (ListActivityTemplateRewardJobsResponse); + rpc RetryActivityTemplateRewardJob(RetryActivityTemplateRewardJobRequest) returns (RetryActivityTemplateRewardJobResponse); + rpc ListActivityTemplateTaskClaims(ListActivityTemplateTaskClaimsRequest) returns (ListActivityTemplateTaskClaimsResponse); + rpc RetryActivityTemplateTaskClaim(RetryActivityTemplateTaskClaimRequest) returns (RetryActivityTemplateTaskClaimResponse); +} + // SevenDayCheckInService 拥有 App 七日签到查询和签到命令。 service SevenDayCheckInService { rpc GetSevenDayCheckInStatus(GetSevenDayCheckInStatusRequest) returns (GetSevenDayCheckInStatusResponse); diff --git a/api/proto/activity/v1/activity_grpc.pb.go b/api/proto/activity/v1/activity_grpc.pb.go index 5a04e929..a84580ea 100644 --- a/api/proto/activity/v1/activity_grpc.pb.go +++ b/api/proto/activity/v1/activity_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/activity/v1/activity.proto package activityv1 @@ -80,10 +80,10 @@ type ActivityServiceServer interface { type UnimplementedActivityServiceServer struct{} func (UnimplementedActivityServiceServer) PingActivity(context.Context, *PingActivityRequest) (*PingActivityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PingActivity not implemented") + return nil, status.Error(codes.Unimplemented, "method PingActivity not implemented") } func (UnimplementedActivityServiceServer) GetActivityStatus(context.Context, *GetActivityStatusRequest) (*GetActivityStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetActivityStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetActivityStatus not implemented") } func (UnimplementedActivityServiceServer) mustEmbedUnimplementedActivityServiceServer() {} func (UnimplementedActivityServiceServer) testEmbeddedByValue() {} @@ -96,7 +96,7 @@ type UnsafeActivityServiceServer interface { } func RegisterActivityServiceServer(s grpc.ServiceRegistrar, srv ActivityServiceServer) { - // If the following call pancis, it indicates UnimplementedActivityServiceServer was + // If the following call panics, it indicates UnimplementedActivityServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -289,25 +289,25 @@ type MessageInboxServiceServer interface { type UnimplementedMessageInboxServiceServer struct{} func (UnimplementedMessageInboxServiceServer) ListMessageTabs(context.Context, *ListMessageTabsRequest) (*ListMessageTabsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListMessageTabs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListMessageTabs not implemented") } func (UnimplementedMessageInboxServiceServer) ListInboxMessages(context.Context, *ListInboxMessagesRequest) (*ListInboxMessagesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListInboxMessages not implemented") + return nil, status.Error(codes.Unimplemented, "method ListInboxMessages not implemented") } func (UnimplementedMessageInboxServiceServer) MarkInboxMessageRead(context.Context, *MarkInboxMessageReadRequest) (*MarkInboxMessageReadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MarkInboxMessageRead not implemented") + return nil, status.Error(codes.Unimplemented, "method MarkInboxMessageRead not implemented") } func (UnimplementedMessageInboxServiceServer) MarkInboxSectionRead(context.Context, *MarkInboxSectionReadRequest) (*MarkInboxSectionReadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MarkInboxSectionRead not implemented") + return nil, status.Error(codes.Unimplemented, "method MarkInboxSectionRead not implemented") } func (UnimplementedMessageInboxServiceServer) DeleteInboxMessage(context.Context, *DeleteInboxMessageRequest) (*DeleteInboxMessageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteInboxMessage not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteInboxMessage not implemented") } func (UnimplementedMessageInboxServiceServer) CreateInboxMessage(context.Context, *CreateInboxMessageRequest) (*CreateInboxMessageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateInboxMessage not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateInboxMessage not implemented") } func (UnimplementedMessageInboxServiceServer) CreateFanoutJob(context.Context, *CreateFanoutJobRequest) (*CreateFanoutJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateFanoutJob not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateFanoutJob not implemented") } func (UnimplementedMessageInboxServiceServer) mustEmbedUnimplementedMessageInboxServiceServer() {} func (UnimplementedMessageInboxServiceServer) testEmbeddedByValue() {} @@ -320,7 +320,7 @@ type UnsafeMessageInboxServiceServer interface { } func RegisterMessageInboxServiceServer(s grpc.ServiceRegistrar, srv MessageInboxServiceServer) { - // If the following call pancis, it indicates UnimplementedMessageInboxServiceServer was + // If the following call panics, it indicates UnimplementedMessageInboxServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -584,16 +584,16 @@ type MessageActionConfirmServiceServer interface { type UnimplementedMessageActionConfirmServiceServer struct{} func (UnimplementedMessageActionConfirmServiceServer) AcceptActionConfirm(context.Context, *AcceptActionConfirmRequest) (*AcceptActionConfirmResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AcceptActionConfirm not implemented") + return nil, status.Error(codes.Unimplemented, "method AcceptActionConfirm not implemented") } func (UnimplementedMessageActionConfirmServiceServer) RejectActionConfirm(context.Context, *RejectActionConfirmRequest) (*RejectActionConfirmResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RejectActionConfirm not implemented") + return nil, status.Error(codes.Unimplemented, "method RejectActionConfirm not implemented") } func (UnimplementedMessageActionConfirmServiceServer) BatchGetActionConfirmStatus(context.Context, *BatchGetActionConfirmStatusRequest) (*BatchGetActionConfirmStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetActionConfirmStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetActionConfirmStatus not implemented") } func (UnimplementedMessageActionConfirmServiceServer) ListConversationActionConfirms(context.Context, *ListConversationActionConfirmsRequest) (*ListConversationActionConfirmsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListConversationActionConfirms not implemented") + return nil, status.Error(codes.Unimplemented, "method ListConversationActionConfirms not implemented") } func (UnimplementedMessageActionConfirmServiceServer) mustEmbedUnimplementedMessageActionConfirmServiceServer() { } @@ -607,7 +607,7 @@ type UnsafeMessageActionConfirmServiceServer interface { } func RegisterMessageActionConfirmServiceServer(s grpc.ServiceRegistrar, srv MessageActionConfirmServiceServer) { - // If the following call pancis, it indicates UnimplementedMessageActionConfirmServiceServer was + // If the following call panics, it indicates UnimplementedMessageActionConfirmServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -726,6 +726,7 @@ const ( ActivityCronService_ProcessWeeklyStarSettlementBatch_FullMethodName = "/hyapp.activity.v1.ActivityCronService/ProcessWeeklyStarSettlementBatch" ActivityCronService_ProcessCPWeeklyRankSettlementBatch_FullMethodName = "/hyapp.activity.v1.ActivityCronService/ProcessCPWeeklyRankSettlementBatch" ActivityCronService_ProcessAgencyOpeningSettlementBatch_FullMethodName = "/hyapp.activity.v1.ActivityCronService/ProcessAgencyOpeningSettlementBatch" + ActivityCronService_ProcessActivityTemplateSettlementBatch_FullMethodName = "/hyapp.activity.v1.ActivityCronService/ProcessActivityTemplateSettlementBatch" ) // ActivityCronServiceClient is the client API for ActivityCronService service. @@ -742,6 +743,7 @@ type ActivityCronServiceClient interface { ProcessWeeklyStarSettlementBatch(ctx context.Context, in *CronBatchRequest, opts ...grpc.CallOption) (*CronBatchResponse, error) ProcessCPWeeklyRankSettlementBatch(ctx context.Context, in *CronBatchRequest, opts ...grpc.CallOption) (*CronBatchResponse, error) ProcessAgencyOpeningSettlementBatch(ctx context.Context, in *CronBatchRequest, opts ...grpc.CallOption) (*CronBatchResponse, error) + ProcessActivityTemplateSettlementBatch(ctx context.Context, in *CronBatchRequest, opts ...grpc.CallOption) (*CronBatchResponse, error) } type activityCronServiceClient struct { @@ -832,6 +834,16 @@ func (c *activityCronServiceClient) ProcessAgencyOpeningSettlementBatch(ctx cont return out, nil } +func (c *activityCronServiceClient) ProcessActivityTemplateSettlementBatch(ctx context.Context, in *CronBatchRequest, opts ...grpc.CallOption) (*CronBatchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CronBatchResponse) + err := c.cc.Invoke(ctx, ActivityCronService_ProcessActivityTemplateSettlementBatch_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // ActivityCronServiceServer is the server API for ActivityCronService service. // All implementations must embed UnimplementedActivityCronServiceServer // for forward compatibility. @@ -846,6 +858,7 @@ type ActivityCronServiceServer interface { ProcessWeeklyStarSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) ProcessCPWeeklyRankSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) ProcessAgencyOpeningSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) + ProcessActivityTemplateSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) mustEmbedUnimplementedActivityCronServiceServer() } @@ -857,28 +870,31 @@ type ActivityCronServiceServer interface { type UnimplementedActivityCronServiceServer struct{} func (UnimplementedActivityCronServiceServer) ProcessMessageFanoutBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessMessageFanoutBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessMessageFanoutBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessLevelRewardBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessLevelRewardBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessLevelRewardBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessTemporaryLevelBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessTemporaryLevelBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessTemporaryLevelBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessAchievementRewardBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessAchievementRewardBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessAchievementRewardBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessRoomTurnoverRewardSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessRoomTurnoverRewardSettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessRoomTurnoverRewardSettlementBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessWeeklyStarSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessWeeklyStarSettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessWeeklyStarSettlementBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessCPWeeklyRankSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessCPWeeklyRankSettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessCPWeeklyRankSettlementBatch not implemented") } func (UnimplementedActivityCronServiceServer) ProcessAgencyOpeningSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessAgencyOpeningSettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessAgencyOpeningSettlementBatch not implemented") +} +func (UnimplementedActivityCronServiceServer) ProcessActivityTemplateSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ProcessActivityTemplateSettlementBatch not implemented") } func (UnimplementedActivityCronServiceServer) mustEmbedUnimplementedActivityCronServiceServer() {} func (UnimplementedActivityCronServiceServer) testEmbeddedByValue() {} @@ -891,7 +907,7 @@ type UnsafeActivityCronServiceServer interface { } func RegisterActivityCronServiceServer(s grpc.ServiceRegistrar, srv ActivityCronServiceServer) { - // If the following call pancis, it indicates UnimplementedActivityCronServiceServer was + // If the following call panics, it indicates UnimplementedActivityCronServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1045,6 +1061,24 @@ func _ActivityCronService_ProcessAgencyOpeningSettlementBatch_Handler(srv interf return interceptor(ctx, in, info, handler) } +func _ActivityCronService_ProcessActivityTemplateSettlementBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CronBatchRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityCronServiceServer).ProcessActivityTemplateSettlementBatch(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityCronService_ProcessActivityTemplateSettlementBatch_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityCronServiceServer).ProcessActivityTemplateSettlementBatch(ctx, req.(*CronBatchRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ActivityCronService_ServiceDesc is the grpc.ServiceDesc for ActivityCronService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1084,6 +1118,269 @@ var ActivityCronService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ProcessAgencyOpeningSettlementBatch", Handler: _ActivityCronService_ProcessAgencyOpeningSettlementBatch_Handler, }, + { + MethodName: "ProcessActivityTemplateSettlementBatch", + Handler: _ActivityCronService_ProcessActivityTemplateSettlementBatch_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/activity/v1/activity.proto", +} + +const ( + ActivityTemplateRuntimeService_GetCurrentActivityTemplate_FullMethodName = "/hyapp.activity.v1.ActivityTemplateRuntimeService/GetCurrentActivityTemplate" + ActivityTemplateRuntimeService_VisitActivityTemplate_FullMethodName = "/hyapp.activity.v1.ActivityTemplateRuntimeService/VisitActivityTemplate" + ActivityTemplateRuntimeService_ListActivityTemplateTasks_FullMethodName = "/hyapp.activity.v1.ActivityTemplateRuntimeService/ListActivityTemplateTasks" + ActivityTemplateRuntimeService_ClaimActivityTemplateTaskReward_FullMethodName = "/hyapp.activity.v1.ActivityTemplateRuntimeService/ClaimActivityTemplateTaskReward" + ActivityTemplateRuntimeService_ListActivityTemplateLeaderboard_FullMethodName = "/hyapp.activity.v1.ActivityTemplateRuntimeService/ListActivityTemplateLeaderboard" +) + +// ActivityTemplateRuntimeServiceClient is the client API for ActivityTemplateRuntimeService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// ActivityTemplateRuntimeService 是 App/H5 读取已发布版本、任务进度、榜单和领奖的 owner 入口。 +type ActivityTemplateRuntimeServiceClient interface { + GetCurrentActivityTemplate(ctx context.Context, in *GetCurrentActivityTemplateRequest, opts ...grpc.CallOption) (*GetCurrentActivityTemplateResponse, error) + VisitActivityTemplate(ctx context.Context, in *VisitActivityTemplateRequest, opts ...grpc.CallOption) (*VisitActivityTemplateResponse, error) + ListActivityTemplateTasks(ctx context.Context, in *ListActivityTemplateTasksRequest, opts ...grpc.CallOption) (*ListActivityTemplateTasksResponse, error) + ClaimActivityTemplateTaskReward(ctx context.Context, in *ClaimActivityTemplateTaskRewardRequest, opts ...grpc.CallOption) (*ClaimActivityTemplateTaskRewardResponse, error) + ListActivityTemplateLeaderboard(ctx context.Context, in *ListActivityTemplateLeaderboardRequest, opts ...grpc.CallOption) (*ListActivityTemplateLeaderboardResponse, error) +} + +type activityTemplateRuntimeServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewActivityTemplateRuntimeServiceClient(cc grpc.ClientConnInterface) ActivityTemplateRuntimeServiceClient { + return &activityTemplateRuntimeServiceClient{cc} +} + +func (c *activityTemplateRuntimeServiceClient) GetCurrentActivityTemplate(ctx context.Context, in *GetCurrentActivityTemplateRequest, opts ...grpc.CallOption) (*GetCurrentActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetCurrentActivityTemplateResponse) + err := c.cc.Invoke(ctx, ActivityTemplateRuntimeService_GetCurrentActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *activityTemplateRuntimeServiceClient) VisitActivityTemplate(ctx context.Context, in *VisitActivityTemplateRequest, opts ...grpc.CallOption) (*VisitActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VisitActivityTemplateResponse) + err := c.cc.Invoke(ctx, ActivityTemplateRuntimeService_VisitActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *activityTemplateRuntimeServiceClient) ListActivityTemplateTasks(ctx context.Context, in *ListActivityTemplateTasksRequest, opts ...grpc.CallOption) (*ListActivityTemplateTasksResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplateTasksResponse) + err := c.cc.Invoke(ctx, ActivityTemplateRuntimeService_ListActivityTemplateTasks_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *activityTemplateRuntimeServiceClient) ClaimActivityTemplateTaskReward(ctx context.Context, in *ClaimActivityTemplateTaskRewardRequest, opts ...grpc.CallOption) (*ClaimActivityTemplateTaskRewardResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ClaimActivityTemplateTaskRewardResponse) + err := c.cc.Invoke(ctx, ActivityTemplateRuntimeService_ClaimActivityTemplateTaskReward_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *activityTemplateRuntimeServiceClient) ListActivityTemplateLeaderboard(ctx context.Context, in *ListActivityTemplateLeaderboardRequest, opts ...grpc.CallOption) (*ListActivityTemplateLeaderboardResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplateLeaderboardResponse) + err := c.cc.Invoke(ctx, ActivityTemplateRuntimeService_ListActivityTemplateLeaderboard_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ActivityTemplateRuntimeServiceServer is the server API for ActivityTemplateRuntimeService service. +// All implementations must embed UnimplementedActivityTemplateRuntimeServiceServer +// for forward compatibility. +// +// ActivityTemplateRuntimeService 是 App/H5 读取已发布版本、任务进度、榜单和领奖的 owner 入口。 +type ActivityTemplateRuntimeServiceServer interface { + GetCurrentActivityTemplate(context.Context, *GetCurrentActivityTemplateRequest) (*GetCurrentActivityTemplateResponse, error) + VisitActivityTemplate(context.Context, *VisitActivityTemplateRequest) (*VisitActivityTemplateResponse, error) + ListActivityTemplateTasks(context.Context, *ListActivityTemplateTasksRequest) (*ListActivityTemplateTasksResponse, error) + ClaimActivityTemplateTaskReward(context.Context, *ClaimActivityTemplateTaskRewardRequest) (*ClaimActivityTemplateTaskRewardResponse, error) + ListActivityTemplateLeaderboard(context.Context, *ListActivityTemplateLeaderboardRequest) (*ListActivityTemplateLeaderboardResponse, error) + mustEmbedUnimplementedActivityTemplateRuntimeServiceServer() +} + +// UnimplementedActivityTemplateRuntimeServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedActivityTemplateRuntimeServiceServer struct{} + +func (UnimplementedActivityTemplateRuntimeServiceServer) GetCurrentActivityTemplate(context.Context, *GetCurrentActivityTemplateRequest) (*GetCurrentActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetCurrentActivityTemplate not implemented") +} +func (UnimplementedActivityTemplateRuntimeServiceServer) VisitActivityTemplate(context.Context, *VisitActivityTemplateRequest) (*VisitActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method VisitActivityTemplate not implemented") +} +func (UnimplementedActivityTemplateRuntimeServiceServer) ListActivityTemplateTasks(context.Context, *ListActivityTemplateTasksRequest) (*ListActivityTemplateTasksResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateTasks not implemented") +} +func (UnimplementedActivityTemplateRuntimeServiceServer) ClaimActivityTemplateTaskReward(context.Context, *ClaimActivityTemplateTaskRewardRequest) (*ClaimActivityTemplateTaskRewardResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ClaimActivityTemplateTaskReward not implemented") +} +func (UnimplementedActivityTemplateRuntimeServiceServer) ListActivityTemplateLeaderboard(context.Context, *ListActivityTemplateLeaderboardRequest) (*ListActivityTemplateLeaderboardResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateLeaderboard not implemented") +} +func (UnimplementedActivityTemplateRuntimeServiceServer) mustEmbedUnimplementedActivityTemplateRuntimeServiceServer() { +} +func (UnimplementedActivityTemplateRuntimeServiceServer) testEmbeddedByValue() {} + +// UnsafeActivityTemplateRuntimeServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ActivityTemplateRuntimeServiceServer will +// result in compilation errors. +type UnsafeActivityTemplateRuntimeServiceServer interface { + mustEmbedUnimplementedActivityTemplateRuntimeServiceServer() +} + +func RegisterActivityTemplateRuntimeServiceServer(s grpc.ServiceRegistrar, srv ActivityTemplateRuntimeServiceServer) { + // If the following call panics, it indicates UnimplementedActivityTemplateRuntimeServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&ActivityTemplateRuntimeService_ServiceDesc, srv) +} + +func _ActivityTemplateRuntimeService_GetCurrentActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCurrentActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityTemplateRuntimeServiceServer).GetCurrentActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityTemplateRuntimeService_GetCurrentActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityTemplateRuntimeServiceServer).GetCurrentActivityTemplate(ctx, req.(*GetCurrentActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActivityTemplateRuntimeService_VisitActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisitActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityTemplateRuntimeServiceServer).VisitActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityTemplateRuntimeService_VisitActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityTemplateRuntimeServiceServer).VisitActivityTemplate(ctx, req.(*VisitActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActivityTemplateRuntimeService_ListActivityTemplateTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplateTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityTemplateRuntimeServiceServer).ListActivityTemplateTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityTemplateRuntimeService_ListActivityTemplateTasks_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityTemplateRuntimeServiceServer).ListActivityTemplateTasks(ctx, req.(*ListActivityTemplateTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActivityTemplateRuntimeService_ClaimActivityTemplateTaskReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClaimActivityTemplateTaskRewardRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityTemplateRuntimeServiceServer).ClaimActivityTemplateTaskReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityTemplateRuntimeService_ClaimActivityTemplateTaskReward_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityTemplateRuntimeServiceServer).ClaimActivityTemplateTaskReward(ctx, req.(*ClaimActivityTemplateTaskRewardRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActivityTemplateRuntimeService_ListActivityTemplateLeaderboard_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplateLeaderboardRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActivityTemplateRuntimeServiceServer).ListActivityTemplateLeaderboard(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActivityTemplateRuntimeService_ListActivityTemplateLeaderboard_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActivityTemplateRuntimeServiceServer).ListActivityTemplateLeaderboard(ctx, req.(*ListActivityTemplateLeaderboardRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// ActivityTemplateRuntimeService_ServiceDesc is the grpc.ServiceDesc for ActivityTemplateRuntimeService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ActivityTemplateRuntimeService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "hyapp.activity.v1.ActivityTemplateRuntimeService", + HandlerType: (*ActivityTemplateRuntimeServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetCurrentActivityTemplate", + Handler: _ActivityTemplateRuntimeService_GetCurrentActivityTemplate_Handler, + }, + { + MethodName: "VisitActivityTemplate", + Handler: _ActivityTemplateRuntimeService_VisitActivityTemplate_Handler, + }, + { + MethodName: "ListActivityTemplateTasks", + Handler: _ActivityTemplateRuntimeService_ListActivityTemplateTasks_Handler, + }, + { + MethodName: "ClaimActivityTemplateTaskReward", + Handler: _ActivityTemplateRuntimeService_ClaimActivityTemplateTaskReward_Handler, + }, + { + MethodName: "ListActivityTemplateLeaderboard", + Handler: _ActivityTemplateRuntimeService_ListActivityTemplateLeaderboard_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "proto/activity/v1/activity.proto", @@ -1164,13 +1461,13 @@ type TaskServiceServer interface { type UnimplementedTaskServiceServer struct{} func (UnimplementedTaskServiceServer) ListUserTasks(context.Context, *ListUserTasksRequest) (*ListUserTasksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListUserTasks not implemented") + return nil, status.Error(codes.Unimplemented, "method ListUserTasks not implemented") } func (UnimplementedTaskServiceServer) ClaimTaskReward(context.Context, *ClaimTaskRewardRequest) (*ClaimTaskRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ClaimTaskReward not implemented") + return nil, status.Error(codes.Unimplemented, "method ClaimTaskReward not implemented") } func (UnimplementedTaskServiceServer) ConsumeTaskEvent(context.Context, *ConsumeTaskEventRequest) (*ConsumeTaskEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeTaskEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeTaskEvent not implemented") } func (UnimplementedTaskServiceServer) mustEmbedUnimplementedTaskServiceServer() {} func (UnimplementedTaskServiceServer) testEmbeddedByValue() {} @@ -1183,7 +1480,7 @@ type UnsafeTaskServiceServer interface { } func RegisterTaskServiceServer(s grpc.ServiceRegistrar, srv TaskServiceServer) { - // If the following call pancis, it indicates UnimplementedTaskServiceServer was + // If the following call panics, it indicates UnimplementedTaskServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1398,25 +1695,25 @@ type GrowthLevelServiceServer interface { type UnimplementedGrowthLevelServiceServer struct{} func (UnimplementedGrowthLevelServiceServer) GetMyLevelOverview(context.Context, *GetMyLevelOverviewRequest) (*GetMyLevelOverviewResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMyLevelOverview not implemented") + return nil, status.Error(codes.Unimplemented, "method GetMyLevelOverview not implemented") } func (UnimplementedGrowthLevelServiceServer) GetLevelTrack(context.Context, *GetLevelTrackRequest) (*GetLevelTrackResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLevelTrack not implemented") + return nil, status.Error(codes.Unimplemented, "method GetLevelTrack not implemented") } func (UnimplementedGrowthLevelServiceServer) BatchGetUserLevelDisplayProfiles(context.Context, *BatchGetUserLevelDisplayProfilesRequest) (*BatchGetUserLevelDisplayProfilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUserLevelDisplayProfiles not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUserLevelDisplayProfiles not implemented") } func (UnimplementedGrowthLevelServiceServer) ListLevelRewards(context.Context, *ListLevelRewardsRequest) (*ListLevelRewardsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLevelRewards not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLevelRewards not implemented") } func (UnimplementedGrowthLevelServiceServer) ConsumeLevelEvent(context.Context, *ConsumeLevelEventRequest) (*ConsumeLevelEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeLevelEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeLevelEvent not implemented") } func (UnimplementedGrowthLevelServiceServer) SetUserLevel(context.Context, *SetUserLevelRequest) (*SetUserLevelResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetUserLevel not implemented") + return nil, status.Error(codes.Unimplemented, "method SetUserLevel not implemented") } func (UnimplementedGrowthLevelServiceServer) IssueRegistrationLevelBadges(context.Context, *IssueRegistrationLevelBadgesRequest) (*IssueRegistrationLevelBadgesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method IssueRegistrationLevelBadges not implemented") + return nil, status.Error(codes.Unimplemented, "method IssueRegistrationLevelBadges not implemented") } func (UnimplementedGrowthLevelServiceServer) mustEmbedUnimplementedGrowthLevelServiceServer() {} func (UnimplementedGrowthLevelServiceServer) testEmbeddedByValue() {} @@ -1429,7 +1726,7 @@ type UnsafeGrowthLevelServiceServer interface { } func RegisterGrowthLevelServiceServer(s grpc.ServiceRegistrar, srv GrowthLevelServiceServer) { - // If the following call pancis, it indicates UnimplementedGrowthLevelServiceServer was + // If the following call panics, it indicates UnimplementedGrowthLevelServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1693,16 +1990,16 @@ type AchievementServiceServer interface { type UnimplementedAchievementServiceServer struct{} func (UnimplementedAchievementServiceServer) ListAchievements(context.Context, *ListAchievementsRequest) (*ListAchievementsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAchievements not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAchievements not implemented") } func (UnimplementedAchievementServiceServer) ConsumeAchievementEvent(context.Context, *ConsumeAchievementEventRequest) (*ConsumeAchievementEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeAchievementEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeAchievementEvent not implemented") } func (UnimplementedAchievementServiceServer) ListMyBadges(context.Context, *ListMyBadgesRequest) (*ListMyBadgesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListMyBadges not implemented") + return nil, status.Error(codes.Unimplemented, "method ListMyBadges not implemented") } func (UnimplementedAchievementServiceServer) SetBadgeDisplay(context.Context, *SetBadgeDisplayRequest) (*SetBadgeDisplayResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetBadgeDisplay not implemented") + return nil, status.Error(codes.Unimplemented, "method SetBadgeDisplay not implemented") } func (UnimplementedAchievementServiceServer) mustEmbedUnimplementedAchievementServiceServer() {} func (UnimplementedAchievementServiceServer) testEmbeddedByValue() {} @@ -1715,7 +2012,7 @@ type UnsafeAchievementServiceServer interface { } func RegisterAchievementServiceServer(s grpc.ServiceRegistrar, srv AchievementServiceServer) { - // If the following call pancis, it indicates UnimplementedAchievementServiceServer was + // If the following call panics, it indicates UnimplementedAchievementServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1874,7 +2171,7 @@ type WheelServiceServer interface { type UnimplementedWheelServiceServer struct{} func (UnimplementedWheelServiceServer) ExecuteWheelDraw(context.Context, *ExecuteWheelDrawRequest) (*ExecuteWheelDrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExecuteWheelDraw not implemented") + return nil, status.Error(codes.Unimplemented, "method ExecuteWheelDraw not implemented") } func (UnimplementedWheelServiceServer) mustEmbedUnimplementedWheelServiceServer() {} func (UnimplementedWheelServiceServer) testEmbeddedByValue() {} @@ -1887,7 +2184,7 @@ type UnsafeWheelServiceServer interface { } func RegisterWheelServiceServer(s grpc.ServiceRegistrar, srv WheelServiceServer) { - // If the following call pancis, it indicates UnimplementedWheelServiceServer was + // If the following call panics, it indicates UnimplementedWheelServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1980,7 +2277,7 @@ type RoomTurnoverRewardServiceServer interface { type UnimplementedRoomTurnoverRewardServiceServer struct{} func (UnimplementedRoomTurnoverRewardServiceServer) GetRoomTurnoverRewardStatus(context.Context, *GetRoomTurnoverRewardStatusRequest) (*GetRoomTurnoverRewardStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomTurnoverRewardStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomTurnoverRewardStatus not implemented") } func (UnimplementedRoomTurnoverRewardServiceServer) mustEmbedUnimplementedRoomTurnoverRewardServiceServer() { } @@ -1994,7 +2291,7 @@ type UnsafeRoomTurnoverRewardServiceServer interface { } func RegisterRoomTurnoverRewardServiceServer(s grpc.ServiceRegistrar, srv RoomTurnoverRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomTurnoverRewardServiceServer was + // If the following call panics, it indicates UnimplementedRoomTurnoverRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2113,13 +2410,13 @@ type WeeklyStarServiceServer interface { type UnimplementedWeeklyStarServiceServer struct{} func (UnimplementedWeeklyStarServiceServer) GetWeeklyStarCurrent(context.Context, *GetWeeklyStarCurrentRequest) (*GetWeeklyStarCurrentResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWeeklyStarCurrent not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWeeklyStarCurrent not implemented") } func (UnimplementedWeeklyStarServiceServer) ListWeeklyStarLeaderboard(context.Context, *ListWeeklyStarLeaderboardRequest) (*ListWeeklyStarLeaderboardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWeeklyStarLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWeeklyStarLeaderboard not implemented") } func (UnimplementedWeeklyStarServiceServer) ListWeeklyStarHistory(context.Context, *ListWeeklyStarHistoryRequest) (*ListWeeklyStarHistoryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWeeklyStarHistory not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWeeklyStarHistory not implemented") } func (UnimplementedWeeklyStarServiceServer) mustEmbedUnimplementedWeeklyStarServiceServer() {} func (UnimplementedWeeklyStarServiceServer) testEmbeddedByValue() {} @@ -2132,7 +2429,7 @@ type UnsafeWeeklyStarServiceServer interface { } func RegisterWeeklyStarServiceServer(s grpc.ServiceRegistrar, srv WeeklyStarServiceServer) { - // If the following call pancis, it indicates UnimplementedWeeklyStarServiceServer was + // If the following call panics, it indicates UnimplementedWeeklyStarServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2269,7 +2566,7 @@ type CPWeeklyRankServiceServer interface { type UnimplementedCPWeeklyRankServiceServer struct{} func (UnimplementedCPWeeklyRankServiceServer) GetCPWeeklyRankStatus(context.Context, *GetCPWeeklyRankStatusRequest) (*GetCPWeeklyRankStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCPWeeklyRankStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCPWeeklyRankStatus not implemented") } func (UnimplementedCPWeeklyRankServiceServer) mustEmbedUnimplementedCPWeeklyRankServiceServer() {} func (UnimplementedCPWeeklyRankServiceServer) testEmbeddedByValue() {} @@ -2282,7 +2579,7 @@ type UnsafeCPWeeklyRankServiceServer interface { } func RegisterCPWeeklyRankServiceServer(s grpc.ServiceRegistrar, srv CPWeeklyRankServiceServer) { - // If the following call pancis, it indicates UnimplementedCPWeeklyRankServiceServer was + // If the following call panics, it indicates UnimplementedCPWeeklyRankServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2401,13 +2698,13 @@ type AgencyOpeningServiceServer interface { type UnimplementedAgencyOpeningServiceServer struct{} func (UnimplementedAgencyOpeningServiceServer) GetAgencyOpeningStatus(context.Context, *GetAgencyOpeningStatusRequest) (*GetAgencyOpeningStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyOpeningStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyOpeningStatus not implemented") } func (UnimplementedAgencyOpeningServiceServer) ApplyAgencyOpening(context.Context, *ApplyAgencyOpeningRequest) (*ApplyAgencyOpeningResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyAgencyOpening not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyAgencyOpening not implemented") } func (UnimplementedAgencyOpeningServiceServer) ListAgencyOpeningLeaderboard(context.Context, *ListAgencyOpeningApplicationsRequest) (*ListAgencyOpeningApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAgencyOpeningLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAgencyOpeningLeaderboard not implemented") } func (UnimplementedAgencyOpeningServiceServer) mustEmbedUnimplementedAgencyOpeningServiceServer() {} func (UnimplementedAgencyOpeningServiceServer) testEmbeddedByValue() {} @@ -2420,7 +2717,7 @@ type UnsafeAgencyOpeningServiceServer interface { } func RegisterAgencyOpeningServiceServer(s grpc.ServiceRegistrar, srv AgencyOpeningServiceServer) { - // If the following call pancis, it indicates UnimplementedAgencyOpeningServiceServer was + // If the following call panics, it indicates UnimplementedAgencyOpeningServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2609,19 +2906,19 @@ type BroadcastServiceServer interface { type UnimplementedBroadcastServiceServer struct{} func (UnimplementedBroadcastServiceServer) EnsureBroadcastGroups(context.Context, *EnsureBroadcastGroupsRequest) (*EnsureBroadcastGroupsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EnsureBroadcastGroups not implemented") + return nil, status.Error(codes.Unimplemented, "method EnsureBroadcastGroups not implemented") } func (UnimplementedBroadcastServiceServer) PublishRegionBroadcast(context.Context, *PublishRegionBroadcastRequest) (*PublishBroadcastResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PublishRegionBroadcast not implemented") + return nil, status.Error(codes.Unimplemented, "method PublishRegionBroadcast not implemented") } func (UnimplementedBroadcastServiceServer) PublishGlobalBroadcast(context.Context, *PublishGlobalBroadcastRequest) (*PublishBroadcastResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PublishGlobalBroadcast not implemented") + return nil, status.Error(codes.Unimplemented, "method PublishGlobalBroadcast not implemented") } func (UnimplementedBroadcastServiceServer) RemoveRegionBroadcastMember(context.Context, *RemoveRegionBroadcastMemberRequest) (*RemoveRegionBroadcastMemberResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveRegionBroadcastMember not implemented") + return nil, status.Error(codes.Unimplemented, "method RemoveRegionBroadcastMember not implemented") } func (UnimplementedBroadcastServiceServer) ProcessBroadcastOutboxBatch(context.Context, *CronBatchRequest) (*ProcessBroadcastOutboxBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessBroadcastOutboxBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessBroadcastOutboxBatch not implemented") } func (UnimplementedBroadcastServiceServer) mustEmbedUnimplementedBroadcastServiceServer() {} func (UnimplementedBroadcastServiceServer) testEmbeddedByValue() {} @@ -2634,7 +2931,7 @@ type UnsafeBroadcastServiceServer interface { } func RegisterBroadcastServiceServer(s grpc.ServiceRegistrar, srv BroadcastServiceServer) { - // If the following call pancis, it indicates UnimplementedBroadcastServiceServer was + // If the following call panics, it indicates UnimplementedBroadcastServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2815,7 +3112,7 @@ type RoomEventConsumerServiceServer interface { type UnimplementedRoomEventConsumerServiceServer struct{} func (UnimplementedRoomEventConsumerServiceServer) ConsumeRoomEvent(context.Context, *ConsumeRoomEventRequest) (*ConsumeRoomEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeRoomEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeRoomEvent not implemented") } func (UnimplementedRoomEventConsumerServiceServer) mustEmbedUnimplementedRoomEventConsumerServiceServer() { } @@ -2829,7 +3126,7 @@ type UnsafeRoomEventConsumerServiceServer interface { } func RegisterRoomEventConsumerServiceServer(s grpc.ServiceRegistrar, srv RoomEventConsumerServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomEventConsumerServiceServer was + // If the following call panics, it indicates UnimplementedRoomEventConsumerServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2961,16 +3258,16 @@ type AdminTaskServiceServer interface { type UnimplementedAdminTaskServiceServer struct{} func (UnimplementedAdminTaskServiceServer) ListTaskDefinitions(context.Context, *ListTaskDefinitionsRequest) (*ListTaskDefinitionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTaskDefinitions not implemented") + return nil, status.Error(codes.Unimplemented, "method ListTaskDefinitions not implemented") } func (UnimplementedAdminTaskServiceServer) UpsertTaskDefinition(context.Context, *UpsertTaskDefinitionRequest) (*UpsertTaskDefinitionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertTaskDefinition not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertTaskDefinition not implemented") } func (UnimplementedAdminTaskServiceServer) SetTaskDefinitionStatus(context.Context, *SetTaskDefinitionStatusRequest) (*SetTaskDefinitionStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetTaskDefinitionStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetTaskDefinitionStatus not implemented") } func (UnimplementedAdminTaskServiceServer) PublishTaskRewardPolicy(context.Context, *PublishTaskRewardPolicyRequest) (*PublishTaskRewardPolicyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PublishTaskRewardPolicy not implemented") + return nil, status.Error(codes.Unimplemented, "method PublishTaskRewardPolicy not implemented") } func (UnimplementedAdminTaskServiceServer) mustEmbedUnimplementedAdminTaskServiceServer() {} func (UnimplementedAdminTaskServiceServer) testEmbeddedByValue() {} @@ -2983,7 +3280,7 @@ type UnsafeAdminTaskServiceServer interface { } func RegisterAdminTaskServiceServer(s grpc.ServiceRegistrar, srv AdminTaskServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminTaskServiceServer was + // If the following call panics, it indicates UnimplementedAdminTaskServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3155,10 +3452,10 @@ type RegistrationRewardServiceServer interface { type UnimplementedRegistrationRewardServiceServer struct{} func (UnimplementedRegistrationRewardServiceServer) GetRegistrationRewardEligibility(context.Context, *GetRegistrationRewardEligibilityRequest) (*GetRegistrationRewardEligibilityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRegistrationRewardEligibility not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRegistrationRewardEligibility not implemented") } func (UnimplementedRegistrationRewardServiceServer) IssueRegistrationReward(context.Context, *IssueRegistrationRewardRequest) (*IssueRegistrationRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method IssueRegistrationReward not implemented") + return nil, status.Error(codes.Unimplemented, "method IssueRegistrationReward not implemented") } func (UnimplementedRegistrationRewardServiceServer) mustEmbedUnimplementedRegistrationRewardServiceServer() { } @@ -3172,7 +3469,7 @@ type UnsafeRegistrationRewardServiceServer interface { } func RegisterRegistrationRewardServiceServer(s grpc.ServiceRegistrar, srv RegistrationRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedRegistrationRewardServiceServer was + // If the following call panics, it indicates UnimplementedRegistrationRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3313,13 +3610,13 @@ type AdminRegistrationRewardServiceServer interface { type UnimplementedAdminRegistrationRewardServiceServer struct{} func (UnimplementedAdminRegistrationRewardServiceServer) GetRegistrationRewardConfig(context.Context, *GetRegistrationRewardConfigRequest) (*GetRegistrationRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRegistrationRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRegistrationRewardConfig not implemented") } func (UnimplementedAdminRegistrationRewardServiceServer) UpdateRegistrationRewardConfig(context.Context, *UpdateRegistrationRewardConfigRequest) (*UpdateRegistrationRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRegistrationRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRegistrationRewardConfig not implemented") } func (UnimplementedAdminRegistrationRewardServiceServer) ListRegistrationRewardClaims(context.Context, *ListRegistrationRewardClaimsRequest) (*ListRegistrationRewardClaimsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRegistrationRewardClaims not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRegistrationRewardClaims not implemented") } func (UnimplementedAdminRegistrationRewardServiceServer) mustEmbedUnimplementedAdminRegistrationRewardServiceServer() { } @@ -3333,7 +3630,7 @@ type UnsafeAdminRegistrationRewardServiceServer interface { } func RegisterAdminRegistrationRewardServiceServer(s grpc.ServiceRegistrar, srv AdminRegistrationRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminRegistrationRewardServiceServer was + // If the following call panics, it indicates UnimplementedAdminRegistrationRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3483,10 +3780,10 @@ type FirstRechargeRewardServiceServer interface { type UnimplementedFirstRechargeRewardServiceServer struct{} func (UnimplementedFirstRechargeRewardServiceServer) GetFirstRechargeRewardStatus(context.Context, *GetFirstRechargeRewardStatusRequest) (*GetFirstRechargeRewardStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetFirstRechargeRewardStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetFirstRechargeRewardStatus not implemented") } func (UnimplementedFirstRechargeRewardServiceServer) ConsumeFirstRechargeReward(context.Context, *ConsumeFirstRechargeRewardRequest) (*ConsumeFirstRechargeRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeFirstRechargeReward not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeFirstRechargeReward not implemented") } func (UnimplementedFirstRechargeRewardServiceServer) mustEmbedUnimplementedFirstRechargeRewardServiceServer() { } @@ -3500,7 +3797,7 @@ type UnsafeFirstRechargeRewardServiceServer interface { } func RegisterFirstRechargeRewardServiceServer(s grpc.ServiceRegistrar, srv FirstRechargeRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedFirstRechargeRewardServiceServer was + // If the following call panics, it indicates UnimplementedFirstRechargeRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3641,13 +3938,13 @@ type AdminFirstRechargeRewardServiceServer interface { type UnimplementedAdminFirstRechargeRewardServiceServer struct{} func (UnimplementedAdminFirstRechargeRewardServiceServer) GetFirstRechargeRewardConfig(context.Context, *GetFirstRechargeRewardConfigRequest) (*GetFirstRechargeRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetFirstRechargeRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetFirstRechargeRewardConfig not implemented") } func (UnimplementedAdminFirstRechargeRewardServiceServer) UpdateFirstRechargeRewardConfig(context.Context, *UpdateFirstRechargeRewardConfigRequest) (*UpdateFirstRechargeRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFirstRechargeRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateFirstRechargeRewardConfig not implemented") } func (UnimplementedAdminFirstRechargeRewardServiceServer) ListFirstRechargeRewardClaims(context.Context, *ListFirstRechargeRewardClaimsRequest) (*ListFirstRechargeRewardClaimsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListFirstRechargeRewardClaims not implemented") + return nil, status.Error(codes.Unimplemented, "method ListFirstRechargeRewardClaims not implemented") } func (UnimplementedAdminFirstRechargeRewardServiceServer) mustEmbedUnimplementedAdminFirstRechargeRewardServiceServer() { } @@ -3661,7 +3958,7 @@ type UnsafeAdminFirstRechargeRewardServiceServer interface { } func RegisterAdminFirstRechargeRewardServiceServer(s grpc.ServiceRegistrar, srv AdminFirstRechargeRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminFirstRechargeRewardServiceServer was + // If the following call panics, it indicates UnimplementedAdminFirstRechargeRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3811,10 +4108,10 @@ type CumulativeRechargeRewardServiceServer interface { type UnimplementedCumulativeRechargeRewardServiceServer struct{} func (UnimplementedCumulativeRechargeRewardServiceServer) GetCumulativeRechargeRewardStatus(context.Context, *GetCumulativeRechargeRewardStatusRequest) (*GetCumulativeRechargeRewardStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCumulativeRechargeRewardStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCumulativeRechargeRewardStatus not implemented") } func (UnimplementedCumulativeRechargeRewardServiceServer) ConsumeCumulativeRechargeReward(context.Context, *ConsumeCumulativeRechargeRewardRequest) (*ConsumeCumulativeRechargeRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeCumulativeRechargeReward not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeCumulativeRechargeReward not implemented") } func (UnimplementedCumulativeRechargeRewardServiceServer) mustEmbedUnimplementedCumulativeRechargeRewardServiceServer() { } @@ -3828,7 +4125,7 @@ type UnsafeCumulativeRechargeRewardServiceServer interface { } func RegisterCumulativeRechargeRewardServiceServer(s grpc.ServiceRegistrar, srv CumulativeRechargeRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedCumulativeRechargeRewardServiceServer was + // If the following call panics, it indicates UnimplementedCumulativeRechargeRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3969,13 +4266,13 @@ type InviteActivityRewardServiceServer interface { type UnimplementedInviteActivityRewardServiceServer struct{} func (UnimplementedInviteActivityRewardServiceServer) GetInviteActivityRewardStatus(context.Context, *GetInviteActivityRewardStatusRequest) (*GetInviteActivityRewardStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetInviteActivityRewardStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetInviteActivityRewardStatus not implemented") } func (UnimplementedInviteActivityRewardServiceServer) ClaimInviteActivityReward(context.Context, *ClaimInviteActivityRewardRequest) (*ClaimInviteActivityRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ClaimInviteActivityReward not implemented") + return nil, status.Error(codes.Unimplemented, "method ClaimInviteActivityReward not implemented") } func (UnimplementedInviteActivityRewardServiceServer) ListInviteActivityLeaderboard(context.Context, *ListInviteActivityLeaderboardRequest) (*ListInviteActivityLeaderboardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListInviteActivityLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListInviteActivityLeaderboard not implemented") } func (UnimplementedInviteActivityRewardServiceServer) mustEmbedUnimplementedInviteActivityRewardServiceServer() { } @@ -3989,7 +4286,7 @@ type UnsafeInviteActivityRewardServiceServer interface { } func RegisterInviteActivityRewardServiceServer(s grpc.ServiceRegistrar, srv InviteActivityRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedInviteActivityRewardServiceServer was + // If the following call panics, it indicates UnimplementedInviteActivityRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -4152,13 +4449,13 @@ type AdminCumulativeRechargeRewardServiceServer interface { type UnimplementedAdminCumulativeRechargeRewardServiceServer struct{} func (UnimplementedAdminCumulativeRechargeRewardServiceServer) GetCumulativeRechargeRewardConfig(context.Context, *GetCumulativeRechargeRewardConfigRequest) (*GetCumulativeRechargeRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCumulativeRechargeRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCumulativeRechargeRewardConfig not implemented") } func (UnimplementedAdminCumulativeRechargeRewardServiceServer) UpdateCumulativeRechargeRewardConfig(context.Context, *UpdateCumulativeRechargeRewardConfigRequest) (*UpdateCumulativeRechargeRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateCumulativeRechargeRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateCumulativeRechargeRewardConfig not implemented") } func (UnimplementedAdminCumulativeRechargeRewardServiceServer) ListCumulativeRechargeRewardGrants(context.Context, *ListCumulativeRechargeRewardGrantsRequest) (*ListCumulativeRechargeRewardGrantsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCumulativeRechargeRewardGrants not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCumulativeRechargeRewardGrants not implemented") } func (UnimplementedAdminCumulativeRechargeRewardServiceServer) mustEmbedUnimplementedAdminCumulativeRechargeRewardServiceServer() { } @@ -4172,7 +4469,7 @@ type UnsafeAdminCumulativeRechargeRewardServiceServer interface { } func RegisterAdminCumulativeRechargeRewardServiceServer(s grpc.ServiceRegistrar, srv AdminCumulativeRechargeRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminCumulativeRechargeRewardServiceServer was + // If the following call panics, it indicates UnimplementedAdminCumulativeRechargeRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -4348,16 +4645,16 @@ type AdminInviteActivityRewardServiceServer interface { type UnimplementedAdminInviteActivityRewardServiceServer struct{} func (UnimplementedAdminInviteActivityRewardServiceServer) GetInviteActivityRewardConfig(context.Context, *GetInviteActivityRewardConfigRequest) (*GetInviteActivityRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetInviteActivityRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetInviteActivityRewardConfig not implemented") } func (UnimplementedAdminInviteActivityRewardServiceServer) UpdateInviteActivityRewardConfig(context.Context, *UpdateInviteActivityRewardConfigRequest) (*UpdateInviteActivityRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateInviteActivityRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateInviteActivityRewardConfig not implemented") } func (UnimplementedAdminInviteActivityRewardServiceServer) ListInviteActivityRewardClaims(context.Context, *ListInviteActivityRewardClaimsRequest) (*ListInviteActivityRewardClaimsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListInviteActivityRewardClaims not implemented") + return nil, status.Error(codes.Unimplemented, "method ListInviteActivityRewardClaims not implemented") } func (UnimplementedAdminInviteActivityRewardServiceServer) ListInviteActivityRewardSummaries(context.Context, *ListInviteActivityRewardSummariesRequest) (*ListInviteActivityRewardSummariesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListInviteActivityRewardSummaries not implemented") + return nil, status.Error(codes.Unimplemented, "method ListInviteActivityRewardSummaries not implemented") } func (UnimplementedAdminInviteActivityRewardServiceServer) mustEmbedUnimplementedAdminInviteActivityRewardServiceServer() { } @@ -4371,7 +4668,7 @@ type UnsafeAdminInviteActivityRewardServiceServer interface { } func RegisterAdminInviteActivityRewardServiceServer(s grpc.ServiceRegistrar, srv AdminInviteActivityRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminInviteActivityRewardServiceServer was + // If the following call panics, it indicates UnimplementedAdminInviteActivityRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -4569,16 +4866,16 @@ type AdminRoomTurnoverRewardServiceServer interface { type UnimplementedAdminRoomTurnoverRewardServiceServer struct{} func (UnimplementedAdminRoomTurnoverRewardServiceServer) GetRoomTurnoverRewardConfig(context.Context, *GetRoomTurnoverRewardConfigRequest) (*GetRoomTurnoverRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomTurnoverRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomTurnoverRewardConfig not implemented") } func (UnimplementedAdminRoomTurnoverRewardServiceServer) UpdateRoomTurnoverRewardConfig(context.Context, *UpdateRoomTurnoverRewardConfigRequest) (*UpdateRoomTurnoverRewardConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRoomTurnoverRewardConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRoomTurnoverRewardConfig not implemented") } func (UnimplementedAdminRoomTurnoverRewardServiceServer) ListRoomTurnoverRewardSettlements(context.Context, *ListRoomTurnoverRewardSettlementsRequest) (*ListRoomTurnoverRewardSettlementsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomTurnoverRewardSettlements not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomTurnoverRewardSettlements not implemented") } func (UnimplementedAdminRoomTurnoverRewardServiceServer) RetryRoomTurnoverRewardSettlement(context.Context, *RetryRoomTurnoverRewardSettlementRequest) (*RetryRoomTurnoverRewardSettlementResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RetryRoomTurnoverRewardSettlement not implemented") + return nil, status.Error(codes.Unimplemented, "method RetryRoomTurnoverRewardSettlement not implemented") } func (UnimplementedAdminRoomTurnoverRewardServiceServer) mustEmbedUnimplementedAdminRoomTurnoverRewardServiceServer() { } @@ -4592,7 +4889,7 @@ type UnsafeAdminRoomTurnoverRewardServiceServer interface { } func RegisterAdminRoomTurnoverRewardServiceServer(s grpc.ServiceRegistrar, srv AdminRoomTurnoverRewardServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminRoomTurnoverRewardServiceServer was + // If the following call panics, it indicates UnimplementedAdminRoomTurnoverRewardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -4829,25 +5126,25 @@ type AdminWeeklyStarServiceServer interface { type UnimplementedAdminWeeklyStarServiceServer struct{} func (UnimplementedAdminWeeklyStarServiceServer) ListWeeklyStarCycles(context.Context, *ListWeeklyStarCyclesRequest) (*ListWeeklyStarCyclesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWeeklyStarCycles not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWeeklyStarCycles not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) CreateWeeklyStarCycle(context.Context, *UpsertWeeklyStarCycleRequest) (*UpsertWeeklyStarCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateWeeklyStarCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateWeeklyStarCycle not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) GetWeeklyStarCycle(context.Context, *GetWeeklyStarCycleRequest) (*GetWeeklyStarCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWeeklyStarCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWeeklyStarCycle not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) UpdateWeeklyStarCycle(context.Context, *UpsertWeeklyStarCycleRequest) (*UpsertWeeklyStarCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateWeeklyStarCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateWeeklyStarCycle not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) SetWeeklyStarCycleStatus(context.Context, *SetWeeklyStarCycleStatusRequest) (*SetWeeklyStarCycleStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetWeeklyStarCycleStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetWeeklyStarCycleStatus not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) ListWeeklyStarLeaderboard(context.Context, *ListWeeklyStarLeaderboardRequest) (*ListWeeklyStarLeaderboardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWeeklyStarLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWeeklyStarLeaderboard not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) ListWeeklyStarSettlements(context.Context, *ListWeeklyStarSettlementsRequest) (*ListWeeklyStarSettlementsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWeeklyStarSettlements not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWeeklyStarSettlements not implemented") } func (UnimplementedAdminWeeklyStarServiceServer) mustEmbedUnimplementedAdminWeeklyStarServiceServer() { } @@ -4861,7 +5158,7 @@ type UnsafeAdminWeeklyStarServiceServer interface { } func RegisterAdminWeeklyStarServiceServer(s grpc.ServiceRegistrar, srv AdminWeeklyStarServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminWeeklyStarServiceServer was + // If the following call panics, it indicates UnimplementedAdminWeeklyStarServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -5112,13 +5409,13 @@ type AdminCPWeeklyRankServiceServer interface { type UnimplementedAdminCPWeeklyRankServiceServer struct{} func (UnimplementedAdminCPWeeklyRankServiceServer) GetCPWeeklyRankConfig(context.Context, *GetCPWeeklyRankConfigRequest) (*GetCPWeeklyRankConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCPWeeklyRankConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCPWeeklyRankConfig not implemented") } func (UnimplementedAdminCPWeeklyRankServiceServer) UpdateCPWeeklyRankConfig(context.Context, *UpdateCPWeeklyRankConfigRequest) (*UpdateCPWeeklyRankConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateCPWeeklyRankConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateCPWeeklyRankConfig not implemented") } func (UnimplementedAdminCPWeeklyRankServiceServer) ListCPWeeklyRankSettlements(context.Context, *ListCPWeeklyRankSettlementsRequest) (*ListCPWeeklyRankSettlementsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCPWeeklyRankSettlements not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCPWeeklyRankSettlements not implemented") } func (UnimplementedAdminCPWeeklyRankServiceServer) mustEmbedUnimplementedAdminCPWeeklyRankServiceServer() { } @@ -5132,7 +5429,7 @@ type UnsafeAdminCPWeeklyRankServiceServer interface { } func RegisterAdminCPWeeklyRankServiceServer(s grpc.ServiceRegistrar, srv AdminCPWeeklyRankServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminCPWeeklyRankServiceServer was + // If the following call panics, it indicates UnimplementedAdminCPWeeklyRankServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -5347,25 +5644,25 @@ type AdminAgencyOpeningServiceServer interface { type UnimplementedAdminAgencyOpeningServiceServer struct{} func (UnimplementedAdminAgencyOpeningServiceServer) ListAgencyOpeningCycles(context.Context, *ListAgencyOpeningCyclesRequest) (*ListAgencyOpeningCyclesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAgencyOpeningCycles not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAgencyOpeningCycles not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) CreateAgencyOpeningCycle(context.Context, *UpsertAgencyOpeningCycleRequest) (*UpsertAgencyOpeningCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateAgencyOpeningCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateAgencyOpeningCycle not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) GetAgencyOpeningCycle(context.Context, *GetAgencyOpeningCycleRequest) (*GetAgencyOpeningCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyOpeningCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyOpeningCycle not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) UpdateAgencyOpeningCycle(context.Context, *UpsertAgencyOpeningCycleRequest) (*UpsertAgencyOpeningCycleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateAgencyOpeningCycle not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateAgencyOpeningCycle not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) SetAgencyOpeningCycleStatus(context.Context, *SetAgencyOpeningCycleStatusRequest) (*SetAgencyOpeningCycleStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetAgencyOpeningCycleStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetAgencyOpeningCycleStatus not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) ListAgencyOpeningApplications(context.Context, *ListAgencyOpeningApplicationsRequest) (*ListAgencyOpeningApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAgencyOpeningApplications not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAgencyOpeningApplications not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) ReviewAgencyOpeningApplication(context.Context, *ReviewAgencyOpeningApplicationRequest) (*ReviewAgencyOpeningApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReviewAgencyOpeningApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method ReviewAgencyOpeningApplication not implemented") } func (UnimplementedAdminAgencyOpeningServiceServer) mustEmbedUnimplementedAdminAgencyOpeningServiceServer() { } @@ -5379,7 +5676,7 @@ type UnsafeAdminAgencyOpeningServiceServer interface { } func RegisterAdminAgencyOpeningServiceServer(s grpc.ServiceRegistrar, srv AdminAgencyOpeningServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminAgencyOpeningServiceServer was + // If the following call panics, it indicates UnimplementedAdminAgencyOpeningServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -5555,6 +5852,609 @@ var AdminAgencyOpeningService_ServiceDesc = grpc.ServiceDesc{ Metadata: "proto/activity/v1/activity.proto", } +const ( + AdminActivityTemplateService_ListActivityTemplates_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ListActivityTemplates" + AdminActivityTemplateService_CreateActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/CreateActivityTemplate" + AdminActivityTemplateService_GetActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/GetActivityTemplate" + AdminActivityTemplateService_UpdateActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/UpdateActivityTemplate" + AdminActivityTemplateService_SetActivityTemplateStatus_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/SetActivityTemplateStatus" + AdminActivityTemplateService_DeleteActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/DeleteActivityTemplate" + AdminActivityTemplateService_ListActivityTemplateVersions_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ListActivityTemplateVersions" + AdminActivityTemplateService_CloneActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/CloneActivityTemplate" + AdminActivityTemplateService_ValidateActivityTemplate_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ValidateActivityTemplate" + AdminActivityTemplateService_ListActivityTemplateLeaderboard_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ListActivityTemplateLeaderboard" + AdminActivityTemplateService_ListActivityTemplateRewardJobs_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ListActivityTemplateRewardJobs" + AdminActivityTemplateService_RetryActivityTemplateRewardJob_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/RetryActivityTemplateRewardJob" + AdminActivityTemplateService_ListActivityTemplateTaskClaims_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/ListActivityTemplateTaskClaims" + AdminActivityTemplateService_RetryActivityTemplateTaskClaim_FullMethodName = "/hyapp.activity.v1.AdminActivityTemplateService/RetryActivityTemplateTaskClaim" +) + +// AdminActivityTemplateServiceClient is the client API for AdminActivityTemplateService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// AdminActivityTemplateService 是后台活动模版访问 activity-service 的唯一入口。 +// admin-server 只做鉴权、协议转换和审计,不能直写 activity-service 的配置表。 +type AdminActivityTemplateServiceClient interface { + ListActivityTemplates(ctx context.Context, in *ListActivityTemplatesRequest, opts ...grpc.CallOption) (*ListActivityTemplatesResponse, error) + CreateActivityTemplate(ctx context.Context, in *CreateActivityTemplateRequest, opts ...grpc.CallOption) (*CreateActivityTemplateResponse, error) + GetActivityTemplate(ctx context.Context, in *GetActivityTemplateRequest, opts ...grpc.CallOption) (*GetActivityTemplateResponse, error) + UpdateActivityTemplate(ctx context.Context, in *UpdateActivityTemplateRequest, opts ...grpc.CallOption) (*UpdateActivityTemplateResponse, error) + SetActivityTemplateStatus(ctx context.Context, in *SetActivityTemplateStatusRequest, opts ...grpc.CallOption) (*SetActivityTemplateStatusResponse, error) + DeleteActivityTemplate(ctx context.Context, in *DeleteActivityTemplateRequest, opts ...grpc.CallOption) (*DeleteActivityTemplateResponse, error) + ListActivityTemplateVersions(ctx context.Context, in *ListActivityTemplateVersionsRequest, opts ...grpc.CallOption) (*ListActivityTemplateVersionsResponse, error) + CloneActivityTemplate(ctx context.Context, in *CloneActivityTemplateRequest, opts ...grpc.CallOption) (*CloneActivityTemplateResponse, error) + ValidateActivityTemplate(ctx context.Context, in *ValidateActivityTemplateRequest, opts ...grpc.CallOption) (*ValidateActivityTemplateResponse, error) + ListActivityTemplateLeaderboard(ctx context.Context, in *AdminListActivityTemplateLeaderboardRequest, opts ...grpc.CallOption) (*AdminListActivityTemplateLeaderboardResponse, error) + ListActivityTemplateRewardJobs(ctx context.Context, in *ListActivityTemplateRewardJobsRequest, opts ...grpc.CallOption) (*ListActivityTemplateRewardJobsResponse, error) + RetryActivityTemplateRewardJob(ctx context.Context, in *RetryActivityTemplateRewardJobRequest, opts ...grpc.CallOption) (*RetryActivityTemplateRewardJobResponse, error) + ListActivityTemplateTaskClaims(ctx context.Context, in *ListActivityTemplateTaskClaimsRequest, opts ...grpc.CallOption) (*ListActivityTemplateTaskClaimsResponse, error) + RetryActivityTemplateTaskClaim(ctx context.Context, in *RetryActivityTemplateTaskClaimRequest, opts ...grpc.CallOption) (*RetryActivityTemplateTaskClaimResponse, error) +} + +type adminActivityTemplateServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewAdminActivityTemplateServiceClient(cc grpc.ClientConnInterface) AdminActivityTemplateServiceClient { + return &adminActivityTemplateServiceClient{cc} +} + +func (c *adminActivityTemplateServiceClient) ListActivityTemplates(ctx context.Context, in *ListActivityTemplatesRequest, opts ...grpc.CallOption) (*ListActivityTemplatesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplatesResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ListActivityTemplates_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) CreateActivityTemplate(ctx context.Context, in *CreateActivityTemplateRequest, opts ...grpc.CallOption) (*CreateActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_CreateActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) GetActivityTemplate(ctx context.Context, in *GetActivityTemplateRequest, opts ...grpc.CallOption) (*GetActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_GetActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) UpdateActivityTemplate(ctx context.Context, in *UpdateActivityTemplateRequest, opts ...grpc.CallOption) (*UpdateActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_UpdateActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) SetActivityTemplateStatus(ctx context.Context, in *SetActivityTemplateStatusRequest, opts ...grpc.CallOption) (*SetActivityTemplateStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SetActivityTemplateStatusResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_SetActivityTemplateStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) DeleteActivityTemplate(ctx context.Context, in *DeleteActivityTemplateRequest, opts ...grpc.CallOption) (*DeleteActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DeleteActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_DeleteActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) ListActivityTemplateVersions(ctx context.Context, in *ListActivityTemplateVersionsRequest, opts ...grpc.CallOption) (*ListActivityTemplateVersionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplateVersionsResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ListActivityTemplateVersions_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) CloneActivityTemplate(ctx context.Context, in *CloneActivityTemplateRequest, opts ...grpc.CallOption) (*CloneActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CloneActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_CloneActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) ValidateActivityTemplate(ctx context.Context, in *ValidateActivityTemplateRequest, opts ...grpc.CallOption) (*ValidateActivityTemplateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ValidateActivityTemplateResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ValidateActivityTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) ListActivityTemplateLeaderboard(ctx context.Context, in *AdminListActivityTemplateLeaderboardRequest, opts ...grpc.CallOption) (*AdminListActivityTemplateLeaderboardResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AdminListActivityTemplateLeaderboardResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ListActivityTemplateLeaderboard_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) ListActivityTemplateRewardJobs(ctx context.Context, in *ListActivityTemplateRewardJobsRequest, opts ...grpc.CallOption) (*ListActivityTemplateRewardJobsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplateRewardJobsResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ListActivityTemplateRewardJobs_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) RetryActivityTemplateRewardJob(ctx context.Context, in *RetryActivityTemplateRewardJobRequest, opts ...grpc.CallOption) (*RetryActivityTemplateRewardJobResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RetryActivityTemplateRewardJobResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_RetryActivityTemplateRewardJob_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) ListActivityTemplateTaskClaims(ctx context.Context, in *ListActivityTemplateTaskClaimsRequest, opts ...grpc.CallOption) (*ListActivityTemplateTaskClaimsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActivityTemplateTaskClaimsResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_ListActivityTemplateTaskClaims_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminActivityTemplateServiceClient) RetryActivityTemplateTaskClaim(ctx context.Context, in *RetryActivityTemplateTaskClaimRequest, opts ...grpc.CallOption) (*RetryActivityTemplateTaskClaimResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RetryActivityTemplateTaskClaimResponse) + err := c.cc.Invoke(ctx, AdminActivityTemplateService_RetryActivityTemplateTaskClaim_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AdminActivityTemplateServiceServer is the server API for AdminActivityTemplateService service. +// All implementations must embed UnimplementedAdminActivityTemplateServiceServer +// for forward compatibility. +// +// AdminActivityTemplateService 是后台活动模版访问 activity-service 的唯一入口。 +// admin-server 只做鉴权、协议转换和审计,不能直写 activity-service 的配置表。 +type AdminActivityTemplateServiceServer interface { + ListActivityTemplates(context.Context, *ListActivityTemplatesRequest) (*ListActivityTemplatesResponse, error) + CreateActivityTemplate(context.Context, *CreateActivityTemplateRequest) (*CreateActivityTemplateResponse, error) + GetActivityTemplate(context.Context, *GetActivityTemplateRequest) (*GetActivityTemplateResponse, error) + UpdateActivityTemplate(context.Context, *UpdateActivityTemplateRequest) (*UpdateActivityTemplateResponse, error) + SetActivityTemplateStatus(context.Context, *SetActivityTemplateStatusRequest) (*SetActivityTemplateStatusResponse, error) + DeleteActivityTemplate(context.Context, *DeleteActivityTemplateRequest) (*DeleteActivityTemplateResponse, error) + ListActivityTemplateVersions(context.Context, *ListActivityTemplateVersionsRequest) (*ListActivityTemplateVersionsResponse, error) + CloneActivityTemplate(context.Context, *CloneActivityTemplateRequest) (*CloneActivityTemplateResponse, error) + ValidateActivityTemplate(context.Context, *ValidateActivityTemplateRequest) (*ValidateActivityTemplateResponse, error) + ListActivityTemplateLeaderboard(context.Context, *AdminListActivityTemplateLeaderboardRequest) (*AdminListActivityTemplateLeaderboardResponse, error) + ListActivityTemplateRewardJobs(context.Context, *ListActivityTemplateRewardJobsRequest) (*ListActivityTemplateRewardJobsResponse, error) + RetryActivityTemplateRewardJob(context.Context, *RetryActivityTemplateRewardJobRequest) (*RetryActivityTemplateRewardJobResponse, error) + ListActivityTemplateTaskClaims(context.Context, *ListActivityTemplateTaskClaimsRequest) (*ListActivityTemplateTaskClaimsResponse, error) + RetryActivityTemplateTaskClaim(context.Context, *RetryActivityTemplateTaskClaimRequest) (*RetryActivityTemplateTaskClaimResponse, error) + mustEmbedUnimplementedAdminActivityTemplateServiceServer() +} + +// UnimplementedAdminActivityTemplateServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAdminActivityTemplateServiceServer struct{} + +func (UnimplementedAdminActivityTemplateServiceServer) ListActivityTemplates(context.Context, *ListActivityTemplatesRequest) (*ListActivityTemplatesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplates not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) CreateActivityTemplate(context.Context, *CreateActivityTemplateRequest) (*CreateActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) GetActivityTemplate(context.Context, *GetActivityTemplateRequest) (*GetActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) UpdateActivityTemplate(context.Context, *UpdateActivityTemplateRequest) (*UpdateActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) SetActivityTemplateStatus(context.Context, *SetActivityTemplateStatusRequest) (*SetActivityTemplateStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SetActivityTemplateStatus not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) DeleteActivityTemplate(context.Context, *DeleteActivityTemplateRequest) (*DeleteActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method DeleteActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) ListActivityTemplateVersions(context.Context, *ListActivityTemplateVersionsRequest) (*ListActivityTemplateVersionsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateVersions not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) CloneActivityTemplate(context.Context, *CloneActivityTemplateRequest) (*CloneActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CloneActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) ValidateActivityTemplate(context.Context, *ValidateActivityTemplateRequest) (*ValidateActivityTemplateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ValidateActivityTemplate not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) ListActivityTemplateLeaderboard(context.Context, *AdminListActivityTemplateLeaderboardRequest) (*AdminListActivityTemplateLeaderboardResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateLeaderboard not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) ListActivityTemplateRewardJobs(context.Context, *ListActivityTemplateRewardJobsRequest) (*ListActivityTemplateRewardJobsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateRewardJobs not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) RetryActivityTemplateRewardJob(context.Context, *RetryActivityTemplateRewardJobRequest) (*RetryActivityTemplateRewardJobResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RetryActivityTemplateRewardJob not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) ListActivityTemplateTaskClaims(context.Context, *ListActivityTemplateTaskClaimsRequest) (*ListActivityTemplateTaskClaimsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActivityTemplateTaskClaims not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) RetryActivityTemplateTaskClaim(context.Context, *RetryActivityTemplateTaskClaimRequest) (*RetryActivityTemplateTaskClaimResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RetryActivityTemplateTaskClaim not implemented") +} +func (UnimplementedAdminActivityTemplateServiceServer) mustEmbedUnimplementedAdminActivityTemplateServiceServer() { +} +func (UnimplementedAdminActivityTemplateServiceServer) testEmbeddedByValue() {} + +// UnsafeAdminActivityTemplateServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AdminActivityTemplateServiceServer will +// result in compilation errors. +type UnsafeAdminActivityTemplateServiceServer interface { + mustEmbedUnimplementedAdminActivityTemplateServiceServer() +} + +func RegisterAdminActivityTemplateServiceServer(s grpc.ServiceRegistrar, srv AdminActivityTemplateServiceServer) { + // If the following call panics, it indicates UnimplementedAdminActivityTemplateServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&AdminActivityTemplateService_ServiceDesc, srv) +} + +func _AdminActivityTemplateService_ListActivityTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ListActivityTemplates_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplates(ctx, req.(*ListActivityTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_CreateActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).CreateActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_CreateActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).CreateActivityTemplate(ctx, req.(*CreateActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_GetActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).GetActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_GetActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).GetActivityTemplate(ctx, req.(*GetActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_UpdateActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).UpdateActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_UpdateActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).UpdateActivityTemplate(ctx, req.(*UpdateActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_SetActivityTemplateStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetActivityTemplateStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).SetActivityTemplateStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_SetActivityTemplateStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).SetActivityTemplateStatus(ctx, req.(*SetActivityTemplateStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_DeleteActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).DeleteActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_DeleteActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).DeleteActivityTemplate(ctx, req.(*DeleteActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_ListActivityTemplateVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplateVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ListActivityTemplateVersions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateVersions(ctx, req.(*ListActivityTemplateVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_CloneActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CloneActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).CloneActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_CloneActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).CloneActivityTemplate(ctx, req.(*CloneActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_ValidateActivityTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateActivityTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ValidateActivityTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ValidateActivityTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ValidateActivityTemplate(ctx, req.(*ValidateActivityTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_ListActivityTemplateLeaderboard_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AdminListActivityTemplateLeaderboardRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateLeaderboard(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ListActivityTemplateLeaderboard_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateLeaderboard(ctx, req.(*AdminListActivityTemplateLeaderboardRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_ListActivityTemplateRewardJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplateRewardJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateRewardJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ListActivityTemplateRewardJobs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateRewardJobs(ctx, req.(*ListActivityTemplateRewardJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_RetryActivityTemplateRewardJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RetryActivityTemplateRewardJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).RetryActivityTemplateRewardJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_RetryActivityTemplateRewardJob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).RetryActivityTemplateRewardJob(ctx, req.(*RetryActivityTemplateRewardJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_ListActivityTemplateTaskClaims_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivityTemplateTaskClaimsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateTaskClaims(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_ListActivityTemplateTaskClaims_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).ListActivityTemplateTaskClaims(ctx, req.(*ListActivityTemplateTaskClaimsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminActivityTemplateService_RetryActivityTemplateTaskClaim_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RetryActivityTemplateTaskClaimRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminActivityTemplateServiceServer).RetryActivityTemplateTaskClaim(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminActivityTemplateService_RetryActivityTemplateTaskClaim_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminActivityTemplateServiceServer).RetryActivityTemplateTaskClaim(ctx, req.(*RetryActivityTemplateTaskClaimRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// AdminActivityTemplateService_ServiceDesc is the grpc.ServiceDesc for AdminActivityTemplateService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var AdminActivityTemplateService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "hyapp.activity.v1.AdminActivityTemplateService", + HandlerType: (*AdminActivityTemplateServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListActivityTemplates", + Handler: _AdminActivityTemplateService_ListActivityTemplates_Handler, + }, + { + MethodName: "CreateActivityTemplate", + Handler: _AdminActivityTemplateService_CreateActivityTemplate_Handler, + }, + { + MethodName: "GetActivityTemplate", + Handler: _AdminActivityTemplateService_GetActivityTemplate_Handler, + }, + { + MethodName: "UpdateActivityTemplate", + Handler: _AdminActivityTemplateService_UpdateActivityTemplate_Handler, + }, + { + MethodName: "SetActivityTemplateStatus", + Handler: _AdminActivityTemplateService_SetActivityTemplateStatus_Handler, + }, + { + MethodName: "DeleteActivityTemplate", + Handler: _AdminActivityTemplateService_DeleteActivityTemplate_Handler, + }, + { + MethodName: "ListActivityTemplateVersions", + Handler: _AdminActivityTemplateService_ListActivityTemplateVersions_Handler, + }, + { + MethodName: "CloneActivityTemplate", + Handler: _AdminActivityTemplateService_CloneActivityTemplate_Handler, + }, + { + MethodName: "ValidateActivityTemplate", + Handler: _AdminActivityTemplateService_ValidateActivityTemplate_Handler, + }, + { + MethodName: "ListActivityTemplateLeaderboard", + Handler: _AdminActivityTemplateService_ListActivityTemplateLeaderboard_Handler, + }, + { + MethodName: "ListActivityTemplateRewardJobs", + Handler: _AdminActivityTemplateService_ListActivityTemplateRewardJobs_Handler, + }, + { + MethodName: "RetryActivityTemplateRewardJob", + Handler: _AdminActivityTemplateService_RetryActivityTemplateRewardJob_Handler, + }, + { + MethodName: "ListActivityTemplateTaskClaims", + Handler: _AdminActivityTemplateService_ListActivityTemplateTaskClaims_Handler, + }, + { + MethodName: "RetryActivityTemplateTaskClaim", + Handler: _AdminActivityTemplateService_RetryActivityTemplateTaskClaim_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/activity/v1/activity.proto", +} + const ( SevenDayCheckInService_GetSevenDayCheckInStatus_FullMethodName = "/hyapp.activity.v1.SevenDayCheckInService/GetSevenDayCheckInStatus" SevenDayCheckInService_SignSevenDayCheckIn_FullMethodName = "/hyapp.activity.v1.SevenDayCheckInService/SignSevenDayCheckIn" @@ -5617,10 +6517,10 @@ type SevenDayCheckInServiceServer interface { type UnimplementedSevenDayCheckInServiceServer struct{} func (UnimplementedSevenDayCheckInServiceServer) GetSevenDayCheckInStatus(context.Context, *GetSevenDayCheckInStatusRequest) (*GetSevenDayCheckInStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSevenDayCheckInStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method GetSevenDayCheckInStatus not implemented") } func (UnimplementedSevenDayCheckInServiceServer) SignSevenDayCheckIn(context.Context, *SignSevenDayCheckInRequest) (*SignSevenDayCheckInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SignSevenDayCheckIn not implemented") + return nil, status.Error(codes.Unimplemented, "method SignSevenDayCheckIn not implemented") } func (UnimplementedSevenDayCheckInServiceServer) mustEmbedUnimplementedSevenDayCheckInServiceServer() { } @@ -5634,7 +6534,7 @@ type UnsafeSevenDayCheckInServiceServer interface { } func RegisterSevenDayCheckInServiceServer(s grpc.ServiceRegistrar, srv SevenDayCheckInServiceServer) { - // If the following call pancis, it indicates UnimplementedSevenDayCheckInServiceServer was + // If the following call panics, it indicates UnimplementedSevenDayCheckInServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -5775,13 +6675,13 @@ type AdminSevenDayCheckInServiceServer interface { type UnimplementedAdminSevenDayCheckInServiceServer struct{} func (UnimplementedAdminSevenDayCheckInServiceServer) GetSevenDayCheckInConfig(context.Context, *GetSevenDayCheckInConfigRequest) (*GetSevenDayCheckInConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSevenDayCheckInConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetSevenDayCheckInConfig not implemented") } func (UnimplementedAdminSevenDayCheckInServiceServer) UpdateSevenDayCheckInConfig(context.Context, *UpdateSevenDayCheckInConfigRequest) (*UpdateSevenDayCheckInConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateSevenDayCheckInConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateSevenDayCheckInConfig not implemented") } func (UnimplementedAdminSevenDayCheckInServiceServer) ListSevenDayCheckInClaims(context.Context, *ListSevenDayCheckInClaimsRequest) (*ListSevenDayCheckInClaimsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSevenDayCheckInClaims not implemented") + return nil, status.Error(codes.Unimplemented, "method ListSevenDayCheckInClaims not implemented") } func (UnimplementedAdminSevenDayCheckInServiceServer) mustEmbedUnimplementedAdminSevenDayCheckInServiceServer() { } @@ -5795,7 +6695,7 @@ type UnsafeAdminSevenDayCheckInServiceServer interface { } func RegisterAdminSevenDayCheckInServiceServer(s grpc.ServiceRegistrar, srv AdminSevenDayCheckInServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminSevenDayCheckInServiceServer was + // If the following call panics, it indicates UnimplementedAdminSevenDayCheckInServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -6010,25 +6910,25 @@ type AdminGrowthLevelServiceServer interface { type UnimplementedAdminGrowthLevelServiceServer struct{} func (UnimplementedAdminGrowthLevelServiceServer) ListLevelConfig(context.Context, *ListLevelConfigRequest) (*ListLevelConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLevelConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLevelConfig not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) UpsertLevelTrack(context.Context, *UpsertLevelTrackRequest) (*UpsertLevelTrackResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertLevelTrack not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertLevelTrack not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) UpsertLevelRule(context.Context, *UpsertLevelRuleRequest) (*UpsertLevelRuleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertLevelRule not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertLevelRule not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) UpsertLevelTier(context.Context, *UpsertLevelTierRequest) (*UpsertLevelTierResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertLevelTier not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertLevelTier not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) BatchUpsertLevelConfig(context.Context, *BatchUpsertLevelConfigRequest) (*BatchUpsertLevelConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchUpsertLevelConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchUpsertLevelConfig not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) BatchGetUserLevelAdminProfiles(context.Context, *BatchGetUserLevelAdminProfilesRequest) (*BatchGetUserLevelAdminProfilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUserLevelAdminProfiles not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUserLevelAdminProfiles not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) AdjustTemporaryUserLevels(context.Context, *AdjustTemporaryUserLevelsRequest) (*AdjustTemporaryUserLevelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdjustTemporaryUserLevels not implemented") + return nil, status.Error(codes.Unimplemented, "method AdjustTemporaryUserLevels not implemented") } func (UnimplementedAdminGrowthLevelServiceServer) mustEmbedUnimplementedAdminGrowthLevelServiceServer() { } @@ -6042,7 +6942,7 @@ type UnsafeAdminGrowthLevelServiceServer interface { } func RegisterAdminGrowthLevelServiceServer(s grpc.ServiceRegistrar, srv AdminGrowthLevelServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminGrowthLevelServiceServer was + // If the following call panics, it indicates UnimplementedAdminGrowthLevelServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -6293,13 +7193,13 @@ type AdminAchievementServiceServer interface { type UnimplementedAdminAchievementServiceServer struct{} func (UnimplementedAdminAchievementServiceServer) ListAchievementDefinitions(context.Context, *ListAchievementsRequest) (*ListAchievementsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAchievementDefinitions not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAchievementDefinitions not implemented") } func (UnimplementedAdminAchievementServiceServer) UpsertAchievementDefinition(context.Context, *UpsertAchievementDefinitionRequest) (*UpsertAchievementDefinitionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertAchievementDefinition not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertAchievementDefinition not implemented") } func (UnimplementedAdminAchievementServiceServer) DeleteAchievementDefinition(context.Context, *DeleteAchievementDefinitionRequest) (*DeleteAchievementDefinitionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteAchievementDefinition not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteAchievementDefinition not implemented") } func (UnimplementedAdminAchievementServiceServer) mustEmbedUnimplementedAdminAchievementServiceServer() { } @@ -6313,7 +7213,7 @@ type UnsafeAdminAchievementServiceServer interface { } func RegisterAdminAchievementServiceServer(s grpc.ServiceRegistrar, srv AdminAchievementServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminAchievementServiceServer was + // If the following call panics, it indicates UnimplementedAdminAchievementServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -6489,16 +7389,16 @@ type AdminWheelServiceServer interface { type UnimplementedAdminWheelServiceServer struct{} func (UnimplementedAdminWheelServiceServer) GetWheelConfig(context.Context, *GetWheelConfigRequest) (*GetWheelConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWheelConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWheelConfig not implemented") } func (UnimplementedAdminWheelServiceServer) UpsertWheelConfig(context.Context, *UpsertWheelConfigRequest) (*UpsertWheelConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertWheelConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertWheelConfig not implemented") } func (UnimplementedAdminWheelServiceServer) ListWheelDraws(context.Context, *ListWheelDrawsRequest) (*ListWheelDrawsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWheelDraws not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWheelDraws not implemented") } func (UnimplementedAdminWheelServiceServer) GetWheelDrawSummary(context.Context, *GetWheelDrawSummaryRequest) (*GetWheelDrawSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWheelDrawSummary not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWheelDrawSummary not implemented") } func (UnimplementedAdminWheelServiceServer) mustEmbedUnimplementedAdminWheelServiceServer() {} func (UnimplementedAdminWheelServiceServer) testEmbeddedByValue() {} @@ -6511,7 +7411,7 @@ type UnsafeAdminWheelServiceServer interface { } func RegisterAdminWheelServiceServer(s grpc.ServiceRegistrar, srv AdminWheelServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminWheelServiceServer was + // If the following call panics, it indicates UnimplementedAdminWheelServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/events/luckygift/v1/events.pb.go b/api/proto/events/luckygift/v1/events.pb.go index d5a300dc..5e46e37c 100644 --- a/api/proto/events/luckygift/v1/events.pb.go +++ b/api/proto/events/luckygift/v1/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/events/luckygift/v1/events.proto package luckygifteventsv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,17 +24,16 @@ const ( // EventEnvelope 是 lucky-gift-service 发布 owner outbox 事实的稳定信封。 // occurred_at_ms 固定为抽奖事实创建时的 Unix epoch milliseconds;MQ 实际发送时间不改变业务发生时间。 type EventEnvelope struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - EventType string `protobuf:"bytes,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + EventType string `protobuf:"bytes,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // draw_id 是本次送礼命令的聚合中奖标识;批量子抽明细仍只保存在 lucky owner 数据库,不能放大 MQ 负载。 - DrawId string `protobuf:"bytes,4,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` + DrawId string `protobuf:"bytes,4,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EventEnvelope) Reset() { @@ -112,18 +112,15 @@ func (x *EventEnvelope) GetBody() []byte { // lucky-gift-service 必须先完成 wallet-service 入账和本地 granted 收敛,再发布本事件; // room-service 与 activity-service 只从该事实派生房内 IM 和区域飘屏,不能反向改变抽奖或账务状态。 type LuckyGiftDrawn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - SenderUserId int64 `protobuf:"varint,7,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,8,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + SenderUserId int64 `protobuf:"varint,7,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,8,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // 展示资料是送礼入口固化的快照;消费者不应为了飘屏高频同步反查 user-service。 SenderName string `protobuf:"bytes,9,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` SenderAvatar string `protobuf:"bytes,10,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"` @@ -147,6 +144,8 @@ type LuckyGiftDrawn struct { // 两个时间均为 UTC Unix epoch milliseconds:抽奖发生时间与钱包返奖确认时间不能混用。 DrawCreatedAtMs int64 `protobuf:"varint,26,opt,name=draw_created_at_ms,json=drawCreatedAtMs,proto3" json:"draw_created_at_ms,omitempty"` RewardGrantedAtMs int64 `protobuf:"varint,27,opt,name=reward_granted_at_ms,json=rewardGrantedAtMs,proto3" json:"reward_granted_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftDrawn) Reset() { @@ -370,105 +369,60 @@ func (x *LuckyGiftDrawn) GetRewardGrantedAtMs() int64 { var File_proto_events_luckygift_v1_events_proto protoreflect.FileDescriptor -var file_proto_events_luckygift_v1_events_proto_rawDesc = []byte{ - 0x0a, 0x26, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, - 0x2e, 0x76, 0x31, 0x22, 0xb7, 0x01, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, - 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, - 0x77, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x63, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0xab, 0x08, - 0x0a, 0x0e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x6e, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, - 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x19, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, - 0x70, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, - 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, - 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, - 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, - 0x70, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x34, - 0x0a, 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x65, - 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x68, - 0x69, 0x67, 0x68, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x17, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, - 0x6c, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, - 0x12, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x77, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x42, 0x3d, 0x5a, 0x3b, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x67, 0x69, 0x66, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, - 0x66, 0x74, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_proto_events_luckygift_v1_events_proto_rawDesc = "" + + "\n" + + "&proto/events/luckygift/v1/events.proto\x12\x19hyapp.events.luckygift.v1\"\xb7\x01\n" + + "\rEventEnvelope\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x1d\n" + + "\n" + + "event_type\x18\x02 \x01(\tR\teventType\x12\x19\n" + + "\bapp_code\x18\x03 \x01(\tR\aappCode\x12\x17\n" + + "\adraw_id\x18\x04 \x01(\tR\x06drawId\x12$\n" + + "\x0eoccurred_at_ms\x18\x05 \x01(\x03R\foccurredAtMs\x12\x12\n" + + "\x04body\x18\x06 \x01(\fR\x04body\"\xab\b\n" + + "\x0eLuckyGiftDrawn\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x17\n" + + "\apool_id\x18\x04 \x01(\tR\x06poolId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x05R\tgiftCount\x12$\n" + + "\x0esender_user_id\x18\a \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\b \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vsender_name\x18\t \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\n" + + " \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\v \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\f \x01(\tR\x19senderPrettyDisplayUserId\x12*\n" + + "\x11visible_region_id\x18\r \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" + + "\n" + + "country_id\x18\x0e \x01(\x03R\tcountryId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x0f \x01(\x03R\tcoinSpent\x12!\n" + + "\frule_version\x18\x10 \x01(\x03R\vruleVersion\x12'\n" + + "\x0fexperience_pool\x18\x11 \x01(\tR\x0eexperiencePool\x12(\n" + + "\x10selected_tier_id\x18\x12 \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\x13 \x01(\x03R\rmultiplierPpm\x12*\n" + + "\x11base_reward_coins\x18\x14 \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\x15 \x01(\x03R\x14effectiveRewardCoins\x12%\n" + + "\x0estage_feedback\x18\x16 \x01(\bR\rstageFeedback\x12'\n" + + "\x0fhigh_multiplier\x18\x17 \x01(\bR\x0ehighMultiplier\x12#\n" + + "\rreward_status\x18\x18 \x01(\tR\frewardStatus\x122\n" + + "\x15wallet_transaction_id\x18\x19 \x01(\tR\x13walletTransactionId\x12+\n" + + "\x12draw_created_at_ms\x18\x1a \x01(\x03R\x0fdrawCreatedAtMs\x12/\n" + + "\x14reward_granted_at_ms\x18\x1b \x01(\x03R\x11rewardGrantedAtMsB=Z;hyapp.local/api/proto/events/luckygift/v1;luckygifteventsv1b\x06proto3" var ( file_proto_events_luckygift_v1_events_proto_rawDescOnce sync.Once - file_proto_events_luckygift_v1_events_proto_rawDescData = file_proto_events_luckygift_v1_events_proto_rawDesc + file_proto_events_luckygift_v1_events_proto_rawDescData []byte ) func file_proto_events_luckygift_v1_events_proto_rawDescGZIP() []byte { file_proto_events_luckygift_v1_events_proto_rawDescOnce.Do(func() { - file_proto_events_luckygift_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_events_luckygift_v1_events_proto_rawDescData) + file_proto_events_luckygift_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_events_luckygift_v1_events_proto_rawDesc), len(file_proto_events_luckygift_v1_events_proto_rawDesc))) }) return file_proto_events_luckygift_v1_events_proto_rawDescData } @@ -495,7 +449,7 @@ func file_proto_events_luckygift_v1_events_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_events_luckygift_v1_events_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_events_luckygift_v1_events_proto_rawDesc), len(file_proto_events_luckygift_v1_events_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -506,7 +460,6 @@ func file_proto_events_luckygift_v1_events_proto_init() { MessageInfos: file_proto_events_luckygift_v1_events_proto_msgTypes, }.Build() File_proto_events_luckygift_v1_events_proto = out.File - file_proto_events_luckygift_v1_events_proto_rawDesc = nil file_proto_events_luckygift_v1_events_proto_goTypes = nil file_proto_events_luckygift_v1_events_proto_depIdxs = nil } diff --git a/api/proto/events/room/v1/events.pb.go b/api/proto/events/room/v1/events.pb.go index 4dfa0ea1..23a8a872 100644 --- a/api/proto/events/room/v1/events.pb.go +++ b/api/proto/events/room/v1/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/events/room/v1/events.proto package roomeventsv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,17 +24,16 @@ const ( // EventEnvelope 是 room-service outbox 的统一事件外壳。 // body 保存具体事件消息序列化后的二进制,event_type 负责告诉消费者如何解码。 type EventEnvelope struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + RoomVersion int64 `protobuf:"varint,4,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` + OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` + AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - RoomVersion int64 `protobuf:"varint,4,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` - OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` - Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` - AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EventEnvelope) Reset() { @@ -117,17 +117,16 @@ func (x *EventEnvelope) GetAppCode() string { // RoomCreated 表达房间第一次建立成功。 type RoomCreated struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OwnerUserId int64 `protobuf:"varint,1,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - SeatCount int32 `protobuf:"varint,3,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` - Mode string `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OwnerUserId int64 `protobuf:"varint,1,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + SeatCount int32 `protobuf:"varint,3,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + Mode string `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` // room_name/room_avatar/room_description 是创建时确定的展示资料快照,消费者不需要反查 room-service。 RoomName string `protobuf:"bytes,5,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` RoomAvatar string `protobuf:"bytes,6,opt,name=room_avatar,json=roomAvatar,proto3" json:"room_avatar,omitempty"` RoomDescription string `protobuf:"bytes,7,opt,name=room_description,json=roomDescription,proto3" json:"room_description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomCreated) Reset() { @@ -204,16 +203,15 @@ func (x *RoomCreated) GetRoomDescription() string { // RoomProfileUpdated 表达房间展示资料或麦位数量变更。 type RoomProfileUpdated struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - RoomAvatar string `protobuf:"bytes,3,opt,name=room_avatar,json=roomAvatar,proto3" json:"room_avatar,omitempty"` - RoomDescription string `protobuf:"bytes,4,opt,name=room_description,json=roomDescription,proto3" json:"room_description,omitempty"` - SeatCount int32 `protobuf:"varint,5,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` - RoomBackgroundUrl string `protobuf:"bytes,6,opt,name=room_background_url,json=roomBackgroundUrl,proto3" json:"room_background_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + RoomAvatar string `protobuf:"bytes,3,opt,name=room_avatar,json=roomAvatar,proto3" json:"room_avatar,omitempty"` + RoomDescription string `protobuf:"bytes,4,opt,name=room_description,json=roomDescription,proto3" json:"room_description,omitempty"` + SeatCount int32 `protobuf:"varint,5,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + RoomBackgroundUrl string `protobuf:"bytes,6,opt,name=room_background_url,json=roomBackgroundUrl,proto3" json:"room_background_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomProfileUpdated) Reset() { @@ -290,13 +288,12 @@ func (x *RoomProfileUpdated) GetRoomBackgroundUrl() string { // RoomBackgroundChanged 表达房主切换当前房间背景图。 type RoomBackgroundChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - BackgroundId int64 `protobuf:"varint,2,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` - RoomBackgroundUrl string `protobuf:"bytes,3,opt,name=room_background_url,json=roomBackgroundUrl,proto3" json:"room_background_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + BackgroundId int64 `protobuf:"varint,2,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` + RoomBackgroundUrl string `protobuf:"bytes,3,opt,name=room_background_url,json=roomBackgroundUrl,proto3" json:"room_background_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomBackgroundChanged) Reset() { @@ -352,19 +349,18 @@ func (x *RoomBackgroundChanged) GetRoomBackgroundUrl() string { // RoomUserJoined 表达用户业务态进房成功。 type RoomEntryVehicleSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + AssetUrl string `protobuf:"bytes,4,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,5,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,6,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + MetadataJson string `protobuf:"bytes,7,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + EntitlementId string `protobuf:"bytes,8,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - AssetUrl string `protobuf:"bytes,4,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,5,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,6,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` - MetadataJson string `protobuf:"bytes,7,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - EntitlementId string `protobuf:"bytes,8,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomEntryVehicleSnapshot) Reset() { @@ -461,12 +457,9 @@ func (x *RoomEntryVehicleSnapshot) GetExpiresAtMs() int64 { } type RoomUserJoined struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` // visible_region_id 是用户进房时所在房间的国家/区域桶,统计服务不能反查 room-service。 VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` EntryVehicle *RoomEntryVehicleSnapshot `protobuf:"bytes,4,opt,name=entry_vehicle,json=entryVehicle,proto3" json:"entry_vehicle,omitempty"` @@ -484,6 +477,8 @@ type RoomUserJoined struct { EffectiveVipLevel int32 `protobuf:"varint,13,opt,name=effective_vip_level,json=effectiveVipLevel,proto3" json:"effective_vip_level,omitempty"` EffectiveVipName string `protobuf:"bytes,14,opt,name=effective_vip_name,json=effectiveVipName,proto3" json:"effective_vip_name,omitempty"` RoomEntryNoticeEnabled bool `protobuf:"varint,15,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3" json:"room_entry_notice_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomUserJoined) Reset() { @@ -623,11 +618,10 @@ func (x *RoomUserJoined) GetRoomEntryNoticeEnabled() bool { // RoomUserLeft 表达用户离房成功。 type RoomUserLeft struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomUserLeft) Reset() { @@ -669,12 +663,11 @@ func (x *RoomUserLeft) GetUserId() int64 { // RoomClosed 表达房间生命周期关闭完成。 type RoomClosed struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomClosed) Reset() { @@ -723,15 +716,12 @@ func (x *RoomClosed) GetReason() string { // RoomMicChanged 表达任意上下麦和换麦位动作。 type RoomMicChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - FromSeat int32 `protobuf:"varint,3,opt,name=from_seat,json=fromSeat,proto3" json:"from_seat,omitempty"` - ToSeat int32 `protobuf:"varint,4,opt,name=to_seat,json=toSeat,proto3" json:"to_seat,omitempty"` - Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + FromSeat int32 `protobuf:"varint,3,opt,name=from_seat,json=fromSeat,proto3" json:"from_seat,omitempty"` + ToSeat int32 `protobuf:"varint,4,opt,name=to_seat,json=toSeat,proto3" json:"to_seat,omitempty"` + Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` // mic_session_id 用于把业务麦位事件和 RTC 发流会话绑定,客户端和 webhook 都必须透传。 MicSessionId string `protobuf:"bytes,6,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` // publish_state 透出 pending_publish/publishing/idle,避免把“占麦”和“已发流”混成一个状态。 @@ -748,6 +738,8 @@ type RoomMicChanged struct { TargetAvatar string `protobuf:"bytes,15,opt,name=target_avatar,json=targetAvatar,proto3" json:"target_avatar,omitempty"` TargetDisplayUserId string `protobuf:"bytes,16,opt,name=target_display_user_id,json=targetDisplayUserId,proto3" json:"target_display_user_id,omitempty"` TargetPrettyDisplayUserId string `protobuf:"bytes,17,opt,name=target_pretty_display_user_id,json=targetPrettyDisplayUserId,proto3" json:"target_pretty_display_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomMicChanged) Reset() { @@ -901,13 +893,12 @@ func (x *RoomMicChanged) GetTargetPrettyDisplayUserId() string { // RoomMicSeatLocked 表达单个麦位锁定状态变更。 type RoomMicSeatLocked struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomMicSeatLocked) Reset() { @@ -963,12 +954,11 @@ func (x *RoomMicSeatLocked) GetLocked() bool { // RoomChatEnabledChanged 表达公屏开关状态变更。 type RoomChatEnabledChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomChatEnabledChanged) Reset() { @@ -1017,14 +1007,13 @@ func (x *RoomChatEnabledChanged) GetEnabled() bool { // RoomPasswordChanged 表达房间入房密码状态变更,不携带明文或哈希。 type RoomPasswordChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - Locked bool `protobuf:"varint,2,opt,name=locked,proto3" json:"locked,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + Locked bool `protobuf:"varint,2,opt,name=locked,proto3" json:"locked,omitempty"` // visible_region_id 是房间当前可见区域,activity-service 用它把锁房变化投到区域播报群。 VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomPasswordChanged) Reset() { @@ -1080,13 +1069,12 @@ func (x *RoomPasswordChanged) GetVisibleRegionId() int64 { // RoomAdminChanged 表达房间管理员集合变更。 type RoomAdminChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomAdminChanged) Reset() { @@ -1142,13 +1130,12 @@ func (x *RoomAdminChanged) GetEnabled() bool { // RoomUserMuted 表达禁言状态变更。 type RoomUserMuted struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Muted bool `protobuf:"varint,3,opt,name=muted,proto3" json:"muted,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Muted bool `protobuf:"varint,3,opt,name=muted,proto3" json:"muted,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomUserMuted) Reset() { @@ -1204,12 +1191,11 @@ func (x *RoomUserMuted) GetMuted() bool { // RoomUserKicked 表达踢人动作。 type RoomUserKicked struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomUserKicked) Reset() { @@ -1258,12 +1244,11 @@ func (x *RoomUserKicked) GetTargetUserId() int64 { // RoomUserUnbanned 表达解除房间 ban。 type RoomUserUnbanned struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - ActorUserId int64 `protobuf:"varint,1,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomUserUnbanned) Reset() { @@ -1312,29 +1297,26 @@ func (x *RoomUserUnbanned) GetTargetUserId() int64 { // RoomGiftSent 表达送礼成功且已落房间状态。 type RoomGiftSent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SenderUserId int64 `protobuf:"varint,1,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,4,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - GiftValue int64 `protobuf:"varint,5,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` - BillingReceiptId string `protobuf:"bytes,6,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,7,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - CommandId string `protobuf:"bytes,8,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PoolId string `protobuf:"bytes,9,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - CoinSpent int64 `protobuf:"varint,10,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - CountryId int64 `protobuf:"varint,11,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` - RegionId int64 `protobuf:"varint,12,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - GiftTypeCode string `protobuf:"bytes,13,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` - CpRelationType string `protobuf:"bytes,14,opt,name=cp_relation_type,json=cpRelationType,proto3" json:"cp_relation_type,omitempty"` - GiftName string `protobuf:"bytes,15,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` - GiftIconUrl string `protobuf:"bytes,16,opt,name=gift_icon_url,json=giftIconUrl,proto3" json:"gift_icon_url,omitempty"` - GiftAnimationUrl string `protobuf:"bytes,17,opt,name=gift_animation_url,json=giftAnimationUrl,proto3" json:"gift_animation_url,omitempty"` - TargetGiftValue int64 `protobuf:"varint,18,opt,name=target_gift_value,json=targetGiftValue,proto3" json:"target_gift_value,omitempty"` - GiftEffectTypes []string `protobuf:"bytes,19,rep,name=gift_effect_types,json=giftEffectTypes,proto3" json:"gift_effect_types,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SenderUserId int64 `protobuf:"varint,1,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,4,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + GiftValue int64 `protobuf:"varint,5,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + BillingReceiptId string `protobuf:"bytes,6,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,7,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + CommandId string `protobuf:"bytes,8,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PoolId string `protobuf:"bytes,9,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + CoinSpent int64 `protobuf:"varint,10,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + CountryId int64 `protobuf:"varint,11,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + RegionId int64 `protobuf:"varint,12,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + GiftTypeCode string `protobuf:"bytes,13,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` + CpRelationType string `protobuf:"bytes,14,opt,name=cp_relation_type,json=cpRelationType,proto3" json:"cp_relation_type,omitempty"` + GiftName string `protobuf:"bytes,15,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` + GiftIconUrl string `protobuf:"bytes,16,opt,name=gift_icon_url,json=giftIconUrl,proto3" json:"gift_icon_url,omitempty"` + GiftAnimationUrl string `protobuf:"bytes,17,opt,name=gift_animation_url,json=giftAnimationUrl,proto3" json:"gift_animation_url,omitempty"` + TargetGiftValue int64 `protobuf:"varint,18,opt,name=target_gift_value,json=targetGiftValue,proto3" json:"target_gift_value,omitempty"` + GiftEffectTypes []string `protobuf:"bytes,19,rep,name=gift_effect_types,json=giftEffectTypes,proto3" json:"gift_effect_types,omitempty"` // is_robot_gift 标记机器人房间展示用礼物事实;下游真实统计、任务和结算消费者必须跳过。 IsRobotGift bool `protobuf:"varint,20,opt,name=is_robot_gift,json=isRobotGift,proto3" json:"is_robot_gift,omitempty"` // synthetic_lucky_gift 标记幸运礼物只用于房间表现,不写真实抽奖流水、不扣真实奖池、不发真实奖励。 @@ -1352,7 +1334,9 @@ type RoomGiftSent struct { ReceiverDisplayUserId string `protobuf:"bytes,29,opt,name=receiver_display_user_id,json=receiverDisplayUserId,proto3" json:"receiver_display_user_id,omitempty"` ReceiverPrettyDisplayUserId string `protobuf:"bytes,30,opt,name=receiver_pretty_display_user_id,json=receiverPrettyDisplayUserId,proto3" json:"receiver_pretty_display_user_id,omitempty"` // display_mode=batch 表示这条逐目标事实只给统计、activity、CP 和礼物墙消费;房间展示由同命令的 RoomGiftBatchSent 承担。 - DisplayMode string `protobuf:"bytes,31,opt,name=display_mode,json=displayMode,proto3" json:"display_mode,omitempty"` + DisplayMode string `protobuf:"bytes,31,opt,name=display_mode,json=displayMode,proto3" json:"display_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomGiftSent) Reset() { @@ -1605,26 +1589,25 @@ func (x *RoomGiftSent) GetDisplayMode() string { // RoomGiftBatchLuckyResult 是批量送礼展示事件内的逐目标幸运礼物结果快照。 // 它只进入房间 IM 展示,不作为 activity 中奖事实,也不携带送礼人余额。 type RoomGiftBatchLuckyResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - RuleVersion int64 `protobuf:"varint,6,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` - SelectedTierId string `protobuf:"bytes,8,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,9,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,10,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - EffectiveRewardCoins int64 `protobuf:"varint,11,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` - RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - StageFeedback bool `protobuf:"varint,13,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` - HighMultiplier bool `protobuf:"varint,14,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - TargetUserId int64 `protobuf:"varint,16,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + RuleVersion int64 `protobuf:"varint,6,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` + SelectedTierId string `protobuf:"bytes,8,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,9,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,10,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + EffectiveRewardCoins int64 `protobuf:"varint,11,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` + RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + StageFeedback bool `protobuf:"varint,13,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` + HighMultiplier bool `protobuf:"varint,14,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + TargetUserId int64 `protobuf:"varint,16,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomGiftBatchLuckyResult) Reset() { @@ -1772,10 +1755,7 @@ func (x *RoomGiftBatchLuckyResult) GetTargetUserId() int64 { // RoomGiftBatchTarget 固化批量送礼中单个收礼目标的展示和结算快照。 // 目标资料来自 gateway 入站时的 user-service 快照,避免 IM bridge 再回查高频用户服务。 type RoomGiftBatchTarget struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` ReceiverNickname string `protobuf:"bytes,2,opt,name=receiver_nickname,json=receiverNickname,proto3" json:"receiver_nickname,omitempty"` ReceiverAvatar string `protobuf:"bytes,3,opt,name=receiver_avatar,json=receiverAvatar,proto3" json:"receiver_avatar,omitempty"` @@ -1787,6 +1767,8 @@ type RoomGiftBatchTarget struct { BillingReceiptId string `protobuf:"bytes,9,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` CommandId string `protobuf:"bytes,10,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` LuckyGift *RoomGiftBatchLuckyResult `protobuf:"bytes,11,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomGiftBatchTarget) Reset() { @@ -1899,10 +1881,7 @@ func (x *RoomGiftBatchTarget) GetLuckyGift() *RoomGiftBatchLuckyResult { // RoomGiftBatchSent 只服务新 Flutter 的多人送礼展示。 // 逐目标 RoomGiftSent 仍然写 durable outbox 作为统计、CP、礼物墙和账务消费事实。 type RoomGiftBatchSent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` SenderUserId int64 `protobuf:"varint,1,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` SenderName string `protobuf:"bytes,2,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` SenderAvatar string `protobuf:"bytes,3,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"` @@ -1925,6 +1904,8 @@ type RoomGiftBatchSent struct { Targets []*RoomGiftBatchTarget `protobuf:"bytes,20,rep,name=targets,proto3" json:"targets,omitempty"` CommandId string `protobuf:"bytes,21,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` VisibleRegionId int64 `protobuf:"varint,22,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomGiftBatchSent) Reset() { @@ -2114,37 +2095,36 @@ func (x *RoomGiftBatchSent) GetVisibleRegionId() int64 { // RoomLuckyGiftDrawn 是 room-service 从 lucky-gift-service owner 事实派生的真人中奖展示事件。 // 它只承载腾讯云 IM 房间表现,不是 Room Cell 核心状态,不能推进 room_version、榜单或房间快照。 type RoomLuckyGiftDrawn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PoolId string `protobuf:"bytes,3,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - SenderUserId int64 `protobuf:"varint,6,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,7,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - SenderName string `protobuf:"bytes,8,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` - SenderAvatar string `protobuf:"bytes,9,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"` - SenderDisplayUserId string `protobuf:"bytes,10,opt,name=sender_display_user_id,json=senderDisplayUserId,proto3" json:"sender_display_user_id,omitempty"` - SenderPrettyDisplayUserId string `protobuf:"bytes,11,opt,name=sender_pretty_display_user_id,json=senderPrettyDisplayUserId,proto3" json:"sender_pretty_display_user_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - CountryId int64 `protobuf:"varint,13,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` - CoinSpent int64 `protobuf:"varint,14,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - RuleVersion int64 `protobuf:"varint,15,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - ExperiencePool string `protobuf:"bytes,16,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` - SelectedTierId string `protobuf:"bytes,17,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,18,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,19,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - EffectiveRewardCoins int64 `protobuf:"varint,20,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` - StageFeedback bool `protobuf:"varint,21,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` - HighMultiplier bool `protobuf:"varint,22,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` - RewardStatus string `protobuf:"bytes,23,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - WalletTransactionId string `protobuf:"bytes,24,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PoolId string `protobuf:"bytes,3,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + SenderUserId int64 `protobuf:"varint,6,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,7,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + SenderName string `protobuf:"bytes,8,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` + SenderAvatar string `protobuf:"bytes,9,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"` + SenderDisplayUserId string `protobuf:"bytes,10,opt,name=sender_display_user_id,json=senderDisplayUserId,proto3" json:"sender_display_user_id,omitempty"` + SenderPrettyDisplayUserId string `protobuf:"bytes,11,opt,name=sender_pretty_display_user_id,json=senderPrettyDisplayUserId,proto3" json:"sender_pretty_display_user_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + CountryId int64 `protobuf:"varint,13,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CoinSpent int64 `protobuf:"varint,14,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + RuleVersion int64 `protobuf:"varint,15,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + ExperiencePool string `protobuf:"bytes,16,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` + SelectedTierId string `protobuf:"bytes,17,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,18,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,19,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + EffectiveRewardCoins int64 `protobuf:"varint,20,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` + StageFeedback bool `protobuf:"varint,21,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` + HighMultiplier bool `protobuf:"varint,22,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` + RewardStatus string `protobuf:"bytes,23,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + WalletTransactionId string `protobuf:"bytes,24,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` // 时间沿用 lucky owner 的 UTC Unix epoch milliseconds,不以 room-service 消费时间覆盖。 DrawCreatedAtMs int64 `protobuf:"varint,25,opt,name=draw_created_at_ms,json=drawCreatedAtMs,proto3" json:"draw_created_at_ms,omitempty"` RewardGrantedAtMs int64 `protobuf:"varint,26,opt,name=reward_granted_at_ms,json=rewardGrantedAtMs,proto3" json:"reward_granted_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomLuckyGiftDrawn) Reset() { @@ -2362,24 +2342,23 @@ func (x *RoomLuckyGiftDrawn) GetRewardGrantedAtMs() int64 { // RoomRobotLuckyGiftDrawn 是机器人房间专用幸运礼物展示事件。 // 它复用客户端 lucky_gift_drawn 表现协议,但不代表真实奖池抽奖和钱包返奖事实。 type RoomRobotLuckyGiftDrawn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - PoolId string `protobuf:"bytes,7,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,8,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,9,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - EffectiveRewardCoins int64 `protobuf:"varint,10,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - IsRobot bool `protobuf:"varint,13,opt,name=is_robot,json=isRobot,proto3" json:"is_robot,omitempty"` - Synthetic bool `protobuf:"varint,14,opt,name=synthetic,proto3" json:"synthetic,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + PoolId string `protobuf:"bytes,7,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,8,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,9,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + EffectiveRewardCoins int64 `protobuf:"varint,10,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + IsRobot bool `protobuf:"varint,13,opt,name=is_robot,json=isRobot,proto3" json:"is_robot,omitempty"` + Synthetic bool `protobuf:"varint,14,opt,name=synthetic,proto3" json:"synthetic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRobotLuckyGiftDrawn) Reset() { @@ -2512,12 +2491,11 @@ func (x *RoomRobotLuckyGiftDrawn) GetSynthetic() bool { // RoomHeatChanged 表达热度变化结果。 type RoomHeatChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Delta int64 `protobuf:"varint,1,opt,name=delta,proto3" json:"delta,omitempty"` + CurrentHeat int64 `protobuf:"varint,2,opt,name=current_heat,json=currentHeat,proto3" json:"current_heat,omitempty"` unknownFields protoimpl.UnknownFields - - Delta int64 `protobuf:"varint,1,opt,name=delta,proto3" json:"delta,omitempty"` - CurrentHeat int64 `protobuf:"varint,2,opt,name=current_heat,json=currentHeat,proto3" json:"current_heat,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomHeatChanged) Reset() { @@ -2566,13 +2544,12 @@ func (x *RoomHeatChanged) GetCurrentHeat() int64 { // RoomRankChanged 表达本地礼物榜变化结果。 type RoomRankChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` + GiftValue int64 `protobuf:"varint,3,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` - GiftValue int64 `protobuf:"varint,3,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRankChanged) Reset() { @@ -2627,18 +2604,17 @@ func (x *RoomRankChanged) GetGiftValue() int64 { } type RoomRocketRewardGrant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RewardRole string `protobuf:"bytes,1,opt,name=reward_role,json=rewardRole,proto3" json:"reward_role,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RewardItemId string `protobuf:"bytes,3,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` - ResourceGroupId int64 `protobuf:"varint,4,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - GrantId string `protobuf:"bytes,7,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RewardRole string `protobuf:"bytes,1,opt,name=reward_role,json=rewardRole,proto3" json:"reward_role,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardItemId string `protobuf:"bytes,3,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` + ResourceGroupId int64 `protobuf:"varint,4,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + GrantId string `protobuf:"bytes,7,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketRewardGrant) Reset() { @@ -2729,24 +2705,23 @@ func (x *RoomRocketRewardGrant) GetStatus() string { // RoomRocketFuelChanged 表达送礼扣费成功后火箭有效燃料发生变化。 type RoomRocketFuelChanged struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - AddedFuel int64 `protobuf:"varint,3,opt,name=added_fuel,json=addedFuel,proto3" json:"added_fuel,omitempty"` - EffectiveAddedFuel int64 `protobuf:"varint,4,opt,name=effective_added_fuel,json=effectiveAddedFuel,proto3" json:"effective_added_fuel,omitempty"` - OverflowFuel int64 `protobuf:"varint,5,opt,name=overflow_fuel,json=overflowFuel,proto3" json:"overflow_fuel,omitempty"` - CurrentFuel int64 `protobuf:"varint,6,opt,name=current_fuel,json=currentFuel,proto3" json:"current_fuel,omitempty"` - FuelThreshold int64 `protobuf:"varint,7,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - ResetAtMs int64 `protobuf:"varint,9,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` - SenderUserId int64 `protobuf:"varint,10,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - GiftId string `protobuf:"bytes,11,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,12,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - CommandId string `protobuf:"bytes,13,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,14,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + AddedFuel int64 `protobuf:"varint,3,opt,name=added_fuel,json=addedFuel,proto3" json:"added_fuel,omitempty"` + EffectiveAddedFuel int64 `protobuf:"varint,4,opt,name=effective_added_fuel,json=effectiveAddedFuel,proto3" json:"effective_added_fuel,omitempty"` + OverflowFuel int64 `protobuf:"varint,5,opt,name=overflow_fuel,json=overflowFuel,proto3" json:"overflow_fuel,omitempty"` + CurrentFuel int64 `protobuf:"varint,6,opt,name=current_fuel,json=currentFuel,proto3" json:"current_fuel,omitempty"` + FuelThreshold int64 `protobuf:"varint,7,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + ResetAtMs int64 `protobuf:"varint,9,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` + SenderUserId int64 `protobuf:"varint,10,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + GiftId string `protobuf:"bytes,11,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,12,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + CommandId string `protobuf:"bytes,13,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,14,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketFuelChanged) Reset() { @@ -2879,24 +2854,23 @@ func (x *RoomRocketFuelChanged) GetVisibleRegionId() int64 { // RoomRocketIgnited 表达火箭燃料满后进入倒计时,并作为区域/全局播报的事实源。 type RoomRocketIgnited struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - CurrentFuel int64 `protobuf:"varint,3,opt,name=current_fuel,json=currentFuel,proto3" json:"current_fuel,omitempty"` - FuelThreshold int64 `protobuf:"varint,4,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` - IgnitedAtMs int64 `protobuf:"varint,5,opt,name=ignited_at_ms,json=ignitedAtMs,proto3" json:"ignited_at_ms,omitempty"` - LaunchAtMs int64 `protobuf:"varint,6,opt,name=launch_at_ms,json=launchAtMs,proto3" json:"launch_at_ms,omitempty"` - BroadcastScope string `protobuf:"bytes,7,opt,name=broadcast_scope,json=broadcastScope,proto3" json:"broadcast_scope,omitempty"` - VisibleRegionId int64 `protobuf:"varint,8,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - Top1UserId int64 `protobuf:"varint,9,opt,name=top1_user_id,json=top1UserId,proto3" json:"top1_user_id,omitempty"` - IgniterUserId int64 `protobuf:"varint,10,opt,name=igniter_user_id,json=igniterUserId,proto3" json:"igniter_user_id,omitempty"` - CommandId string `protobuf:"bytes,11,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RoomShortId string `protobuf:"bytes,12,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` - RocketCoverUrl string `protobuf:"bytes,13,opt,name=rocket_cover_url,json=rocketCoverUrl,proto3" json:"rocket_cover_url,omitempty"` - ResetAtMs int64 `protobuf:"varint,14,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + CurrentFuel int64 `protobuf:"varint,3,opt,name=current_fuel,json=currentFuel,proto3" json:"current_fuel,omitempty"` + FuelThreshold int64 `protobuf:"varint,4,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` + IgnitedAtMs int64 `protobuf:"varint,5,opt,name=ignited_at_ms,json=ignitedAtMs,proto3" json:"ignited_at_ms,omitempty"` + LaunchAtMs int64 `protobuf:"varint,6,opt,name=launch_at_ms,json=launchAtMs,proto3" json:"launch_at_ms,omitempty"` + BroadcastScope string `protobuf:"bytes,7,opt,name=broadcast_scope,json=broadcastScope,proto3" json:"broadcast_scope,omitempty"` + VisibleRegionId int64 `protobuf:"varint,8,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + Top1UserId int64 `protobuf:"varint,9,opt,name=top1_user_id,json=top1UserId,proto3" json:"top1_user_id,omitempty"` + IgniterUserId int64 `protobuf:"varint,10,opt,name=igniter_user_id,json=igniterUserId,proto3" json:"igniter_user_id,omitempty"` + CommandId string `protobuf:"bytes,11,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RoomShortId string `protobuf:"bytes,12,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` + RocketCoverUrl string `protobuf:"bytes,13,opt,name=rocket_cover_url,json=rocketCoverUrl,proto3" json:"rocket_cover_url,omitempty"` + ResetAtMs int64 `protobuf:"varint,14,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketIgnited) Reset() { @@ -3029,10 +3003,7 @@ func (x *RoomRocketIgnited) GetResetAtMs() int64 { // RoomRocketLaunched 表达火箭已经发射,在线用户名单按发射瞬间 Room Cell presence 结算。 type RoomRocketLaunched struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` NextLevel int32 `protobuf:"varint,3,opt,name=next_level,json=nextLevel,proto3" json:"next_level,omitempty"` @@ -3042,6 +3013,8 @@ type RoomRocketLaunched struct { IgniterUserId int64 `protobuf:"varint,7,opt,name=igniter_user_id,json=igniterUserId,proto3" json:"igniter_user_id,omitempty"` InRoomUserIds []int64 `protobuf:"varint,8,rep,packed,name=in_room_user_ids,json=inRoomUserIds,proto3" json:"in_room_user_ids,omitempty"` Rewards []*RoomRocketRewardGrant `protobuf:"bytes,9,rep,name=rewards,proto3" json:"rewards,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketLaunched) Reset() { @@ -3139,13 +3112,12 @@ func (x *RoomRocketLaunched) GetRewards() []*RoomRocketRewardGrant { // RoomRocketRewardGranted 是客户端展示发奖弹窗和私有通知的最小事实。 type RoomRocketRewardGranted struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + Rewards []*RoomRocketRewardGrant `protobuf:"bytes,3,rep,name=rewards,proto3" json:"rewards,omitempty"` unknownFields protoimpl.UnknownFields - - RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - Rewards []*RoomRocketRewardGrant `protobuf:"bytes,3,rep,name=rewards,proto3" json:"rewards,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRocketRewardGranted) Reset() { @@ -3201,659 +3173,355 @@ func (x *RoomRocketRewardGranted) GetRewards() []*RoomRocketRewardGrant { var File_proto_events_room_v1_events_proto protoreflect.FileDescriptor -var file_proto_events_room_v1_events_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x72, - 0x6f, 0x6f, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x22, 0xda, 0x01, 0x0a, 0x0d, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x63, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, - 0x29, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x6d, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x72, 0x6c, 0x22, 0x90, 0x01, 0x0a, 0x15, 0x52, 0x6f, - 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x6d, 0x42, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x72, 0x6c, 0x22, 0xc7, 0x02, 0x0a, - 0x18, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, - 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe9, 0x04, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x53, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x76, 0x65, 0x68, 0x69, - 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x70, 0x72, - 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x65, 0x74, - 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x28, 0x0a, 0x10, 0x76, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x70, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x69, 0x70, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x69, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x56, 0x69, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x6f, 0x6f, 0x6d, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x27, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x65, - 0x66, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x0a, 0x52, - 0x6f, 0x6f, 0x6d, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x9d, 0x05, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x69, - 0x63, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x65, 0x61, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x5f, 0x73, 0x65, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x74, 0x6f, 0x53, 0x65, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, - 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, - 0x65, 0x4d, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x63, 0x5f, 0x6d, 0x75, - 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x69, 0x63, 0x4d, 0x75, - 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, - 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x72, - 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x69, 0x63, - 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x22, - 0x56, 0x0a, 0x16, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7d, 0x0a, 0x13, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x10, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x6f, - 0x0a, 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x22, - 0x5a, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x63, 0x6b, 0x65, - 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x10, 0x52, - 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xf1, 0x09, 0x0a, 0x0c, 0x52, 0x6f, - 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, - 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x67, 0x69, 0x66, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x69, 0x66, 0x74, 0x41, 0x6e, 0x69, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x67, 0x69, - 0x66, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x69, 0x66, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x79, 0x6e, 0x74, 0x68, 0x65, 0x74, - 0x69, 0x63, 0x5f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x79, 0x6e, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65, 0x61, 0x6c, 0x5f, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x69, 0x66, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, - 0x0a, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, - 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x37, 0x0a, 0x18, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x1f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xdc, 0x04, - 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, - 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x64, - 0x62, 0x61, 0x63, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x69, 0x67, - 0x68, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x96, 0x04, 0x0a, - 0x13, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, - 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x15, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x1f, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x1b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, - 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x47, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x69, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x0a, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, - 0x67, 0x69, 0x66, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x22, 0x89, 0x07, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, - 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x19, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, - 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, - 0x70, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x68, 0x65, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x6f, 0x6f, - 0x6d, 0x48, 0x65, 0x61, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x67, 0x69, 0x66, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, - 0x2c, 0x0a, 0x12, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x69, 0x66, - 0x74, 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, - 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x45, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x43, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, - 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x22, 0x96, 0x08, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, - 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x19, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, - 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, - 0x70, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, - 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, - 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x0a, - 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x65, 0x65, - 0x64, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x61, - 0x67, 0x65, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x69, - 0x67, 0x68, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, - 0x64, 0x72, 0x61, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x77, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x80, 0x04, 0x0a, 0x17, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, - 0x74, 0x44, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, - 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, - 0x70, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x34, - 0x0a, 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x79, 0x6e, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x73, 0x79, 0x6e, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63, 0x22, 0x4a, 0x0a, - 0x0f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x74, 0x22, 0x5f, 0x0a, 0x0f, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x94, 0x02, 0x0a, 0x15, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0xeb, 0x03, 0x0a, 0x15, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x46, 0x75, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x66, 0x75, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x61, 0x64, 0x64, 0x65, 0x64, 0x46, 0x75, 0x65, 0x6c, 0x12, 0x30, 0x0a, - 0x14, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x5f, 0x66, 0x75, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x46, 0x75, 0x65, 0x6c, 0x12, - 0x23, 0x0a, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x66, 0x75, 0x65, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, - 0x46, 0x75, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x66, 0x75, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x46, 0x75, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x75, 0x65, 0x6c, 0x5f, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x66, 0x75, 0x65, 0x6c, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, - 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x82, 0x04, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x67, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x75, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x75, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, - 0x75, 0x65, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x66, 0x75, 0x65, 0x6c, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x69, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x0c, 0x74, 0x6f, 0x70, 0x31, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x31, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x6f, 0x6f, 0x6d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x76, 0x65, - 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, 0x65, 0x74, - 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe6, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x24, 0x0a, - 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, 0x65, 0x74, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x31, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x31, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, - 0x10, 0x69, 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0x93, 0x01, - 0x0a, 0x17, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x07, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x42, 0x33, 0x5a, 0x31, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x6f, 0x6f, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x6f, 0x6f, 0x6d, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_events_room_v1_events_proto_rawDesc = "" + + "\n" + + "!proto/events/room/v1/events.proto\x12\x14hyapp.events.room.v1\"\xda\x01\n" + + "\rEventEnvelope\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x1d\n" + + "\n" + + "event_type\x18\x03 \x01(\tR\teventType\x12!\n" + + "\froom_version\x18\x04 \x01(\x03R\vroomVersion\x12$\n" + + "\x0eoccurred_at_ms\x18\x05 \x01(\x03R\foccurredAtMs\x12\x12\n" + + "\x04body\x18\x06 \x01(\fR\x04body\x12\x19\n" + + "\bapp_code\x18\a \x01(\tR\aappCode\"\xcd\x01\n" + + "\vRoomCreated\x12\"\n" + + "\rowner_user_id\x18\x01 \x01(\x03R\vownerUserId\x12\x1d\n" + + "\n" + + "seat_count\x18\x03 \x01(\x05R\tseatCount\x12\x12\n" + + "\x04mode\x18\x04 \x01(\tR\x04mode\x12\x1b\n" + + "\troom_name\x18\x05 \x01(\tR\broomName\x12\x1f\n" + + "\vroom_avatar\x18\x06 \x01(\tR\n" + + "roomAvatar\x12)\n" + + "\x10room_description\x18\a \x01(\tR\x0froomDescription\"\xf0\x01\n" + + "\x12RoomProfileUpdated\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12\x1b\n" + + "\troom_name\x18\x02 \x01(\tR\broomName\x12\x1f\n" + + "\vroom_avatar\x18\x03 \x01(\tR\n" + + "roomAvatar\x12)\n" + + "\x10room_description\x18\x04 \x01(\tR\x0froomDescription\x12\x1d\n" + + "\n" + + "seat_count\x18\x05 \x01(\x05R\tseatCount\x12.\n" + + "\x13room_background_url\x18\x06 \x01(\tR\x11roomBackgroundUrl\"\x90\x01\n" + + "\x15RoomBackgroundChanged\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12#\n" + + "\rbackground_id\x18\x02 \x01(\x03R\fbackgroundId\x12.\n" + + "\x13room_background_url\x18\x03 \x01(\tR\x11roomBackgroundUrl\"\xc7\x02\n" + + "\x18RoomEntryVehicleSnapshot\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_code\x18\x02 \x01(\tR\fresourceCode\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x1b\n" + + "\tasset_url\x18\x04 \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\x05 \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\x06 \x01(\tR\fanimationUrl\x12#\n" + + "\rmetadata_json\x18\a \x01(\tR\fmetadataJson\x12%\n" + + "\x0eentitlement_id\x18\b \x01(\tR\rentitlementId\x12\"\n" + + "\rexpires_at_ms\x18\t \x01(\x03R\vexpiresAtMs\"\xe9\x04\n" + + "\x0eRoomUserJoined\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x12\n" + + "\x04role\x18\x02 \x01(\tR\x04role\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\x12S\n" + + "\rentry_vehicle\x18\x04 \x01(\v2..hyapp.events.room.v1.RoomEntryVehicleSnapshotR\fentryVehicle\x12\x1d\n" + + "\n" + + "country_id\x18\x05 \x01(\x03R\tcountryId\x12\x1b\n" + + "\tregion_id\x18\x06 \x01(\x03R\bregionId\x12\x19\n" + + "\bis_robot\x18\a \x01(\bR\aisRobot\x12\x1a\n" + + "\bnickname\x18\b \x01(\tR\bnickname\x12\x16\n" + + "\x06avatar\x18\t \x01(\tR\x06avatar\x12&\n" + + "\x0fdisplay_user_id\x18\n" + + " \x01(\tR\rdisplayUserId\x123\n" + + "\x16pretty_display_user_id\x18\v \x01(\tR\x13prettyDisplayUserId\x12(\n" + + "\x10vip_program_type\x18\f \x01(\tR\x0evipProgramType\x12.\n" + + "\x13effective_vip_level\x18\r \x01(\x05R\x11effectiveVipLevel\x12,\n" + + "\x12effective_vip_name\x18\x0e \x01(\tR\x10effectiveVipName\x129\n" + + "\x19room_entry_notice_enabled\x18\x0f \x01(\bR\x16roomEntryNoticeEnabled\"'\n" + + "\fRoomUserLeft\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\"H\n" + + "\n" + + "RoomClosed\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"\x9d\x05\n" + + "\x0eRoomMicChanged\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x1b\n" + + "\tfrom_seat\x18\x03 \x01(\x05R\bfromSeat\x12\x17\n" + + "\ato_seat\x18\x04 \x01(\x05R\x06toSeat\x12\x16\n" + + "\x06action\x18\x05 \x01(\tR\x06action\x12$\n" + + "\x0emic_session_id\x18\x06 \x01(\tR\fmicSessionId\x12#\n" + + "\rpublish_state\x18\a \x01(\tR\fpublishState\x12\x16\n" + + "\x06reason\x18\b \x01(\tR\x06reason\x12.\n" + + "\x13publish_deadline_ms\x18\t \x01(\x03R\x11publishDeadlineMs\x121\n" + + "\x15publish_event_time_ms\x18\n" + + " \x01(\x03R\x12publishEventTimeMs\x12\x1b\n" + + "\tmic_muted\x18\v \x01(\bR\bmicMuted\x12\x1f\n" + + "\vseat_status\x18\f \x01(\tR\n" + + "seatStatus\x12*\n" + + "\x11target_gift_value\x18\r \x01(\x03R\x0ftargetGiftValue\x12'\n" + + "\x0ftarget_nickname\x18\x0e \x01(\tR\x0etargetNickname\x12#\n" + + "\rtarget_avatar\x18\x0f \x01(\tR\ftargetAvatar\x123\n" + + "\x16target_display_user_id\x18\x10 \x01(\tR\x13targetDisplayUserId\x12@\n" + + "\x1dtarget_pretty_display_user_id\x18\x11 \x01(\tR\x19targetPrettyDisplayUserId\"h\n" + + "\x11RoomMicSeatLocked\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12\x16\n" + + "\x06locked\x18\x03 \x01(\bR\x06locked\"V\n" + + "\x16RoomChatEnabledChanged\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\"}\n" + + "\x13RoomPasswordChanged\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12\x16\n" + + "\x06locked\x18\x02 \x01(\bR\x06locked\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\"v\n" + + "\x10RoomAdminChanged\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\"o\n" + + "\rRoomUserMuted\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x14\n" + + "\x05muted\x18\x03 \x01(\bR\x05muted\"Z\n" + + "\x0eRoomUserKicked\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\"\\\n" + + "\x10RoomUserUnbanned\x12\"\n" + + "\ractor_user_id\x18\x01 \x01(\x03R\vactorUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\"\xf1\t\n" + + "\fRoomGiftSent\x12$\n" + + "\x0esender_user_id\x18\x01 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x04 \x01(\x05R\tgiftCount\x12\x1d\n" + + "\n" + + "gift_value\x18\x05 \x01(\x03R\tgiftValue\x12,\n" + + "\x12billing_receipt_id\x18\x06 \x01(\tR\x10billingReceiptId\x12*\n" + + "\x11visible_region_id\x18\a \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" + + "\n" + + "command_id\x18\b \x01(\tR\tcommandId\x12\x17\n" + + "\apool_id\x18\t \x01(\tR\x06poolId\x12\x1d\n" + + "\n" + + "coin_spent\x18\n" + + " \x01(\x03R\tcoinSpent\x12\x1d\n" + + "\n" + + "country_id\x18\v \x01(\x03R\tcountryId\x12\x1b\n" + + "\tregion_id\x18\f \x01(\x03R\bregionId\x12$\n" + + "\x0egift_type_code\x18\r \x01(\tR\fgiftTypeCode\x12(\n" + + "\x10cp_relation_type\x18\x0e \x01(\tR\x0ecpRelationType\x12\x1b\n" + + "\tgift_name\x18\x0f \x01(\tR\bgiftName\x12\"\n" + + "\rgift_icon_url\x18\x10 \x01(\tR\vgiftIconUrl\x12,\n" + + "\x12gift_animation_url\x18\x11 \x01(\tR\x10giftAnimationUrl\x12*\n" + + "\x11target_gift_value\x18\x12 \x01(\x03R\x0ftargetGiftValue\x12*\n" + + "\x11gift_effect_types\x18\x13 \x03(\tR\x0fgiftEffectTypes\x12\"\n" + + "\ris_robot_gift\x18\x14 \x01(\bR\visRobotGift\x120\n" + + "\x14synthetic_lucky_gift\x18\x15 \x01(\bR\x12syntheticLuckyGift\x12/\n" + + "\x14real_room_robot_gift\x18\x16 \x01(\bR\x11realRoomRobotGift\x12\x1f\n" + + "\vsender_name\x18\x17 \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\x18 \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\x19 \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\x1a \x01(\tR\x19senderPrettyDisplayUserId\x12+\n" + + "\x11receiver_nickname\x18\x1b \x01(\tR\x10receiverNickname\x12'\n" + + "\x0freceiver_avatar\x18\x1c \x01(\tR\x0ereceiverAvatar\x127\n" + + "\x18receiver_display_user_id\x18\x1d \x01(\tR\x15receiverDisplayUserId\x12D\n" + + "\x1freceiver_pretty_display_user_id\x18\x1e \x01(\tR\x1breceiverPrettyDisplayUserId\x12!\n" + + "\fdisplay_mode\x18\x1f \x01(\tR\vdisplayMode\"\xdc\x04\n" + + "\x18RoomGiftBatchLuckyResult\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x17\n" + + "\adraw_id\x18\x02 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x17\n" + + "\apool_id\x18\x04 \x01(\tR\x06poolId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12!\n" + + "\frule_version\x18\x06 \x01(\x03R\vruleVersion\x12'\n" + + "\x0fexperience_pool\x18\a \x01(\tR\x0eexperiencePool\x12(\n" + + "\x10selected_tier_id\x18\b \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\t \x01(\x03R\rmultiplierPpm\x12*\n" + + "\x11base_reward_coins\x18\n" + + " \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\v \x01(\x03R\x14effectiveRewardCoins\x12#\n" + + "\rreward_status\x18\f \x01(\tR\frewardStatus\x12%\n" + + "\x0estage_feedback\x18\r \x01(\bR\rstageFeedback\x12'\n" + + "\x0fhigh_multiplier\x18\x0e \x01(\bR\x0ehighMultiplier\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12$\n" + + "\x0etarget_user_id\x18\x10 \x01(\x03R\ftargetUserId\"\x96\x04\n" + + "\x13RoomGiftBatchTarget\x12$\n" + + "\x0etarget_user_id\x18\x01 \x01(\x03R\ftargetUserId\x12+\n" + + "\x11receiver_nickname\x18\x02 \x01(\tR\x10receiverNickname\x12'\n" + + "\x0freceiver_avatar\x18\x03 \x01(\tR\x0ereceiverAvatar\x127\n" + + "\x18receiver_display_user_id\x18\x04 \x01(\tR\x15receiverDisplayUserId\x12D\n" + + "\x1freceiver_pretty_display_user_id\x18\x05 \x01(\tR\x1breceiverPrettyDisplayUserId\x12\x1d\n" + + "\n" + + "gift_value\x18\x06 \x01(\x03R\tgiftValue\x12*\n" + + "\x11target_gift_value\x18\a \x01(\x03R\x0ftargetGiftValue\x12\x1d\n" + + "\n" + + "coin_spent\x18\b \x01(\x03R\tcoinSpent\x12,\n" + + "\x12billing_receipt_id\x18\t \x01(\tR\x10billingReceiptId\x12\x1d\n" + + "\n" + + "command_id\x18\n" + + " \x01(\tR\tcommandId\x12M\n" + + "\n" + + "lucky_gift\x18\v \x01(\v2..hyapp.events.room.v1.RoomGiftBatchLuckyResultR\tluckyGift\"\x89\a\n" + + "\x11RoomGiftBatchSent\x12$\n" + + "\x0esender_user_id\x18\x01 \x01(\x03R\fsenderUserId\x12\x1f\n" + + "\vsender_name\x18\x02 \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\x03 \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\x04 \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\x05 \x01(\tR\x19senderPrettyDisplayUserId\x12\x17\n" + + "\agift_id\x18\x06 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\a \x01(\x05R\tgiftCount\x12(\n" + + "\x10total_gift_value\x18\b \x01(\x03R\x0etotalGiftValue\x12(\n" + + "\x10total_coin_spent\x18\t \x01(\x03R\x0etotalCoinSpent\x12,\n" + + "\x12billing_receipt_id\x18\n" + + " \x01(\tR\x10billingReceiptId\x12\x1b\n" + + "\troom_heat\x18\v \x01(\x03R\broomHeat\x12\x17\n" + + "\apool_id\x18\f \x01(\tR\x06poolId\x12$\n" + + "\x0egift_type_code\x18\r \x01(\tR\fgiftTypeCode\x12(\n" + + "\x10cp_relation_type\x18\x0e \x01(\tR\x0ecpRelationType\x12\x1b\n" + + "\tgift_name\x18\x0f \x01(\tR\bgiftName\x12\"\n" + + "\rgift_icon_url\x18\x10 \x01(\tR\vgiftIconUrl\x12,\n" + + "\x12gift_animation_url\x18\x11 \x01(\tR\x10giftAnimationUrl\x12*\n" + + "\x11gift_effect_types\x18\x12 \x03(\tR\x0fgiftEffectTypes\x12&\n" + + "\x0ftarget_user_ids\x18\x13 \x03(\x03R\rtargetUserIds\x12C\n" + + "\atargets\x18\x14 \x03(\v2).hyapp.events.room.v1.RoomGiftBatchTargetR\atargets\x12\x1d\n" + + "\n" + + "command_id\x18\x15 \x01(\tR\tcommandId\x12*\n" + + "\x11visible_region_id\x18\x16 \x01(\x03R\x0fvisibleRegionId\"\x96\b\n" + + "\x12RoomLuckyGiftDrawn\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\apool_id\x18\x03 \x01(\tR\x06poolId\x12\x17\n" + + "\agift_id\x18\x04 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x05 \x01(\x05R\tgiftCount\x12$\n" + + "\x0esender_user_id\x18\x06 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\a \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vsender_name\x18\b \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\t \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\n" + + " \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\v \x01(\tR\x19senderPrettyDisplayUserId\x12*\n" + + "\x11visible_region_id\x18\f \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" + + "\n" + + "country_id\x18\r \x01(\x03R\tcountryId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x0e \x01(\x03R\tcoinSpent\x12!\n" + + "\frule_version\x18\x0f \x01(\x03R\vruleVersion\x12'\n" + + "\x0fexperience_pool\x18\x10 \x01(\tR\x0eexperiencePool\x12(\n" + + "\x10selected_tier_id\x18\x11 \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\x12 \x01(\x03R\rmultiplierPpm\x12*\n" + + "\x11base_reward_coins\x18\x13 \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\x14 \x01(\x03R\x14effectiveRewardCoins\x12%\n" + + "\x0estage_feedback\x18\x15 \x01(\bR\rstageFeedback\x12'\n" + + "\x0fhigh_multiplier\x18\x16 \x01(\bR\x0ehighMultiplier\x12#\n" + + "\rreward_status\x18\x17 \x01(\tR\frewardStatus\x122\n" + + "\x15wallet_transaction_id\x18\x18 \x01(\tR\x13walletTransactionId\x12+\n" + + "\x12draw_created_at_ms\x18\x19 \x01(\x03R\x0fdrawCreatedAtMs\x12/\n" + + "\x14reward_granted_at_ms\x18\x1a \x01(\x03R\x11rewardGrantedAtMs\"\x80\x04\n" + + "\x17RoomRobotLuckyGiftDrawn\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12$\n" + + "\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x05R\tgiftCount\x12\x17\n" + + "\apool_id\x18\a \x01(\tR\x06poolId\x12%\n" + + "\x0emultiplier_ppm\x18\b \x01(\x03R\rmultiplierPpm\x12*\n" + + "\x11base_reward_coins\x18\t \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\n" + + " \x01(\x03R\x14effectiveRewardCoins\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12*\n" + + "\x11visible_region_id\x18\f \x01(\x03R\x0fvisibleRegionId\x12\x19\n" + + "\bis_robot\x18\r \x01(\bR\aisRobot\x12\x1c\n" + + "\tsynthetic\x18\x0e \x01(\bR\tsynthetic\"J\n" + + "\x0fRoomHeatChanged\x12\x14\n" + + "\x05delta\x18\x01 \x01(\x03R\x05delta\x12!\n" + + "\fcurrent_heat\x18\x02 \x01(\x03R\vcurrentHeat\"_\n" + + "\x0fRoomRankChanged\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x02 \x01(\x03R\x05score\x12\x1d\n" + + "\n" + + "gift_value\x18\x03 \x01(\x03R\tgiftValue\"\x94\x02\n" + + "\x15RoomRocketRewardGrant\x12\x1f\n" + + "\vreward_role\x18\x01 \x01(\tR\n" + + "rewardRole\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12$\n" + + "\x0ereward_item_id\x18\x03 \x01(\tR\frewardItemId\x12*\n" + + "\x11resource_group_id\x18\x04 \x01(\x03R\x0fresourceGroupId\x12!\n" + + "\fdisplay_name\x18\x05 \x01(\tR\vdisplayName\x12\x19\n" + + "\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x19\n" + + "\bgrant_id\x18\a \x01(\tR\agrantId\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\"\xeb\x03\n" + + "\x15RoomRocketFuelChanged\x12\x1b\n" + + "\trocket_id\x18\x01 \x01(\tR\brocketId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x1d\n" + + "\n" + + "added_fuel\x18\x03 \x01(\x03R\taddedFuel\x120\n" + + "\x14effective_added_fuel\x18\x04 \x01(\x03R\x12effectiveAddedFuel\x12#\n" + + "\roverflow_fuel\x18\x05 \x01(\x03R\foverflowFuel\x12!\n" + + "\fcurrent_fuel\x18\x06 \x01(\x03R\vcurrentFuel\x12%\n" + + "\x0efuel_threshold\x18\a \x01(\x03R\rfuelThreshold\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12\x1e\n" + + "\vreset_at_ms\x18\t \x01(\x03R\tresetAtMs\x12$\n" + + "\x0esender_user_id\x18\n" + + " \x01(\x03R\fsenderUserId\x12\x17\n" + + "\agift_id\x18\v \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\f \x01(\x05R\tgiftCount\x12\x1d\n" + + "\n" + + "command_id\x18\r \x01(\tR\tcommandId\x12*\n" + + "\x11visible_region_id\x18\x0e \x01(\x03R\x0fvisibleRegionId\"\x82\x04\n" + + "\x11RoomRocketIgnited\x12\x1b\n" + + "\trocket_id\x18\x01 \x01(\tR\brocketId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12!\n" + + "\fcurrent_fuel\x18\x03 \x01(\x03R\vcurrentFuel\x12%\n" + + "\x0efuel_threshold\x18\x04 \x01(\x03R\rfuelThreshold\x12\"\n" + + "\rignited_at_ms\x18\x05 \x01(\x03R\vignitedAtMs\x12 \n" + + "\flaunch_at_ms\x18\x06 \x01(\x03R\n" + + "launchAtMs\x12'\n" + + "\x0fbroadcast_scope\x18\a \x01(\tR\x0ebroadcastScope\x12*\n" + + "\x11visible_region_id\x18\b \x01(\x03R\x0fvisibleRegionId\x12 \n" + + "\ftop1_user_id\x18\t \x01(\x03R\n" + + "top1UserId\x12&\n" + + "\x0figniter_user_id\x18\n" + + " \x01(\x03R\rigniterUserId\x12\x1d\n" + + "\n" + + "command_id\x18\v \x01(\tR\tcommandId\x12\"\n" + + "\rroom_short_id\x18\f \x01(\tR\vroomShortId\x12(\n" + + "\x10rocket_cover_url\x18\r \x01(\tR\x0erocketCoverUrl\x12\x1e\n" + + "\vreset_at_ms\x18\x0e \x01(\x03R\tresetAtMs\"\xe6\x02\n" + + "\x12RoomRocketLaunched\x12\x1b\n" + + "\trocket_id\x18\x01 \x01(\tR\brocketId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x1d\n" + + "\n" + + "next_level\x18\x03 \x01(\x05R\tnextLevel\x12$\n" + + "\x0elaunched_at_ms\x18\x04 \x01(\x03R\flaunchedAtMs\x12\x1e\n" + + "\vreset_at_ms\x18\x05 \x01(\x03R\tresetAtMs\x12 \n" + + "\ftop1_user_id\x18\x06 \x01(\x03R\n" + + "top1UserId\x12&\n" + + "\x0figniter_user_id\x18\a \x01(\x03R\rigniterUserId\x12'\n" + + "\x10in_room_user_ids\x18\b \x03(\x03R\rinRoomUserIds\x12E\n" + + "\arewards\x18\t \x03(\v2+.hyapp.events.room.v1.RoomRocketRewardGrantR\arewards\"\x93\x01\n" + + "\x17RoomRocketRewardGranted\x12\x1b\n" + + "\trocket_id\x18\x01 \x01(\tR\brocketId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12E\n" + + "\arewards\x18\x03 \x03(\v2+.hyapp.events.room.v1.RoomRocketRewardGrantR\arewardsB3Z1hyapp.local/api/proto/events/room/v1;roomeventsv1b\x06proto3" var ( file_proto_events_room_v1_events_proto_rawDescOnce sync.Once - file_proto_events_room_v1_events_proto_rawDescData = file_proto_events_room_v1_events_proto_rawDesc + file_proto_events_room_v1_events_proto_rawDescData []byte ) func file_proto_events_room_v1_events_proto_rawDescGZIP() []byte { file_proto_events_room_v1_events_proto_rawDescOnce.Do(func() { - file_proto_events_room_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_events_room_v1_events_proto_rawDescData) + file_proto_events_room_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_events_room_v1_events_proto_rawDesc), len(file_proto_events_room_v1_events_proto_rawDesc))) }) return file_proto_events_room_v1_events_proto_rawDescData } @@ -3912,7 +3580,7 @@ func file_proto_events_room_v1_events_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_events_room_v1_events_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_events_room_v1_events_proto_rawDesc), len(file_proto_events_room_v1_events_proto_rawDesc)), NumEnums: 0, NumMessages: 29, NumExtensions: 0, @@ -3923,7 +3591,6 @@ func file_proto_events_room_v1_events_proto_init() { MessageInfos: file_proto_events_room_v1_events_proto_msgTypes, }.Build() File_proto_events_room_v1_events_proto = out.File - file_proto_events_room_v1_events_proto_rawDesc = nil file_proto_events_room_v1_events_proto_goTypes = nil file_proto_events_room_v1_events_proto_depIdxs = nil } diff --git a/api/proto/game/v1/game.pb.go b/api/proto/game/v1/game.pb.go index 12044271..358b1668 100644 --- a/api/proto/game/v1/game.pb.go +++ b/api/proto/game/v1/game.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/game/v1/game.proto package gamev1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,16 +23,15 @@ const ( // RequestMeta 是 game-service 内部 RPC 的最小追踪和租户上下文。 type RequestMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` + GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` + ActorUserId int64 `protobuf:"varint,4,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + SentAtMs int64 `protobuf:"varint,5,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` - GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` - ActorUserId int64 `protobuf:"varint,4,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - SentAtMs int64 `protobuf:"varint,5,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` - AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RequestMeta) Reset() { @@ -107,24 +107,23 @@ func (x *RequestMeta) GetAppCode() string { } type GamePlatform struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - PlatformName string `protobuf:"bytes,3,opt,name=platform_name,json=platformName,proto3" json:"platform_name,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - ApiBaseUrl string `protobuf:"bytes,5,opt,name=api_base_url,json=apiBaseUrl,proto3" json:"api_base_url,omitempty"` - SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - AdapterType string `protobuf:"bytes,9,opt,name=adapter_type,json=adapterType,proto3" json:"adapter_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + PlatformName string `protobuf:"bytes,3,opt,name=platform_name,json=platformName,proto3" json:"platform_name,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + ApiBaseUrl string `protobuf:"bytes,5,opt,name=api_base_url,json=apiBaseUrl,proto3" json:"api_base_url,omitempty"` + SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + AdapterType string `protobuf:"bytes,9,opt,name=adapter_type,json=adapterType,proto3" json:"adapter_type,omitempty"` // callback_secret is visible to admin platform configuration pages and writable for key rotation. CallbackSecret string `protobuf:"bytes,10,opt,name=callback_secret,json=callbackSecret,proto3" json:"callback_secret,omitempty"` CallbackSecretSet bool `protobuf:"varint,11,opt,name=callback_secret_set,json=callbackSecretSet,proto3" json:"callback_secret_set,omitempty"` CallbackIpWhitelist []string `protobuf:"bytes,12,rep,name=callback_ip_whitelist,json=callbackIpWhitelist,proto3" json:"callback_ip_whitelist,omitempty"` AdapterConfigJson string `protobuf:"bytes,13,opt,name=adapter_config_json,json=adapterConfigJson,proto3" json:"adapter_config_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GamePlatform) Reset() { @@ -249,29 +248,28 @@ func (x *GamePlatform) GetAdapterConfigJson() string { } type GameCatalogItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - PlatformCode string `protobuf:"bytes,3,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - ProviderGameId string `protobuf:"bytes,4,opt,name=provider_game_id,json=providerGameId,proto3" json:"provider_game_id,omitempty"` - GameName string `protobuf:"bytes,5,opt,name=game_name,json=gameName,proto3" json:"game_name,omitempty"` - Category string `protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"` - IconUrl string `protobuf:"bytes,7,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - CoverUrl string `protobuf:"bytes,8,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` - LaunchMode string `protobuf:"bytes,9,opt,name=launch_mode,json=launchMode,proto3" json:"launch_mode,omitempty"` - Orientation string `protobuf:"bytes,10,opt,name=orientation,proto3" json:"orientation,omitempty"` - MinCoin int64 `protobuf:"varint,11,opt,name=min_coin,json=minCoin,proto3" json:"min_coin,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,13,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - Tags []string `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - SafeHeight int32 `protobuf:"varint,17,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + PlatformCode string `protobuf:"bytes,3,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + ProviderGameId string `protobuf:"bytes,4,opt,name=provider_game_id,json=providerGameId,proto3" json:"provider_game_id,omitempty"` + GameName string `protobuf:"bytes,5,opt,name=game_name,json=gameName,proto3" json:"game_name,omitempty"` + Category string `protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"` + IconUrl string `protobuf:"bytes,7,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + CoverUrl string `protobuf:"bytes,8,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + LaunchMode string `protobuf:"bytes,9,opt,name=launch_mode,json=launchMode,proto3" json:"launch_mode,omitempty"` + Orientation string `protobuf:"bytes,10,opt,name=orientation,proto3" json:"orientation,omitempty"` + MinCoin int64 `protobuf:"varint,11,opt,name=min_coin,json=minCoin,proto3" json:"min_coin,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,13,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Tags []string `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + SafeHeight int32 `protobuf:"varint,17,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` // whitelist_enabled 关闭时保持历史全量可见语义;开启后只向 game_user_whitelist 中的用户展示并允许启动。 WhitelistEnabled bool `protobuf:"varint,18,opt,name=whitelist_enabled,json=whitelistEnabled,proto3" json:"whitelist_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameCatalogItem) Reset() { @@ -431,24 +429,23 @@ func (x *GameCatalogItem) GetWhitelistEnabled() bool { } type AppGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GameId string `protobuf:"bytes,1,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + NameKey string `protobuf:"bytes,3,opt,name=name_key,json=nameKey,proto3" json:"name_key,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + IconUrl string `protobuf:"bytes,5,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + Category string `protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"` + LaunchMode string `protobuf:"bytes,8,opt,name=launch_mode,json=launchMode,proto3" json:"launch_mode,omitempty"` + Orientation string `protobuf:"bytes,9,opt,name=orientation,proto3" json:"orientation,omitempty"` + MinCoin int64 `protobuf:"varint,10,opt,name=min_coin,json=minCoin,proto3" json:"min_coin,omitempty"` + Enabled bool `protobuf:"varint,11,opt,name=enabled,proto3" json:"enabled,omitempty"` + Maintenance bool `protobuf:"varint,12,opt,name=maintenance,proto3" json:"maintenance,omitempty"` + SortOrder int32 `protobuf:"varint,13,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + SafeHeight int32 `protobuf:"varint,14,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` unknownFields protoimpl.UnknownFields - - GameId string `protobuf:"bytes,1,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - NameKey string `protobuf:"bytes,3,opt,name=name_key,json=nameKey,proto3" json:"name_key,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - IconUrl string `protobuf:"bytes,5,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` - Category string `protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"` - LaunchMode string `protobuf:"bytes,8,opt,name=launch_mode,json=launchMode,proto3" json:"launch_mode,omitempty"` - Orientation string `protobuf:"bytes,9,opt,name=orientation,proto3" json:"orientation,omitempty"` - MinCoin int64 `protobuf:"varint,10,opt,name=min_coin,json=minCoin,proto3" json:"min_coin,omitempty"` - Enabled bool `protobuf:"varint,11,opt,name=enabled,proto3" json:"enabled,omitempty"` - Maintenance bool `protobuf:"varint,12,opt,name=maintenance,proto3" json:"maintenance,omitempty"` - SortOrder int32 `protobuf:"varint,13,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - SafeHeight int32 `protobuf:"varint,14,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppGame) Reset() { @@ -580,17 +577,16 @@ func (x *AppGame) GetSafeHeight() int32 { } type ListGamesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Scene string `protobuf:"bytes,3,opt,name=scene,proto3" json:"scene,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Language string `protobuf:"bytes,6,opt,name=language,proto3" json:"language,omitempty"` - ClientPlatform string `protobuf:"bytes,7,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Scene string `protobuf:"bytes,3,opt,name=scene,proto3" json:"scene,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Language string `protobuf:"bytes,6,opt,name=language,proto3" json:"language,omitempty"` + ClientPlatform string `protobuf:"bytes,7,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListGamesRequest) Reset() { @@ -673,12 +669,11 @@ func (x *ListGamesRequest) GetClientPlatform() string { } type ListGamesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Games []*AppGame `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Games []*AppGame `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGamesResponse) Reset() { @@ -726,18 +721,17 @@ func (x *ListGamesResponse) GetServerTimeMs() int64 { } type ListRecentGamesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Scene string `protobuf:"bytes,3,opt,name=scene,proto3" json:"scene,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Language string `protobuf:"bytes,6,opt,name=language,proto3" json:"language,omitempty"` - ClientPlatform string `protobuf:"bytes,7,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"` - PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Scene string `protobuf:"bytes,3,opt,name=scene,proto3" json:"scene,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Language string `protobuf:"bytes,6,opt,name=language,proto3" json:"language,omitempty"` + ClientPlatform string `protobuf:"bytes,7,opt,name=client_platform,json=clientPlatform,proto3" json:"client_platform,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRecentGamesRequest) Reset() { @@ -827,12 +821,11 @@ func (x *ListRecentGamesRequest) GetPageSize() int32 { } type ListExploreWinnersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListExploreWinnersRequest) Reset() { @@ -880,18 +873,17 @@ func (x *ListExploreWinnersRequest) GetPageSize() int32 { } type ExploreWinner struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + WinId string `protobuf:"bytes,1,opt,name=win_id,json=winId,proto3" json:"win_id,omitempty"` + GameCode string `protobuf:"bytes,2,opt,name=game_code,json=gameCode,proto3" json:"game_code,omitempty"` + GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + AvatarUrl string `protobuf:"bytes,6,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + CoinAmount int64 `protobuf:"varint,7,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + WonAtMs int64 `protobuf:"varint,8,opt,name=won_at_ms,json=wonAtMs,proto3" json:"won_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - WinId string `protobuf:"bytes,1,opt,name=win_id,json=winId,proto3" json:"win_id,omitempty"` - GameCode string `protobuf:"bytes,2,opt,name=game_code,json=gameCode,proto3" json:"game_code,omitempty"` - GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - AvatarUrl string `protobuf:"bytes,6,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` - CoinAmount int64 `protobuf:"varint,7,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - WonAtMs int64 `protobuf:"varint,8,opt,name=won_at_ms,json=wonAtMs,proto3" json:"won_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExploreWinner) Reset() { @@ -981,12 +973,11 @@ func (x *ExploreWinner) GetWonAtMs() int64 { } type ListExploreWinnersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Winners []*ExploreWinner `protobuf:"bytes,1,rep,name=winners,proto3" json:"winners,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Winners []*ExploreWinner `protobuf:"bytes,1,rep,name=winners,proto3" json:"winners,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListExploreWinnersResponse) Reset() { @@ -1034,11 +1025,10 @@ func (x *ListExploreWinnersResponse) GetServerTimeMs() int64 { } type GetBridgeScriptRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBridgeScriptRequest) Reset() { @@ -1079,13 +1069,12 @@ func (x *GetBridgeScriptRequest) GetMeta() *RequestMeta { } type GameBridgeScriptConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BridgeScriptUrl string `protobuf:"bytes,1,opt,name=bridge_script_url,json=bridgeScriptUrl,proto3" json:"bridge_script_url,omitempty"` - BridgeScriptVersion string `protobuf:"bytes,2,opt,name=bridge_script_version,json=bridgeScriptVersion,proto3" json:"bridge_script_version,omitempty"` - BridgeScriptSha256 string `protobuf:"bytes,3,opt,name=bridge_script_sha256,json=bridgeScriptSha256,proto3" json:"bridge_script_sha256,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + BridgeScriptUrl string `protobuf:"bytes,1,opt,name=bridge_script_url,json=bridgeScriptUrl,proto3" json:"bridge_script_url,omitempty"` + BridgeScriptVersion string `protobuf:"bytes,2,opt,name=bridge_script_version,json=bridgeScriptVersion,proto3" json:"bridge_script_version,omitempty"` + BridgeScriptSha256 string `protobuf:"bytes,3,opt,name=bridge_script_sha256,json=bridgeScriptSha256,proto3" json:"bridge_script_sha256,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameBridgeScriptConfig) Reset() { @@ -1140,12 +1129,11 @@ func (x *GameBridgeScriptConfig) GetBridgeScriptSha256() string { } type GetBridgeScriptResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *GameBridgeScriptConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *GameBridgeScriptConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBridgeScriptResponse) Reset() { @@ -1193,21 +1181,20 @@ func (x *GetBridgeScriptResponse) GetServerTimeMs() int64 { } type LaunchGameRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DisplayUserId string `protobuf:"bytes,3,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Scene string `protobuf:"bytes,5,opt,name=scene,proto3" json:"scene,omitempty"` - RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DisplayUserId string `protobuf:"bytes,3,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Scene string `protobuf:"bytes,5,opt,name=scene,proto3" json:"scene,omitempty"` + RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` // access_token is the same bearer token used by the App request. // Provider adapters pass it through as the game token instead of minting a separate game token. AccessToken string `protobuf:"bytes,7,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"` // country_id 由 gateway 从当前用户资料注入,供 provider 回调订单按国家统计。 - CountryId int64 `protobuf:"varint,8,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,8,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LaunchGameRequest) Reset() { @@ -1297,16 +1284,15 @@ func (x *LaunchGameRequest) GetCountryId() int64 { } type LaunchGameResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + LaunchUrl string `protobuf:"bytes,2,opt,name=launch_url,json=launchUrl,proto3" json:"launch_url,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,3,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + Orientation string `protobuf:"bytes,4,opt,name=orientation,proto3" json:"orientation,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + SafeHeight int32 `protobuf:"varint,6,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` unknownFields protoimpl.UnknownFields - - SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - LaunchUrl string `protobuf:"bytes,2,opt,name=launch_url,json=launchUrl,proto3" json:"launch_url,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,3,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - Orientation string `protobuf:"bytes,4,opt,name=orientation,proto3" json:"orientation,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - SafeHeight int32 `protobuf:"varint,6,opt,name=safe_height,json=safeHeight,proto3" json:"safe_height,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LaunchGameResponse) Reset() { @@ -1382,23 +1368,22 @@ func (x *LaunchGameResponse) GetSafeHeight() int32 { } type DiceParticipant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - StakeCoin int64 `protobuf:"varint,4,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - DicePoints []int32 `protobuf:"varint,5,rep,packed,name=dice_points,json=dicePoints,proto3" json:"dice_points,omitempty"` - Result string `protobuf:"bytes,6,opt,name=result,proto3" json:"result,omitempty"` - PayoutCoin int64 `protobuf:"varint,7,opt,name=payout_coin,json=payoutCoin,proto3" json:"payout_coin,omitempty"` - BalanceAfter int64 `protobuf:"varint,8,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - JoinedAtMs int64 `protobuf:"varint,9,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ParticipantType string `protobuf:"bytes,11,opt,name=participant_type,json=participantType,proto3" json:"participant_type,omitempty"` - IsRobot bool `protobuf:"varint,12,opt,name=is_robot,json=isRobot,proto3" json:"is_robot,omitempty"` - RpsGesture string `protobuf:"bytes,13,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + StakeCoin int64 `protobuf:"varint,4,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + DicePoints []int32 `protobuf:"varint,5,rep,packed,name=dice_points,json=dicePoints,proto3" json:"dice_points,omitempty"` + Result string `protobuf:"bytes,6,opt,name=result,proto3" json:"result,omitempty"` + PayoutCoin int64 `protobuf:"varint,7,opt,name=payout_coin,json=payoutCoin,proto3" json:"payout_coin,omitempty"` + BalanceAfter int64 `protobuf:"varint,8,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + JoinedAtMs int64 `protobuf:"varint,9,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ParticipantType string `protobuf:"bytes,11,opt,name=participant_type,json=participantType,proto3" json:"participant_type,omitempty"` + IsRobot bool `protobuf:"varint,12,opt,name=is_robot,json=isRobot,proto3" json:"is_robot,omitempty"` + RpsGesture string `protobuf:"bytes,13,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DiceParticipant) Reset() { @@ -1523,38 +1508,37 @@ func (x *DiceParticipant) GetRpsGesture() string { } type DiceMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - MatchId string `protobuf:"bytes,2,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - MinPlayers int32 `protobuf:"varint,6,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` - MaxPlayers int32 `protobuf:"varint,7,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` - CurrentPlayers int32 `protobuf:"varint,8,opt,name=current_players,json=currentPlayers,proto3" json:"current_players,omitempty"` - StakeCoin int64 `protobuf:"varint,9,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - RoundNo int32 `protobuf:"varint,10,opt,name=round_no,json=roundNo,proto3" json:"round_no,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - Result string `protobuf:"bytes,12,opt,name=result,proto3" json:"result,omitempty"` - Participants []*DiceParticipant `protobuf:"bytes,13,rep,name=participants,proto3" json:"participants,omitempty"` - JoinDeadlineMs int64 `protobuf:"varint,14,opt,name=join_deadline_ms,json=joinDeadlineMs,proto3" json:"join_deadline_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - SettledAtMs int64 `protobuf:"varint,17,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` - Phase string `protobuf:"bytes,18,opt,name=phase,proto3" json:"phase,omitempty"` - PhaseDeadlineMs int64 `protobuf:"varint,19,opt,name=phase_deadline_ms,json=phaseDeadlineMs,proto3" json:"phase_deadline_ms,omitempty"` - FeeBps int32 `protobuf:"varint,20,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` - PoolBps int32 `protobuf:"varint,21,opt,name=pool_bps,json=poolBps,proto3" json:"pool_bps,omitempty"` - MatchMode string `protobuf:"bytes,22,opt,name=match_mode,json=matchMode,proto3" json:"match_mode,omitempty"` - ForcedResult string `protobuf:"bytes,23,opt,name=forced_result,json=forcedResult,proto3" json:"forced_result,omitempty"` - ReadyAtMs int64 `protobuf:"varint,24,opt,name=ready_at_ms,json=readyAtMs,proto3" json:"ready_at_ms,omitempty"` - CanceledAtMs int64 `protobuf:"varint,25,opt,name=canceled_at_ms,json=canceledAtMs,proto3" json:"canceled_at_ms,omitempty"` - PoolDeltaCoin int64 `protobuf:"varint,26,opt,name=pool_delta_coin,json=poolDeltaCoin,proto3" json:"pool_delta_coin,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + MatchId string `protobuf:"bytes,2,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + MinPlayers int32 `protobuf:"varint,6,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` + MaxPlayers int32 `protobuf:"varint,7,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` + CurrentPlayers int32 `protobuf:"varint,8,opt,name=current_players,json=currentPlayers,proto3" json:"current_players,omitempty"` + StakeCoin int64 `protobuf:"varint,9,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + RoundNo int32 `protobuf:"varint,10,opt,name=round_no,json=roundNo,proto3" json:"round_no,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + Result string `protobuf:"bytes,12,opt,name=result,proto3" json:"result,omitempty"` + Participants []*DiceParticipant `protobuf:"bytes,13,rep,name=participants,proto3" json:"participants,omitempty"` + JoinDeadlineMs int64 `protobuf:"varint,14,opt,name=join_deadline_ms,json=joinDeadlineMs,proto3" json:"join_deadline_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + SettledAtMs int64 `protobuf:"varint,17,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` + Phase string `protobuf:"bytes,18,opt,name=phase,proto3" json:"phase,omitempty"` + PhaseDeadlineMs int64 `protobuf:"varint,19,opt,name=phase_deadline_ms,json=phaseDeadlineMs,proto3" json:"phase_deadline_ms,omitempty"` + FeeBps int32 `protobuf:"varint,20,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + PoolBps int32 `protobuf:"varint,21,opt,name=pool_bps,json=poolBps,proto3" json:"pool_bps,omitempty"` + MatchMode string `protobuf:"bytes,22,opt,name=match_mode,json=matchMode,proto3" json:"match_mode,omitempty"` + ForcedResult string `protobuf:"bytes,23,opt,name=forced_result,json=forcedResult,proto3" json:"forced_result,omitempty"` + ReadyAtMs int64 `protobuf:"varint,24,opt,name=ready_at_ms,json=readyAtMs,proto3" json:"ready_at_ms,omitempty"` + CanceledAtMs int64 `protobuf:"varint,25,opt,name=canceled_at_ms,json=canceledAtMs,proto3" json:"canceled_at_ms,omitempty"` + PoolDeltaCoin int64 `protobuf:"varint,26,opt,name=pool_delta_coin,json=poolDeltaCoin,proto3" json:"pool_delta_coin,omitempty"` // country_id 是创建局用户的国家快照,用于局级订单和统计事件按国家归因。 - CountryId int64 `protobuf:"varint,27,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,27,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DiceMatch) Reset() { @@ -1777,13 +1761,12 @@ func (x *DiceMatch) GetCountryId() int64 { } type DiceStakeOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StakeCoin int64 `protobuf:"varint,1,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + SortOrder int32 `protobuf:"varint,3,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` unknownFields protoimpl.UnknownFields - - StakeCoin int64 `protobuf:"varint,1,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - SortOrder int32 `protobuf:"varint,3,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiceStakeOption) Reset() { @@ -1838,23 +1821,22 @@ func (x *DiceStakeOption) GetSortOrder() int32 { } type DiceConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - StakeOptions []*DiceStakeOption `protobuf:"bytes,4,rep,name=stake_options,json=stakeOptions,proto3" json:"stake_options,omitempty"` - FeeBps int32 `protobuf:"varint,5,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` - PoolBps int32 `protobuf:"varint,6,opt,name=pool_bps,json=poolBps,proto3" json:"pool_bps,omitempty"` - MinPlayers int32 `protobuf:"varint,7,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` - MaxPlayers int32 `protobuf:"varint,8,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` - RobotEnabled bool `protobuf:"varint,9,opt,name=robot_enabled,json=robotEnabled,proto3" json:"robot_enabled,omitempty"` - RobotMatchWaitMs int64 `protobuf:"varint,10,opt,name=robot_match_wait_ms,json=robotMatchWaitMs,proto3" json:"robot_match_wait_ms,omitempty"` - PoolBalanceCoin int64 `protobuf:"varint,11,opt,name=pool_balance_coin,json=poolBalanceCoin,proto3" json:"pool_balance_coin,omitempty"` - CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + StakeOptions []*DiceStakeOption `protobuf:"bytes,4,rep,name=stake_options,json=stakeOptions,proto3" json:"stake_options,omitempty"` + FeeBps int32 `protobuf:"varint,5,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + PoolBps int32 `protobuf:"varint,6,opt,name=pool_bps,json=poolBps,proto3" json:"pool_bps,omitempty"` + MinPlayers int32 `protobuf:"varint,7,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` + MaxPlayers int32 `protobuf:"varint,8,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` + RobotEnabled bool `protobuf:"varint,9,opt,name=robot_enabled,json=robotEnabled,proto3" json:"robot_enabled,omitempty"` + RobotMatchWaitMs int64 `protobuf:"varint,10,opt,name=robot_match_wait_ms,json=robotMatchWaitMs,proto3" json:"robot_match_wait_ms,omitempty"` + PoolBalanceCoin int64 `protobuf:"varint,11,opt,name=pool_balance_coin,json=poolBalanceCoin,proto3" json:"pool_balance_coin,omitempty"` + CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DiceConfig) Reset() { @@ -1979,12 +1961,11 @@ func (x *DiceConfig) GetUpdatedAtMs() int64 { } type GetDiceConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDiceConfigRequest) Reset() { @@ -2032,12 +2013,11 @@ func (x *GetDiceConfigRequest) GetGameId() string { } type DiceConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *DiceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *DiceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiceConfigResponse) Reset() { @@ -2085,18 +2065,17 @@ func (x *DiceConfigResponse) GetServerTimeMs() int64 { } type RoomRPSStakeGift struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftId int64 `protobuf:"varint,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftName string `protobuf:"bytes,2,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` - GiftIconUrl string `protobuf:"bytes,3,opt,name=gift_icon_url,json=giftIconUrl,proto3" json:"gift_icon_url,omitempty"` - GiftPriceCoin int64 `protobuf:"varint,4,opt,name=gift_price_coin,json=giftPriceCoin,proto3" json:"gift_price_coin,omitempty"` - Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"` - SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - GiftIdText string `protobuf:"bytes,7,opt,name=gift_id_text,json=giftIdText,proto3" json:"gift_id_text,omitempty"` - GiftAnimationUrl string `protobuf:"bytes,8,opt,name=gift_animation_url,json=giftAnimationUrl,proto3" json:"gift_animation_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftId int64 `protobuf:"varint,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftName string `protobuf:"bytes,2,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` + GiftIconUrl string `protobuf:"bytes,3,opt,name=gift_icon_url,json=giftIconUrl,proto3" json:"gift_icon_url,omitempty"` + GiftPriceCoin int64 `protobuf:"varint,4,opt,name=gift_price_coin,json=giftPriceCoin,proto3" json:"gift_price_coin,omitempty"` + Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"` + SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + GiftIdText string `protobuf:"bytes,7,opt,name=gift_id_text,json=giftIdText,proto3" json:"gift_id_text,omitempty"` + GiftAnimationUrl string `protobuf:"bytes,8,opt,name=gift_animation_url,json=giftAnimationUrl,proto3" json:"gift_animation_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRPSStakeGift) Reset() { @@ -2186,18 +2165,17 @@ func (x *RoomRPSStakeGift) GetGiftAnimationUrl() string { } type RoomRPSConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - ChallengeTimeoutMs int64 `protobuf:"varint,4,opt,name=challenge_timeout_ms,json=challengeTimeoutMs,proto3" json:"challenge_timeout_ms,omitempty"` - RevealCountdownMs int64 `protobuf:"varint,5,opt,name=reveal_countdown_ms,json=revealCountdownMs,proto3" json:"reveal_countdown_ms,omitempty"` - StakeGifts []*RoomRPSStakeGift `protobuf:"bytes,6,rep,name=stake_gifts,json=stakeGifts,proto3" json:"stake_gifts,omitempty"` - CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ChallengeTimeoutMs int64 `protobuf:"varint,4,opt,name=challenge_timeout_ms,json=challengeTimeoutMs,proto3" json:"challenge_timeout_ms,omitempty"` + RevealCountdownMs int64 `protobuf:"varint,5,opt,name=reveal_countdown_ms,json=revealCountdownMs,proto3" json:"reveal_countdown_ms,omitempty"` + StakeGifts []*RoomRPSStakeGift `protobuf:"bytes,6,rep,name=stake_gifts,json=stakeGifts,proto3" json:"stake_gifts,omitempty"` + CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRPSConfig) Reset() { @@ -2287,15 +2265,14 @@ func (x *RoomRPSConfig) GetUpdatedAtMs() int64 { } type RoomRPSPlayer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Gesture string `protobuf:"bytes,2,opt,name=gesture,proto3" json:"gesture,omitempty"` + Result string `protobuf:"bytes,3,opt,name=result,proto3" json:"result,omitempty"` + BalanceAfter int64 `protobuf:"varint,4,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + JoinedAtMs int64 `protobuf:"varint,5,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Gesture string `protobuf:"bytes,2,opt,name=gesture,proto3" json:"gesture,omitempty"` - Result string `protobuf:"bytes,3,opt,name=result,proto3" json:"result,omitempty"` - BalanceAfter int64 `protobuf:"varint,4,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - JoinedAtMs int64 `protobuf:"varint,5,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRPSPlayer) Reset() { @@ -2364,29 +2341,28 @@ func (x *RoomRPSPlayer) GetJoinedAtMs() int64 { } type RoomRPSChallenge struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - StakeGiftId int64 `protobuf:"varint,6,opt,name=stake_gift_id,json=stakeGiftId,proto3" json:"stake_gift_id,omitempty"` - StakeCoin int64 `protobuf:"varint,7,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - Initiator *RoomRPSPlayer `protobuf:"bytes,8,opt,name=initiator,proto3" json:"initiator,omitempty"` - Challenger *RoomRPSPlayer `protobuf:"bytes,9,opt,name=challenger,proto3" json:"challenger,omitempty"` - WinnerUserId int64 `protobuf:"varint,10,opt,name=winner_user_id,json=winnerUserId,proto3" json:"winner_user_id,omitempty"` - SettlementStatus string `protobuf:"bytes,11,opt,name=settlement_status,json=settlementStatus,proto3" json:"settlement_status,omitempty"` - FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - TimeoutAtMs int64 `protobuf:"varint,13,opt,name=timeout_at_ms,json=timeoutAtMs,proto3" json:"timeout_at_ms,omitempty"` - RevealAtMs int64 `protobuf:"varint,14,opt,name=reveal_at_ms,json=revealAtMs,proto3" json:"reveal_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - MatchedAtMs int64 `protobuf:"varint,16,opt,name=matched_at_ms,json=matchedAtMs,proto3" json:"matched_at_ms,omitempty"` - SettledAtMs int64 `protobuf:"varint,17,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - StakeGiftIdText string `protobuf:"bytes,19,opt,name=stake_gift_id_text,json=stakeGiftIdText,proto3" json:"stake_gift_id_text,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + StakeGiftId int64 `protobuf:"varint,6,opt,name=stake_gift_id,json=stakeGiftId,proto3" json:"stake_gift_id,omitempty"` + StakeCoin int64 `protobuf:"varint,7,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + Initiator *RoomRPSPlayer `protobuf:"bytes,8,opt,name=initiator,proto3" json:"initiator,omitempty"` + Challenger *RoomRPSPlayer `protobuf:"bytes,9,opt,name=challenger,proto3" json:"challenger,omitempty"` + WinnerUserId int64 `protobuf:"varint,10,opt,name=winner_user_id,json=winnerUserId,proto3" json:"winner_user_id,omitempty"` + SettlementStatus string `protobuf:"bytes,11,opt,name=settlement_status,json=settlementStatus,proto3" json:"settlement_status,omitempty"` + FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + TimeoutAtMs int64 `protobuf:"varint,13,opt,name=timeout_at_ms,json=timeoutAtMs,proto3" json:"timeout_at_ms,omitempty"` + RevealAtMs int64 `protobuf:"varint,14,opt,name=reveal_at_ms,json=revealAtMs,proto3" json:"reveal_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + MatchedAtMs int64 `protobuf:"varint,16,opt,name=matched_at_ms,json=matchedAtMs,proto3" json:"matched_at_ms,omitempty"` + SettledAtMs int64 `protobuf:"varint,17,opt,name=settled_at_ms,json=settledAtMs,proto3" json:"settled_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + StakeGiftIdText string `protobuf:"bytes,19,opt,name=stake_gift_id_text,json=stakeGiftIdText,proto3" json:"stake_gift_id_text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRPSChallenge) Reset() { @@ -2553,11 +2529,10 @@ func (x *RoomRPSChallenge) GetStakeGiftIdText() string { } type GetRoomRPSConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomRPSConfigRequest) Reset() { @@ -2598,12 +2573,11 @@ func (x *GetRoomRPSConfigRequest) GetMeta() *RequestMeta { } type RoomRPSConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RoomRPSConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RoomRPSConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRPSConfigResponse) Reset() { @@ -2651,17 +2625,16 @@ func (x *RoomRPSConfigResponse) GetServerTimeMs() int64 { } type CreateRoomRPSChallengeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + GiftId int64 `protobuf:"varint,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + Gesture string `protobuf:"bytes,6,opt,name=gesture,proto3" json:"gesture,omitempty"` + GiftIdText string `protobuf:"bytes,7,opt,name=gift_id_text,json=giftIdText,proto3" json:"gift_id_text,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - GiftId int64 `protobuf:"varint,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - Gesture string `protobuf:"bytes,6,opt,name=gesture,proto3" json:"gesture,omitempty"` - GiftIdText string `protobuf:"bytes,7,opt,name=gift_id_text,json=giftIdText,proto3" json:"gift_id_text,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRoomRPSChallengeRequest) Reset() { @@ -2744,14 +2717,13 @@ func (x *CreateRoomRPSChallengeRequest) GetGiftIdText() string { } type AcceptRoomRPSChallengeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ChallengeId string `protobuf:"bytes,3,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + Gesture string `protobuf:"bytes,4,opt,name=gesture,proto3" json:"gesture,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ChallengeId string `protobuf:"bytes,3,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` - Gesture string `protobuf:"bytes,4,opt,name=gesture,proto3" json:"gesture,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AcceptRoomRPSChallengeRequest) Reset() { @@ -2813,13 +2785,12 @@ func (x *AcceptRoomRPSChallengeRequest) GetGesture() string { } type GetRoomRPSChallengeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ChallengeId string `protobuf:"bytes,3,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ChallengeId string `protobuf:"bytes,3,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomRPSChallengeRequest) Reset() { @@ -2874,20 +2845,19 @@ func (x *GetRoomRPSChallengeRequest) GetChallengeId() string { } type ListRoomRPSChallengesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - InitiatorUserId int64 `protobuf:"varint,5,opt,name=initiator_user_id,json=initiatorUserId,proto3" json:"initiator_user_id,omitempty"` - ChallengerUserId int64 `protobuf:"varint,6,opt,name=challenger_user_id,json=challengerUserId,proto3" json:"challenger_user_id,omitempty"` - StartTimeMs int64 `protobuf:"varint,7,opt,name=start_time_ms,json=startTimeMs,proto3" json:"start_time_ms,omitempty"` - EndTimeMs int64 `protobuf:"varint,8,opt,name=end_time_ms,json=endTimeMs,proto3" json:"end_time_ms,omitempty"` - PageSize int32 `protobuf:"varint,9,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor string `protobuf:"bytes,10,opt,name=cursor,proto3" json:"cursor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + InitiatorUserId int64 `protobuf:"varint,5,opt,name=initiator_user_id,json=initiatorUserId,proto3" json:"initiator_user_id,omitempty"` + ChallengerUserId int64 `protobuf:"varint,6,opt,name=challenger_user_id,json=challengerUserId,proto3" json:"challenger_user_id,omitempty"` + StartTimeMs int64 `protobuf:"varint,7,opt,name=start_time_ms,json=startTimeMs,proto3" json:"start_time_ms,omitempty"` + EndTimeMs int64 `protobuf:"varint,8,opt,name=end_time_ms,json=endTimeMs,proto3" json:"end_time_ms,omitempty"` + PageSize int32 `protobuf:"varint,9,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor string `protobuf:"bytes,10,opt,name=cursor,proto3" json:"cursor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRoomRPSChallengesRequest) Reset() { @@ -2991,12 +2961,11 @@ func (x *ListRoomRPSChallengesRequest) GetCursor() string { } type RoomRPSChallengeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Challenge *RoomRPSChallenge `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Challenge *RoomRPSChallenge `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRPSChallengeResponse) Reset() { @@ -3044,14 +3013,13 @@ func (x *RoomRPSChallengeResponse) GetServerTimeMs() int64 { } type ListRoomRPSChallengesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Challenges []*RoomRPSChallenge `protobuf:"bytes,1,rep,name=challenges,proto3" json:"challenges,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Challenges []*RoomRPSChallenge `protobuf:"bytes,1,rep,name=challenges,proto3" json:"challenges,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomRPSChallengesResponse) Reset() { @@ -3113,12 +3081,11 @@ func (x *ListRoomRPSChallengesResponse) GetServerTimeMs() int64 { } type UpdateRoomRPSConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *RoomRPSConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *RoomRPSConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRoomRPSConfigRequest) Reset() { @@ -3166,12 +3133,11 @@ func (x *UpdateRoomRPSConfigRequest) GetConfig() *RoomRPSConfig { } type RetryRoomRPSSettlementRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RetryRoomRPSSettlementRequest) Reset() { @@ -3219,12 +3185,11 @@ func (x *RetryRoomRPSSettlementRequest) GetChallengeId() string { } type ExpireRoomRPSChallengeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ChallengeId string `protobuf:"bytes,2,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExpireRoomRPSChallengeRequest) Reset() { @@ -3272,21 +3237,20 @@ func (x *ExpireRoomRPSChallengeRequest) GetChallengeId() string { } type CreateDiceMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - MinPlayers int32 `protobuf:"varint,7,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` - MaxPlayers int32 `protobuf:"varint,8,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` - RpsGesture string `protobuf:"bytes,9,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + MinPlayers int32 `protobuf:"varint,7,opt,name=min_players,json=minPlayers,proto3" json:"min_players,omitempty"` + MaxPlayers int32 `protobuf:"varint,8,opt,name=max_players,json=maxPlayers,proto3" json:"max_players,omitempty"` + RpsGesture string `protobuf:"bytes,9,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` // country_id 由 gateway 从当前用户资料注入,客户端不能直接决定统计国家。 - CountryId int64 `protobuf:"varint,10,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,10,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateDiceMatchRequest) Reset() { @@ -3390,15 +3354,14 @@ func (x *CreateDiceMatchRequest) GetCountryId() int64 { } type JoinDiceMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RpsGesture string `protobuf:"bytes,5,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RpsGesture string `protobuf:"bytes,5,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + sizeCache protoimpl.SizeCache } func (x *JoinDiceMatchRequest) Reset() { @@ -3467,14 +3430,13 @@ func (x *JoinDiceMatchRequest) GetRpsGesture() string { } type GetDiceMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDiceMatchRequest) Reset() { @@ -3536,15 +3498,14 @@ func (x *GetDiceMatchRequest) GetGameId() string { } type RollDiceMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RpsGesture string `protobuf:"bytes,5,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RpsGesture string `protobuf:"bytes,5,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RollDiceMatchRequest) Reset() { @@ -3613,19 +3574,18 @@ func (x *RollDiceMatchRequest) GetRpsGesture() string { } type MatchDiceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - RpsGesture string `protobuf:"bytes,7,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + RpsGesture string `protobuf:"bytes,7,opt,name=rps_gesture,json=rpsGesture,proto3" json:"rps_gesture,omitempty"` // country_id 由 gateway 从当前用户资料注入,客户端不能直接决定统计国家。 - CountryId int64 `protobuf:"varint,8,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,8,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MatchDiceRequest) Reset() { @@ -3715,14 +3675,13 @@ func (x *MatchDiceRequest) GetCountryId() int64 { } type CancelDiceMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - GameId string `protobuf:"bytes,4,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CancelDiceMatchRequest) Reset() { @@ -3784,12 +3743,11 @@ func (x *CancelDiceMatchRequest) GetGameId() string { } type DiceMatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Match *DiceMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Match *DiceMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiceMatchResponse) Reset() { @@ -3837,17 +3795,16 @@ func (x *DiceMatchResponse) GetServerTimeMs() int64 { } type CallbackRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + Operation string `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` + RawBody []byte `protobuf:"bytes,4,opt,name=raw_body,json=rawBody,proto3" json:"raw_body,omitempty"` + Headers map[string]string `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Query map[string]string `protobuf:"bytes,6,rep,name=query,proto3" json:"query,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + RemoteAddr string `protobuf:"bytes,7,opt,name=remote_addr,json=remoteAddr,proto3" json:"remote_addr,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - Operation string `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` - RawBody []byte `protobuf:"bytes,4,opt,name=raw_body,json=rawBody,proto3" json:"raw_body,omitempty"` - Headers map[string]string `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Query map[string]string `protobuf:"bytes,6,rep,name=query,proto3" json:"query,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - RemoteAddr string `protobuf:"bytes,7,opt,name=remote_addr,json=remoteAddr,proto3" json:"remote_addr,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CallbackRequest) Reset() { @@ -3930,12 +3887,11 @@ func (x *CallbackRequest) GetRemoteAddr() string { } type CallbackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RawBody []byte `protobuf:"bytes,1,opt,name=raw_body,json=rawBody,proto3" json:"raw_body,omitempty"` + ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` unknownFields protoimpl.UnknownFields - - RawBody []byte `protobuf:"bytes,1,opt,name=raw_body,json=rawBody,proto3" json:"raw_body,omitempty"` - ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CallbackResponse) Reset() { @@ -3983,15 +3939,14 @@ func (x *CallbackResponse) GetContentType() string { } type CronBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + WorkerId string `protobuf:"bytes,3,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` + BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + LockTtlMs int64 `protobuf:"varint,5,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - WorkerId string `protobuf:"bytes,3,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` - BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - LockTtlMs int64 `protobuf:"varint,5,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CronBatchRequest) Reset() { @@ -4060,15 +4015,14 @@ func (x *CronBatchRequest) GetLockTtlMs() int64 { } type CronBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` - ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` - SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` - FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` - HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` + ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` + SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` + FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` + HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CronBatchResponse) Reset() { @@ -4137,12 +4091,11 @@ func (x *CronBatchResponse) GetHasMore() bool { } type ListPlatformsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListPlatformsRequest) Reset() { @@ -4190,12 +4143,11 @@ func (x *ListPlatformsRequest) GetStatus() string { } type ListPlatformsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Platforms []*GamePlatform `protobuf:"bytes,1,rep,name=platforms,proto3" json:"platforms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Platforms []*GamePlatform `protobuf:"bytes,1,rep,name=platforms,proto3" json:"platforms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListPlatformsResponse) Reset() { @@ -4243,12 +4195,11 @@ func (x *ListPlatformsResponse) GetServerTimeMs() int64 { } type UpsertPlatformRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Platform *GamePlatform `protobuf:"bytes,2,opt,name=platform,proto3" json:"platform,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Platform *GamePlatform `protobuf:"bytes,2,opt,name=platform,proto3" json:"platform,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertPlatformRequest) Reset() { @@ -4296,12 +4247,11 @@ func (x *UpsertPlatformRequest) GetPlatform() *GamePlatform { } type PlatformResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Platform *GamePlatform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Platform *GamePlatform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PlatformResponse) Reset() { @@ -4349,15 +4299,14 @@ func (x *PlatformResponse) GetServerTimeMs() int64 { } type ListCatalogRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PlatformCode string `protobuf:"bytes,2,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCatalogRequest) Reset() { @@ -4426,13 +4375,12 @@ func (x *ListCatalogRequest) GetCursor() string { } type ListCatalogResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Games []*GameCatalogItem `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Games []*GameCatalogItem `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCatalogResponse) Reset() { @@ -4487,12 +4435,11 @@ func (x *ListCatalogResponse) GetServerTimeMs() int64 { } type UpsertCatalogRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Game *GameCatalogItem `protobuf:"bytes,2,opt,name=game,proto3" json:"game,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Game *GameCatalogItem `protobuf:"bytes,2,opt,name=game,proto3" json:"game,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertCatalogRequest) Reset() { @@ -4540,12 +4487,11 @@ func (x *UpsertCatalogRequest) GetGame() *GameCatalogItem { } type CatalogResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Game *GameCatalogItem `protobuf:"bytes,1,opt,name=game,proto3" json:"game,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Game *GameCatalogItem `protobuf:"bytes,1,opt,name=game,proto3" json:"game,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CatalogResponse) Reset() { @@ -4593,13 +4539,12 @@ func (x *CatalogResponse) GetServerTimeMs() int64 { } type SetGameStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetGameStatusRequest) Reset() { @@ -4654,12 +4599,11 @@ func (x *SetGameStatusRequest) GetStatus() string { } type DeleteCatalogRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteCatalogRequest) Reset() { @@ -4707,11 +4651,10 @@ func (x *DeleteCatalogRequest) GetGameId() string { } type DeleteCatalogResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ServerTimeMs int64 `protobuf:"varint,1,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - ServerTimeMs int64 `protobuf:"varint,1,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteCatalogResponse) Reset() { @@ -4752,11 +4695,10 @@ func (x *DeleteCatalogResponse) GetServerTimeMs() int64 { } type ListSelfGamesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSelfGamesRequest) Reset() { @@ -4797,12 +4739,11 @@ func (x *ListSelfGamesRequest) GetMeta() *RequestMeta { } type ListSelfGamesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Games []*DiceConfig `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Games []*DiceConfig `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSelfGamesResponse) Reset() { @@ -4850,12 +4791,11 @@ func (x *ListSelfGamesResponse) GetServerTimeMs() int64 { } type UpdateDiceConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *DiceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *DiceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateDiceConfigRequest) Reset() { @@ -4903,26 +4843,25 @@ func (x *UpdateDiceConfigRequest) GetConfig() *DiceConfig { } type SelfGameNewUserPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` - ProtectionRounds int32 `protobuf:"varint,4,opt,name=protection_rounds,json=protectionRounds,proto3" json:"protection_rounds,omitempty"` - ProtectionHours int32 `protobuf:"varint,5,opt,name=protection_hours,json=protectionHours,proto3" json:"protection_hours,omitempty"` - MaxStakeCoin int64 `protobuf:"varint,6,opt,name=max_stake_coin,json=maxStakeCoin,proto3" json:"max_stake_coin,omitempty"` - LifetimeSubsidyQuotaCoin int64 `protobuf:"varint,7,opt,name=lifetime_subsidy_quota_coin,json=lifetimeSubsidyQuotaCoin,proto3" json:"lifetime_subsidy_quota_coin,omitempty"` - Day1SubsidyQuotaCoin int64 `protobuf:"varint,8,opt,name=day1_subsidy_quota_coin,json=day1SubsidyQuotaCoin,proto3" json:"day1_subsidy_quota_coin,omitempty"` - SingleRoundSubsidyCapCoin int64 `protobuf:"varint,9,opt,name=single_round_subsidy_cap_coin,json=singleRoundSubsidyCapCoin,proto3" json:"single_round_subsidy_cap_coin,omitempty"` - StrategyLevel string `protobuf:"bytes,10,opt,name=strategy_level,json=strategyLevel,proto3" json:"strategy_level,omitempty"` - LoseStreakProtectionEnabled bool `protobuf:"varint,11,opt,name=lose_streak_protection_enabled,json=loseStreakProtectionEnabled,proto3" json:"lose_streak_protection_enabled,omitempty"` - LoseStreakTrigger int32 `protobuf:"varint,12,opt,name=lose_streak_trigger,json=loseStreakTrigger,proto3" json:"lose_streak_trigger,omitempty"` - CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - NormalPhaseTargetWinRatePercent int32 `protobuf:"varint,15,opt,name=normal_phase_target_win_rate_percent,json=normalPhaseTargetWinRatePercent,proto3" json:"normal_phase_target_win_rate_percent,omitempty"` - BlackPoolRobotForceWinEnabled bool `protobuf:"varint,16,opt,name=black_pool_robot_force_win_enabled,json=blackPoolRobotForceWinEnabled,proto3" json:"black_pool_robot_force_win_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + ProtectionRounds int32 `protobuf:"varint,4,opt,name=protection_rounds,json=protectionRounds,proto3" json:"protection_rounds,omitempty"` + ProtectionHours int32 `protobuf:"varint,5,opt,name=protection_hours,json=protectionHours,proto3" json:"protection_hours,omitempty"` + MaxStakeCoin int64 `protobuf:"varint,6,opt,name=max_stake_coin,json=maxStakeCoin,proto3" json:"max_stake_coin,omitempty"` + LifetimeSubsidyQuotaCoin int64 `protobuf:"varint,7,opt,name=lifetime_subsidy_quota_coin,json=lifetimeSubsidyQuotaCoin,proto3" json:"lifetime_subsidy_quota_coin,omitempty"` + Day1SubsidyQuotaCoin int64 `protobuf:"varint,8,opt,name=day1_subsidy_quota_coin,json=day1SubsidyQuotaCoin,proto3" json:"day1_subsidy_quota_coin,omitempty"` + SingleRoundSubsidyCapCoin int64 `protobuf:"varint,9,opt,name=single_round_subsidy_cap_coin,json=singleRoundSubsidyCapCoin,proto3" json:"single_round_subsidy_cap_coin,omitempty"` + StrategyLevel string `protobuf:"bytes,10,opt,name=strategy_level,json=strategyLevel,proto3" json:"strategy_level,omitempty"` + LoseStreakProtectionEnabled bool `protobuf:"varint,11,opt,name=lose_streak_protection_enabled,json=loseStreakProtectionEnabled,proto3" json:"lose_streak_protection_enabled,omitempty"` + LoseStreakTrigger int32 `protobuf:"varint,12,opt,name=lose_streak_trigger,json=loseStreakTrigger,proto3" json:"lose_streak_trigger,omitempty"` + CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + NormalPhaseTargetWinRatePercent int32 `protobuf:"varint,15,opt,name=normal_phase_target_win_rate_percent,json=normalPhaseTargetWinRatePercent,proto3" json:"normal_phase_target_win_rate_percent,omitempty"` + BlackPoolRobotForceWinEnabled bool `protobuf:"varint,16,opt,name=black_pool_robot_force_win_enabled,json=blackPoolRobotForceWinEnabled,proto3" json:"black_pool_robot_force_win_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SelfGameNewUserPolicy) Reset() { @@ -5068,12 +5007,11 @@ func (x *SelfGameNewUserPolicy) GetBlackPoolRobotForceWinEnabled() bool { } type GetSelfGameNewUserPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSelfGameNewUserPolicyRequest) Reset() { @@ -5121,12 +5059,11 @@ func (x *GetSelfGameNewUserPolicyRequest) GetGameId() string { } type UpdateSelfGameNewUserPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Policy *SelfGameNewUserPolicy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Policy *SelfGameNewUserPolicy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateSelfGameNewUserPolicyRequest) Reset() { @@ -5174,12 +5111,11 @@ func (x *UpdateSelfGameNewUserPolicyRequest) GetPolicy() *SelfGameNewUserPolicy } type SelfGameNewUserPolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Policy *SelfGameNewUserPolicy `protobuf:"bytes,1,opt,name=policy,proto3" json:"policy,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Policy *SelfGameNewUserPolicy `protobuf:"bytes,1,opt,name=policy,proto3" json:"policy,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SelfGameNewUserPolicyResponse) Reset() { @@ -5227,28 +5163,27 @@ func (x *SelfGameNewUserPolicyResponse) GetServerTimeMs() int64 { } type SelfGameStakePool struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - StakeCoin int64 `protobuf:"varint,3,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` - BalanceCoin int64 `protobuf:"varint,4,opt,name=balance_coin,json=balanceCoin,proto3" json:"balance_coin,omitempty"` - ReservedCoin int64 `protobuf:"varint,5,opt,name=reserved_coin,json=reservedCoin,proto3" json:"reserved_coin,omitempty"` - AvailableCoin int64 `protobuf:"varint,6,opt,name=available_coin,json=availableCoin,proto3" json:"available_coin,omitempty"` - TargetBalanceCoin int64 `protobuf:"varint,7,opt,name=target_balance_coin,json=targetBalanceCoin,proto3" json:"target_balance_coin,omitempty"` - SafeBalanceCoin int64 `protobuf:"varint,8,opt,name=safe_balance_coin,json=safeBalanceCoin,proto3" json:"safe_balance_coin,omitempty"` - WarningBalanceCoin int64 `protobuf:"varint,9,opt,name=warning_balance_coin,json=warningBalanceCoin,proto3" json:"warning_balance_coin,omitempty"` - DangerBalanceCoin int64 `protobuf:"varint,10,opt,name=danger_balance_coin,json=dangerBalanceCoin,proto3" json:"danger_balance_coin,omitempty"` - Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` - PoolLevel string `protobuf:"bytes,12,opt,name=pool_level,json=poolLevel,proto3" json:"pool_level,omitempty"` - RequiredPoolCoin int64 `protobuf:"varint,13,opt,name=required_pool_coin,json=requiredPoolCoin,proto3" json:"required_pool_coin,omitempty"` - HumanWinCapacity int64 `protobuf:"varint,14,opt,name=human_win_capacity,json=humanWinCapacity,proto3" json:"human_win_capacity,omitempty"` - BotMatchEnabled bool `protobuf:"varint,15,opt,name=bot_match_enabled,json=botMatchEnabled,proto3" json:"bot_match_enabled,omitempty"` - BlackReason string `protobuf:"bytes,16,opt,name=black_reason,json=blackReason,proto3" json:"black_reason,omitempty"` - CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + StakeCoin int64 `protobuf:"varint,3,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + BalanceCoin int64 `protobuf:"varint,4,opt,name=balance_coin,json=balanceCoin,proto3" json:"balance_coin,omitempty"` + ReservedCoin int64 `protobuf:"varint,5,opt,name=reserved_coin,json=reservedCoin,proto3" json:"reserved_coin,omitempty"` + AvailableCoin int64 `protobuf:"varint,6,opt,name=available_coin,json=availableCoin,proto3" json:"available_coin,omitempty"` + TargetBalanceCoin int64 `protobuf:"varint,7,opt,name=target_balance_coin,json=targetBalanceCoin,proto3" json:"target_balance_coin,omitempty"` + SafeBalanceCoin int64 `protobuf:"varint,8,opt,name=safe_balance_coin,json=safeBalanceCoin,proto3" json:"safe_balance_coin,omitempty"` + WarningBalanceCoin int64 `protobuf:"varint,9,opt,name=warning_balance_coin,json=warningBalanceCoin,proto3" json:"warning_balance_coin,omitempty"` + DangerBalanceCoin int64 `protobuf:"varint,10,opt,name=danger_balance_coin,json=dangerBalanceCoin,proto3" json:"danger_balance_coin,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + PoolLevel string `protobuf:"bytes,12,opt,name=pool_level,json=poolLevel,proto3" json:"pool_level,omitempty"` + RequiredPoolCoin int64 `protobuf:"varint,13,opt,name=required_pool_coin,json=requiredPoolCoin,proto3" json:"required_pool_coin,omitempty"` + HumanWinCapacity int64 `protobuf:"varint,14,opt,name=human_win_capacity,json=humanWinCapacity,proto3" json:"human_win_capacity,omitempty"` + BotMatchEnabled bool `protobuf:"varint,15,opt,name=bot_match_enabled,json=botMatchEnabled,proto3" json:"bot_match_enabled,omitempty"` + BlackReason string `protobuf:"bytes,16,opt,name=black_reason,json=blackReason,proto3" json:"black_reason,omitempty"` + CreatedAtMs int64 `protobuf:"varint,17,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,18,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SelfGameStakePool) Reset() { @@ -5408,12 +5343,11 @@ func (x *SelfGameStakePool) GetUpdatedAtMs() int64 { } type ListSelfGameStakePoolsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSelfGameStakePoolsRequest) Reset() { @@ -5461,12 +5395,11 @@ func (x *ListSelfGameStakePoolsRequest) GetGameId() string { } type UpdateSelfGameStakePoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Pool *SelfGameStakePool `protobuf:"bytes,2,opt,name=pool,proto3" json:"pool,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Pool *SelfGameStakePool `protobuf:"bytes,2,opt,name=pool,proto3" json:"pool,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateSelfGameStakePoolRequest) Reset() { @@ -5514,12 +5447,11 @@ func (x *UpdateSelfGameStakePoolRequest) GetPool() *SelfGameStakePool { } type SelfGameStakePoolResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pool *SelfGameStakePool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Pool *SelfGameStakePool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SelfGameStakePoolResponse) Reset() { @@ -5567,12 +5499,11 @@ func (x *SelfGameStakePoolResponse) GetServerTimeMs() int64 { } type ListSelfGameStakePoolsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pools []*SelfGameStakePool `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Pools []*SelfGameStakePool `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSelfGameStakePoolsResponse) Reset() { @@ -5620,18 +5551,17 @@ func (x *ListSelfGameStakePoolsResponse) GetServerTimeMs() int64 { } type DicePoolAdjustment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + AdjustmentId string `protobuf:"bytes,1,opt,name=adjustment_id,json=adjustmentId,proto3" json:"adjustment_id,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + AmountCoin int64 `protobuf:"varint,3,opt,name=amount_coin,json=amountCoin,proto3" json:"amount_coin,omitempty"` + Direction string `protobuf:"bytes,4,opt,name=direction,proto3" json:"direction,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + BalanceAfter int64 `protobuf:"varint,6,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + StakeCoin int64 `protobuf:"varint,8,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` unknownFields protoimpl.UnknownFields - - AdjustmentId string `protobuf:"bytes,1,opt,name=adjustment_id,json=adjustmentId,proto3" json:"adjustment_id,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - AmountCoin int64 `protobuf:"varint,3,opt,name=amount_coin,json=amountCoin,proto3" json:"amount_coin,omitempty"` - Direction string `protobuf:"bytes,4,opt,name=direction,proto3" json:"direction,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - BalanceAfter int64 `protobuf:"varint,6,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - StakeCoin int64 `protobuf:"varint,8,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DicePoolAdjustment) Reset() { @@ -5721,16 +5651,15 @@ func (x *DicePoolAdjustment) GetStakeCoin() int64 { } type AdjustSelfGameStakePoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + AmountCoin int64 `protobuf:"varint,3,opt,name=amount_coin,json=amountCoin,proto3" json:"amount_coin,omitempty"` + Direction string `protobuf:"bytes,4,opt,name=direction,proto3" json:"direction,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - AmountCoin int64 `protobuf:"varint,3,opt,name=amount_coin,json=amountCoin,proto3" json:"amount_coin,omitempty"` - Direction string `protobuf:"bytes,4,opt,name=direction,proto3" json:"direction,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - StakeCoin int64 `protobuf:"varint,6,opt,name=stake_coin,json=stakeCoin,proto3" json:"stake_coin,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdjustSelfGameStakePoolRequest) Reset() { @@ -5806,13 +5735,12 @@ func (x *AdjustSelfGameStakePoolRequest) GetStakeCoin() int64 { } type AdjustSelfGameStakePoolResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Adjustment *DicePoolAdjustment `protobuf:"bytes,1,opt,name=adjustment,proto3" json:"adjustment,omitempty"` + Config *DiceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Adjustment *DicePoolAdjustment `protobuf:"bytes,1,opt,name=adjustment,proto3" json:"adjustment,omitempty"` - Config *DiceConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdjustSelfGameStakePoolResponse) Reset() { @@ -5867,17 +5795,16 @@ func (x *AdjustSelfGameStakePoolResponse) GetServerTimeMs() int64 { } type DiceRobot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,5,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,5,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DiceRobot) Reset() { @@ -5960,15 +5887,14 @@ func (x *DiceRobot) GetUpdatedAtMs() int64 { } type ListDiceRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListDiceRobotsRequest) Reset() { @@ -6037,13 +5963,12 @@ func (x *ListDiceRobotsRequest) GetCursor() string { } type ListDiceRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*DiceRobot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*DiceRobot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListDiceRobotsResponse) Reset() { @@ -6098,13 +6023,12 @@ func (x *ListDiceRobotsResponse) GetServerTimeMs() int64 { } type RegisterDiceRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterDiceRobotsRequest) Reset() { @@ -6159,12 +6083,11 @@ func (x *RegisterDiceRobotsRequest) GetUserIds() []int64 { } type RegisterDiceRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*DiceRobot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*DiceRobot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterDiceRobotsResponse) Reset() { @@ -6212,14 +6135,13 @@ func (x *RegisterDiceRobotsResponse) GetServerTimeMs() int64 { } type SetDiceRobotStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetDiceRobotStatusRequest) Reset() { @@ -6281,13 +6203,12 @@ func (x *SetDiceRobotStatusRequest) GetStatus() string { } type DeleteDiceRobotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteDiceRobotRequest) Reset() { @@ -6342,12 +6263,11 @@ func (x *DeleteDiceRobotRequest) GetUserId() int64 { } type DeleteDiceRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteDiceRobotResponse) Reset() { @@ -6395,12 +6315,11 @@ func (x *DeleteDiceRobotResponse) GetServerTimeMs() int64 { } type DiceRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robot *DiceRobot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robot *DiceRobot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiceRobotResponse) Reset() { @@ -6449,15 +6368,14 @@ func (x *DiceRobotResponse) GetServerTimeMs() int64 { // GameWhitelistUser 是 game-service 持有的游戏访问成员事实;用户展示资料由 admin-server 向 user-service 补齐。 type GameWhitelistUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,4,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,4,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameWhitelistUser) Reset() { @@ -6526,13 +6444,12 @@ func (x *GameWhitelistUser) GetCreatedAtMs() int64 { } type SetGameWhitelistEnabledRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetGameWhitelistEnabledRequest) Reset() { @@ -6587,13 +6504,12 @@ func (x *SetGameWhitelistEnabledRequest) GetEnabled() bool { } type ListGameWhitelistUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGameWhitelistUsersRequest) Reset() { @@ -6648,12 +6564,11 @@ func (x *ListGameWhitelistUsersRequest) GetPageSize() int32 { } type ListGameWhitelistUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Users []*GameWhitelistUser `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Users []*GameWhitelistUser `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGameWhitelistUsersResponse) Reset() { @@ -6701,13 +6616,12 @@ func (x *ListGameWhitelistUsersResponse) GetServerTimeMs() int64 { } type AddGameWhitelistUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddGameWhitelistUserRequest) Reset() { @@ -6762,12 +6676,11 @@ func (x *AddGameWhitelistUserRequest) GetUserId() int64 { } type GameWhitelistUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + User *GameWhitelistUser `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - User *GameWhitelistUser `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GameWhitelistUserResponse) Reset() { @@ -6815,13 +6728,12 @@ func (x *GameWhitelistUserResponse) GetServerTimeMs() int64 { } type DeleteGameWhitelistUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteGameWhitelistUserRequest) Reset() { @@ -6876,11 +6788,10 @@ func (x *DeleteGameWhitelistUserRequest) GetUserId() int64 { } type DeleteGameWhitelistUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ServerTimeMs int64 `protobuf:"varint,1,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - ServerTimeMs int64 `protobuf:"varint,1,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteGameWhitelistUserResponse) Reset() { @@ -6922,1470 +6833,687 @@ func (x *DeleteGameWhitelistUserResponse) GetServerTimeMs() int64 { var File_proto_game_v1_game_proto protoreflect.FileDescriptor -var file_proto_game_v1_game_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x22, 0xc9, 0x01, 0x0a, 0x0b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, - 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xf4, 0x03, 0x0a, 0x0c, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x61, 0x70, 0x69, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x42, 0x61, - 0x73, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x70, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, - 0x74, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, - 0x6b, 0x49, 0x70, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, - 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x64, 0x61, 0x70, 0x74, - 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0xc4, 0x04, 0x0a, - 0x0f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, - 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, - 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x61, 0x66, 0x65, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x10, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0xa4, 0x03, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6e, 0x61, 0x6d, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, - 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x61, 0x66, - 0x65, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x73, 0x61, 0x66, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xec, 0x01, 0x0a, 0x10, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x67, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, - 0x0a, 0x05, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x05, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0x68, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6c, - 0x6f, 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xf4, - 0x01, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, - 0x12, 0x15, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x77, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, - 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x09, 0x77, 0x6f, 0x6e, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x77, 0x6f, - 0x6e, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x7a, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x07, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0x48, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0xaa, 0x01, 0x0a, 0x16, - 0x47, 0x61, 0x6d, 0x65, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, - 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x55, - 0x72, 0x6c, 0x12, 0x32, 0x0a, 0x15, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, - 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x8e, 0x02, 0x0a, 0x11, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x12, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x72, 0x6c, 0x12, 0x22, - 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x61, - 0x66, 0x65, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x73, 0x61, 0x66, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xa6, 0x03, 0x0a, 0x0f, - 0x44, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, - 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x63, 0x65, - 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x64, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, - 0x70, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x73, 0x5f, 0x67, 0x65, 0x73, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x70, 0x73, 0x47, 0x65, 0x73, - 0x74, 0x75, 0x72, 0x65, 0x22, 0x86, 0x07, 0x0a, 0x09, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x69, - 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, - 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x6f, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x6f, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, 0x0a, 0x0c, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, - 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6a, 0x6f, 0x69, 0x6e, - 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x44, 0x65, - 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x4d, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, - 0x62, 0x70, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x42, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, - 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x70, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0x69, 0x0a, - 0x0f, 0x44, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, - 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, - 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xe1, 0x03, 0x0a, 0x0a, 0x44, 0x69, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, - 0x62, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x42, 0x70, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x10, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x69, 0x74, - 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, - 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x5f, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x6d, 0x0a, - 0x12, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9d, 0x02, 0x0a, - 0x10, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x47, 0x69, 0x66, - 0x74, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, - 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x67, 0x69, 0x66, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x67, 0x69, 0x66, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0c, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2c, - 0x0a, 0x12, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x69, 0x66, 0x74, - 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x22, 0xc7, 0x02, 0x0a, - 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, - 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x12, 0x2e, 0x0a, 0x13, - 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x76, 0x65, 0x61, - 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4d, 0x73, 0x12, 0x40, 0x0a, 0x0b, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x47, 0x69, 0x66, 0x74, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x50, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x67, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xd8, 0x05, 0x0a, 0x10, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x3a, - 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, - 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x77, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, - 0x0a, 0x11, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x47, 0x69, 0x66, 0x74, 0x49, - 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x49, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x22, 0x73, 0x0a, 0x15, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, - 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x67, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x67, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x1d, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, - 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, 0x73, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x65, 0x73, 0x74, - 0x75, 0x72, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x22, 0xeb, - 0x02, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, - 0x67, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x10, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x7f, 0x0a, 0x18, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, - 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xc4, 0x01, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x72, 0x0a, 0x1d, 0x52, 0x65, 0x74, - 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, - 0x1d, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, - 0x64, 0x22, 0xd1, 0x02, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x73, 0x5f, 0x67, 0x65, 0x73, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x70, 0x73, 0x47, - 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x69, - 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x70, 0x73, 0x5f, 0x67, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x72, 0x70, 0x73, 0x47, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x22, 0x92, 0x01, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x52, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x73, 0x5f, 0x67, - 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x70, - 0x73, 0x47, 0x65, 0x73, 0x74, 0x75, 0x72, 0x65, 0x22, 0x89, 0x02, 0x0a, 0x10, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x73, 0x5f, 0x67, 0x65, 0x73, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x70, 0x73, 0x47, 0x65, - 0x73, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x49, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x16, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x44, - 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x11, - 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xbe, 0x03, 0x0a, 0x0f, 0x43, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x72, 0x61, 0x77, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x45, 0x0a, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x3f, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, - 0x64, 0x72, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, - 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x10, 0x43, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x72, 0x61, 0x77, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x10, 0x43, - 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x74, 0x6c, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x74, 0x6c, - 0x4d, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, - 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x78, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x37, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x71, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x12, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x22, 0x92, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x67, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7a, 0x0a, 0x14, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x32, 0x0a, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x61, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x04, 0x67, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x67, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x22, 0x77, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, - 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5f, 0x0a, 0x14, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x15, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x46, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x05, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x69, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x31, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x99, 0x06, 0x0a, 0x15, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, - 0x77, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x75, 0x72, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x6c, 0x69, 0x66, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x69, 0x64, 0x79, 0x5f, 0x71, 0x75, 0x6f, 0x74, - 0x61, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6c, 0x69, - 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x69, 0x64, 0x79, 0x51, 0x75, 0x6f, - 0x74, 0x61, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x35, 0x0a, 0x17, 0x64, 0x61, 0x79, 0x31, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x69, 0x64, 0x79, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x64, 0x61, 0x79, 0x31, 0x53, 0x75, 0x62, - 0x73, 0x69, 0x64, 0x79, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x40, 0x0a, - 0x1d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x75, - 0x62, 0x73, 0x69, 0x64, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x6e, - 0x64, 0x53, 0x75, 0x62, 0x73, 0x69, 0x64, 0x79, 0x43, 0x61, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x43, 0x0a, 0x1e, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, - 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, - 0x6f, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x4d, 0x0a, 0x24, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x70, 0x68, - 0x61, 0x73, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x77, 0x69, 0x6e, 0x5f, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x1f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x68, 0x61, 0x73, 0x65, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x22, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x77, 0x69, 0x6e, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, - 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x46, 0x6f, - 0x72, 0x63, 0x65, 0x57, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x6a, 0x0a, - 0x1f, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x22, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x83, - 0x01, 0x0a, 0x1d, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xbd, 0x05, 0x0a, 0x11, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x13, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x61, 0x66, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x61, 0x66, 0x65, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x61, - 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x2c, 0x0a, 0x12, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x5f, 0x63, 0x61, 0x70, - 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x68, 0x75, 0x6d, - 0x61, 0x6e, 0x57, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, - 0x11, 0x62, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x6f, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x61, - 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x22, 0x68, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x86, - 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, - 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x22, 0x77, 0x0a, 0x19, 0x53, 0x65, 0x6c, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x22, 0x7e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, - 0x6f, 0x6f, 0x6c, 0x52, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x22, 0x91, 0x02, 0x0a, 0x12, 0x44, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x6a, 0x75, 0x73, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, - 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xdf, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x53, - 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xbd, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x6a, 0x75, 0x73, - 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, - 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x61, 0x64, - 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0a, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x63, 0x65, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, - 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x22, 0x91, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7f, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x74, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x06, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x19, - 0x53, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x7a, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x69, 0x63, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, - 0x59, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x69, 0x0a, 0x11, 0x44, 0x69, - 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2e, 0x0a, 0x05, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x05, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, - 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x1e, - 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, - 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x7e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7f, 0x0a, 0x1b, 0x41, 0x64, 0x64, - 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x77, 0x0a, 0x19, 0x47, 0x61, - 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, - 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x32, 0xe6, 0x0c, 0x0a, 0x0e, 0x47, 0x61, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, - 0x73, 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x69, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x57, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x25, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, - 0x0a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x57, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x25, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x69, 0x63, - 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x69, 0x63, 0x65, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x52, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x63, 0x65, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x25, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, - 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, - 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x69, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, - 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x68, 0x0a, 0x13, 0x47, 0x61, - 0x6d, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x51, 0x0a, 0x0e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x12, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x74, 0x0a, 0x0f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x72, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x62, - 0x6f, 0x78, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa1, 0x16, 0x0a, 0x10, 0x47, - 0x61, 0x6d, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x5a, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, - 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0e, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, - 0x6c, 0x6f, 0x67, 0x12, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0d, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x23, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x68, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x16, - 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, - 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x78, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, - 0x77, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7e, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, - 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, - 0x77, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x65, 0x77, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x75, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, - 0x6f, 0x6c, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, - 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x17, 0x41, - 0x64, 0x6a, 0x75, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x53, 0x65, 0x6c, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x65, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x63, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x60, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, - 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, - 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x69, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x53, 0x65, 0x74, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x50, 0x53, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, - 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, - 0x16, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x50, 0x53, 0x43, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x26, - 0x5a, 0x24, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x3b, - 0x67, 0x61, 0x6d, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_game_v1_game_proto_rawDesc = "" + + "\n" + + "\x18proto/game/v1/game.proto\x12\rhyapp.game.v1\"\xc9\x01\n" + + "\vRequestMeta\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x16\n" + + "\x06caller\x18\x02 \x01(\tR\x06caller\x12&\n" + + "\x0fgateway_node_id\x18\x03 \x01(\tR\rgatewayNodeId\x12\"\n" + + "\ractor_user_id\x18\x04 \x01(\x03R\vactorUserId\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\x05 \x01(\x03R\bsentAtMs\x12\x19\n" + + "\bapp_code\x18\x06 \x01(\tR\aappCode\"\xf4\x03\n" + + "\fGamePlatform\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12#\n" + + "\rplatform_code\x18\x02 \x01(\tR\fplatformCode\x12#\n" + + "\rplatform_name\x18\x03 \x01(\tR\fplatformName\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12 \n" + + "\fapi_base_url\x18\x05 \x01(\tR\n" + + "apiBaseUrl\x12\x1d\n" + + "\n" + + "sort_order\x18\x06 \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\a \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\x12!\n" + + "\fadapter_type\x18\t \x01(\tR\vadapterType\x12'\n" + + "\x0fcallback_secret\x18\n" + + " \x01(\tR\x0ecallbackSecret\x12.\n" + + "\x13callback_secret_set\x18\v \x01(\bR\x11callbackSecretSet\x122\n" + + "\x15callback_ip_whitelist\x18\f \x03(\tR\x13callbackIpWhitelist\x12.\n" + + "\x13adapter_config_json\x18\r \x01(\tR\x11adapterConfigJson\"\xc4\x04\n" + + "\x0fGameCatalogItem\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12#\n" + + "\rplatform_code\x18\x03 \x01(\tR\fplatformCode\x12(\n" + + "\x10provider_game_id\x18\x04 \x01(\tR\x0eproviderGameId\x12\x1b\n" + + "\tgame_name\x18\x05 \x01(\tR\bgameName\x12\x1a\n" + + "\bcategory\x18\x06 \x01(\tR\bcategory\x12\x19\n" + + "\bicon_url\x18\a \x01(\tR\aiconUrl\x12\x1b\n" + + "\tcover_url\x18\b \x01(\tR\bcoverUrl\x12\x1f\n" + + "\vlaunch_mode\x18\t \x01(\tR\n" + + "launchMode\x12 \n" + + "\vorientation\x18\n" + + " \x01(\tR\vorientation\x12\x19\n" + + "\bmin_coin\x18\v \x01(\x03R\aminCoin\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\r \x01(\x05R\tsortOrder\x12\x12\n" + + "\x04tags\x18\x0e \x03(\tR\x04tags\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12\x1f\n" + + "\vsafe_height\x18\x11 \x01(\x05R\n" + + "safeHeight\x12+\n" + + "\x11whitelist_enabled\x18\x12 \x01(\bR\x10whitelistEnabled\"\xa4\x03\n" + + "\aAppGame\x12\x17\n" + + "\agame_id\x18\x01 \x01(\tR\x06gameId\x12#\n" + + "\rplatform_code\x18\x02 \x01(\tR\fplatformCode\x12\x19\n" + + "\bname_key\x18\x03 \x01(\tR\anameKey\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x19\n" + + "\bicon_url\x18\x05 \x01(\tR\aiconUrl\x12\x1b\n" + + "\tcover_url\x18\x06 \x01(\tR\bcoverUrl\x12\x1a\n" + + "\bcategory\x18\a \x01(\tR\bcategory\x12\x1f\n" + + "\vlaunch_mode\x18\b \x01(\tR\n" + + "launchMode\x12 \n" + + "\vorientation\x18\t \x01(\tR\vorientation\x12\x19\n" + + "\bmin_coin\x18\n" + + " \x01(\x03R\aminCoin\x12\x18\n" + + "\aenabled\x18\v \x01(\bR\aenabled\x12 \n" + + "\vmaintenance\x18\f \x01(\bR\vmaintenance\x12\x1d\n" + + "\n" + + "sort_order\x18\r \x01(\x05R\tsortOrder\x12\x1f\n" + + "\vsafe_height\x18\x0e \x01(\x05R\n" + + "safeHeight\"\xec\x01\n" + + "\x10ListGamesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05scene\x18\x03 \x01(\tR\x05scene\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1a\n" + + "\blanguage\x18\x06 \x01(\tR\blanguage\x12'\n" + + "\x0fclient_platform\x18\a \x01(\tR\x0eclientPlatform\"g\n" + + "\x11ListGamesResponse\x12,\n" + + "\x05games\x18\x01 \x03(\v2\x16.hyapp.game.v1.AppGameR\x05games\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x8f\x02\n" + + "\x16ListRecentGamesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05scene\x18\x03 \x01(\tR\x05scene\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1a\n" + + "\blanguage\x18\x06 \x01(\tR\blanguage\x12'\n" + + "\x0fclient_platform\x18\a \x01(\tR\x0eclientPlatform\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\"h\n" + + "\x19ListExploreWinnersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tpage_size\x18\x02 \x01(\x05R\bpageSize\"\xf4\x01\n" + + "\rExploreWinner\x12\x15\n" + + "\x06win_id\x18\x01 \x01(\tR\x05winId\x12\x1b\n" + + "\tgame_code\x18\x02 \x01(\tR\bgameCode\x12\x17\n" + + "\agame_id\x18\x03 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12!\n" + + "\fdisplay_name\x18\x05 \x01(\tR\vdisplayName\x12\x1d\n" + + "\n" + + "avatar_url\x18\x06 \x01(\tR\tavatarUrl\x12\x1f\n" + + "\vcoin_amount\x18\a \x01(\x03R\n" + + "coinAmount\x12\x1a\n" + + "\twon_at_ms\x18\b \x01(\x03R\awonAtMs\"z\n" + + "\x1aListExploreWinnersResponse\x126\n" + + "\awinners\x18\x01 \x03(\v2\x1c.hyapp.game.v1.ExploreWinnerR\awinners\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"H\n" + + "\x16GetBridgeScriptRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\"\xaa\x01\n" + + "\x16GameBridgeScriptConfig\x12*\n" + + "\x11bridge_script_url\x18\x01 \x01(\tR\x0fbridgeScriptUrl\x122\n" + + "\x15bridge_script_version\x18\x02 \x01(\tR\x13bridgeScriptVersion\x120\n" + + "\x14bridge_script_sha256\x18\x03 \x01(\tR\x12bridgeScriptSha256\"~\n" + + "\x17GetBridgeScriptResponse\x12=\n" + + "\x06config\x18\x01 \x01(\v2%.hyapp.game.v1.GameBridgeScriptConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x8e\x02\n" + + "\x11LaunchGameRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12&\n" + + "\x0fdisplay_user_id\x18\x03 \x01(\tR\rdisplayUserId\x12\x17\n" + + "\agame_id\x18\x04 \x01(\tR\x06gameId\x12\x14\n" + + "\x05scene\x18\x05 \x01(\tR\x05scene\x12\x17\n" + + "\aroom_id\x18\x06 \x01(\tR\x06roomId\x12!\n" + + "\faccess_token\x18\a \x01(\tR\vaccessToken\x12\x1d\n" + + "\n" + + "country_id\x18\b \x01(\x03R\tcountryId\"\xdf\x01\n" + + "\x12LaunchGameResponse\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x1d\n" + + "\n" + + "launch_url\x18\x02 \x01(\tR\tlaunchUrl\x12\"\n" + + "\rexpires_at_ms\x18\x03 \x01(\x03R\vexpiresAtMs\x12 \n" + + "\vorientation\x18\x04 \x01(\tR\vorientation\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\x12\x1f\n" + + "\vsafe_height\x18\x06 \x01(\x05R\n" + + "safeHeight\"\xa6\x03\n" + + "\x0fDiceParticipant\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "stake_coin\x18\x04 \x01(\x03R\tstakeCoin\x12\x1f\n" + + "\vdice_points\x18\x05 \x03(\x05R\n" + + "dicePoints\x12\x16\n" + + "\x06result\x18\x06 \x01(\tR\x06result\x12\x1f\n" + + "\vpayout_coin\x18\a \x01(\x03R\n" + + "payoutCoin\x12#\n" + + "\rbalance_after\x18\b \x01(\x03R\fbalanceAfter\x12 \n" + + "\fjoined_at_ms\x18\t \x01(\x03R\n" + + "joinedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\n" + + " \x01(\x03R\vupdatedAtMs\x12)\n" + + "\x10participant_type\x18\v \x01(\tR\x0fparticipantType\x12\x19\n" + + "\bis_robot\x18\f \x01(\bR\aisRobot\x12\x1f\n" + + "\vrps_gesture\x18\r \x01(\tR\n" + + "rpsGesture\"\x86\a\n" + + "\tDiceMatch\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\bmatch_id\x18\x02 \x01(\tR\amatchId\x12\x17\n" + + "\agame_id\x18\x03 \x01(\tR\x06gameId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1f\n" + + "\vmin_players\x18\x06 \x01(\x05R\n" + + "minPlayers\x12\x1f\n" + + "\vmax_players\x18\a \x01(\x05R\n" + + "maxPlayers\x12'\n" + + "\x0fcurrent_players\x18\b \x01(\x05R\x0ecurrentPlayers\x12\x1d\n" + + "\n" + + "stake_coin\x18\t \x01(\x03R\tstakeCoin\x12\x19\n" + + "\bround_no\x18\n" + + " \x01(\x05R\aroundNo\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12\x16\n" + + "\x06result\x18\f \x01(\tR\x06result\x12B\n" + + "\fparticipants\x18\r \x03(\v2\x1e.hyapp.game.v1.DiceParticipantR\fparticipants\x12(\n" + + "\x10join_deadline_ms\x18\x0e \x01(\x03R\x0ejoinDeadlineMs\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12\"\n" + + "\rsettled_at_ms\x18\x11 \x01(\x03R\vsettledAtMs\x12\x14\n" + + "\x05phase\x18\x12 \x01(\tR\x05phase\x12*\n" + + "\x11phase_deadline_ms\x18\x13 \x01(\x03R\x0fphaseDeadlineMs\x12\x17\n" + + "\afee_bps\x18\x14 \x01(\x05R\x06feeBps\x12\x19\n" + + "\bpool_bps\x18\x15 \x01(\x05R\apoolBps\x12\x1d\n" + + "\n" + + "match_mode\x18\x16 \x01(\tR\tmatchMode\x12#\n" + + "\rforced_result\x18\x17 \x01(\tR\fforcedResult\x12\x1e\n" + + "\vready_at_ms\x18\x18 \x01(\x03R\treadyAtMs\x12$\n" + + "\x0ecanceled_at_ms\x18\x19 \x01(\x03R\fcanceledAtMs\x12&\n" + + "\x0fpool_delta_coin\x18\x1a \x01(\x03R\rpoolDeltaCoin\x12\x1d\n" + + "\n" + + "country_id\x18\x1b \x01(\x03R\tcountryId\"i\n" + + "\x0fDiceStakeOption\x12\x1d\n" + + "\n" + + "stake_coin\x18\x01 \x01(\x03R\tstakeCoin\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12\x1d\n" + + "\n" + + "sort_order\x18\x03 \x01(\x05R\tsortOrder\"\xe1\x03\n" + + "\n" + + "DiceConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12C\n" + + "\rstake_options\x18\x04 \x03(\v2\x1e.hyapp.game.v1.DiceStakeOptionR\fstakeOptions\x12\x17\n" + + "\afee_bps\x18\x05 \x01(\x05R\x06feeBps\x12\x19\n" + + "\bpool_bps\x18\x06 \x01(\x05R\apoolBps\x12\x1f\n" + + "\vmin_players\x18\a \x01(\x05R\n" + + "minPlayers\x12\x1f\n" + + "\vmax_players\x18\b \x01(\x05R\n" + + "maxPlayers\x12#\n" + + "\rrobot_enabled\x18\t \x01(\bR\frobotEnabled\x12-\n" + + "\x13robot_match_wait_ms\x18\n" + + " \x01(\x03R\x10robotMatchWaitMs\x12*\n" + + "\x11pool_balance_coin\x18\v \x01(\x03R\x0fpoolBalanceCoin\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMsJ\x04\b\x0e\x10\x0f\"_\n" + + "\x14GetDiceConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\"m\n" + + "\x12DiceConfigResponse\x121\n" + + "\x06config\x18\x01 \x01(\v2\x19.hyapp.game.v1.DiceConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x9d\x02\n" + + "\x10RoomRPSStakeGift\x12\x17\n" + + "\agift_id\x18\x01 \x01(\x03R\x06giftId\x12\x1b\n" + + "\tgift_name\x18\x02 \x01(\tR\bgiftName\x12\"\n" + + "\rgift_icon_url\x18\x03 \x01(\tR\vgiftIconUrl\x12&\n" + + "\x0fgift_price_coin\x18\x04 \x01(\x03R\rgiftPriceCoin\x12\x18\n" + + "\aenabled\x18\x05 \x01(\bR\aenabled\x12\x1d\n" + + "\n" + + "sort_order\x18\x06 \x01(\x05R\tsortOrder\x12 \n" + + "\fgift_id_text\x18\a \x01(\tR\n" + + "giftIdText\x12,\n" + + "\x12gift_animation_url\x18\b \x01(\tR\x10giftAnimationUrl\"\xc7\x02\n" + + "\rRoomRPSConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x120\n" + + "\x14challenge_timeout_ms\x18\x04 \x01(\x03R\x12challengeTimeoutMs\x12.\n" + + "\x13reveal_countdown_ms\x18\x05 \x01(\x03R\x11revealCountdownMs\x12@\n" + + "\vstake_gifts\x18\x06 \x03(\v2\x1f.hyapp.game.v1.RoomRPSStakeGiftR\n" + + "stakeGifts\x12\"\n" + + "\rcreated_at_ms\x18\a \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\"\xa1\x01\n" + + "\rRoomRPSPlayer\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x18\n" + + "\agesture\x18\x02 \x01(\tR\agesture\x12\x16\n" + + "\x06result\x18\x03 \x01(\tR\x06result\x12#\n" + + "\rbalance_after\x18\x04 \x01(\x03R\fbalanceAfter\x12 \n" + + "\fjoined_at_ms\x18\x05 \x01(\x03R\n" + + "joinedAtMs\"\xd8\x05\n" + + "\x10RoomRPSChallenge\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12!\n" + + "\fchallenge_id\x18\x02 \x01(\tR\vchallengeId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x04 \x01(\x03R\bregionId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\"\n" + + "\rstake_gift_id\x18\x06 \x01(\x03R\vstakeGiftId\x12\x1d\n" + + "\n" + + "stake_coin\x18\a \x01(\x03R\tstakeCoin\x12:\n" + + "\tinitiator\x18\b \x01(\v2\x1c.hyapp.game.v1.RoomRPSPlayerR\tinitiator\x12<\n" + + "\n" + + "challenger\x18\t \x01(\v2\x1c.hyapp.game.v1.RoomRPSPlayerR\n" + + "challenger\x12$\n" + + "\x0ewinner_user_id\x18\n" + + " \x01(\x03R\fwinnerUserId\x12+\n" + + "\x11settlement_status\x18\v \x01(\tR\x10settlementStatus\x12%\n" + + "\x0efailure_reason\x18\f \x01(\tR\rfailureReason\x12\"\n" + + "\rtimeout_at_ms\x18\r \x01(\x03R\vtimeoutAtMs\x12 \n" + + "\freveal_at_ms\x18\x0e \x01(\x03R\n" + + "revealAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rmatched_at_ms\x18\x10 \x01(\x03R\vmatchedAtMs\x12\"\n" + + "\rsettled_at_ms\x18\x11 \x01(\x03R\vsettledAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x12 \x01(\x03R\vupdatedAtMs\x12+\n" + + "\x12stake_gift_id_text\x18\x13 \x01(\tR\x0fstakeGiftIdText\"I\n" + + "\x17GetRoomRPSConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\"s\n" + + "\x15RoomRPSConfigResponse\x124\n" + + "\x06config\x18\x01 \x01(\v2\x1c.hyapp.game.v1.RoomRPSConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xf3\x01\n" + + "\x1dCreateRoomRPSChallengeRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x04 \x01(\x03R\bregionId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\x03R\x06giftId\x12\x18\n" + + "\agesture\x18\x06 \x01(\tR\agesture\x12 \n" + + "\fgift_id_text\x18\a \x01(\tR\n" + + "giftIdText\"\xa5\x01\n" + + "\x1dAcceptRoomRPSChallengeRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12!\n" + + "\fchallenge_id\x18\x03 \x01(\tR\vchallengeId\x12\x18\n" + + "\agesture\x18\x04 \x01(\tR\agesture\"\x88\x01\n" + + "\x1aGetRoomRPSChallengeRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12!\n" + + "\fchallenge_id\x18\x03 \x01(\tR\vchallengeId\"\xeb\x02\n" + + "\x1cListRoomRPSChallengesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12*\n" + + "\x11initiator_user_id\x18\x05 \x01(\x03R\x0finitiatorUserId\x12,\n" + + "\x12challenger_user_id\x18\x06 \x01(\x03R\x10challengerUserId\x12\"\n" + + "\rstart_time_ms\x18\a \x01(\x03R\vstartTimeMs\x12\x1e\n" + + "\vend_time_ms\x18\b \x01(\x03R\tendTimeMs\x12\x1b\n" + + "\tpage_size\x18\t \x01(\x05R\bpageSize\x12\x16\n" + + "\x06cursor\x18\n" + + " \x01(\tR\x06cursor\"\x7f\n" + + "\x18RoomRPSChallengeResponse\x12=\n" + + "\tchallenge\x18\x01 \x01(\v2\x1f.hyapp.game.v1.RoomRPSChallengeR\tchallenge\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xc4\x01\n" + + "\x1dListRoomRPSChallengesResponse\x12?\n" + + "\n" + + "challenges\x18\x01 \x03(\v2\x1f.hyapp.game.v1.RoomRPSChallengeR\n" + + "challenges\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\x82\x01\n" + + "\x1aUpdateRoomRPSConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x124\n" + + "\x06config\x18\x02 \x01(\v2\x1c.hyapp.game.v1.RoomRPSConfigR\x06config\"r\n" + + "\x1dRetryRoomRPSSettlementRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12!\n" + + "\fchallenge_id\x18\x02 \x01(\tR\vchallengeId\"r\n" + + "\x1dExpireRoomRPSChallengeRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12!\n" + + "\fchallenge_id\x18\x02 \x01(\tR\vchallengeId\"\xd1\x02\n" + + "\x16CreateDiceMatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\agame_id\x18\x03 \x01(\tR\x06gameId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1d\n" + + "\n" + + "stake_coin\x18\x06 \x01(\x03R\tstakeCoin\x12\x1f\n" + + "\vmin_players\x18\a \x01(\x05R\n" + + "minPlayers\x12\x1f\n" + + "\vmax_players\x18\b \x01(\x05R\n" + + "maxPlayers\x12\x1f\n" + + "\vrps_gesture\x18\t \x01(\tR\n" + + "rpsGesture\x12\x1d\n" + + "\n" + + "country_id\x18\n" + + " \x01(\x03R\tcountryId\"\xb4\x01\n" + + "\x14JoinDiceMatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\tR\amatchId\x12\x17\n" + + "\agame_id\x18\x04 \x01(\tR\x06gameId\x12\x1f\n" + + "\vrps_gesture\x18\x05 \x01(\tR\n" + + "rpsGesture\"\x92\x01\n" + + "\x13GetDiceMatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\tR\amatchId\x12\x17\n" + + "\agame_id\x18\x04 \x01(\tR\x06gameId\"\xb4\x01\n" + + "\x14RollDiceMatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\tR\amatchId\x12\x17\n" + + "\agame_id\x18\x04 \x01(\tR\x06gameId\x12\x1f\n" + + "\vrps_gesture\x18\x05 \x01(\tR\n" + + "rpsGesture\"\x89\x02\n" + + "\x10MatchDiceRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\agame_id\x18\x03 \x01(\tR\x06gameId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1d\n" + + "\n" + + "stake_coin\x18\x06 \x01(\x03R\tstakeCoin\x12\x1f\n" + + "\vrps_gesture\x18\a \x01(\tR\n" + + "rpsGesture\x12\x1d\n" + + "\n" + + "country_id\x18\b \x01(\x03R\tcountryId\"\x95\x01\n" + + "\x16CancelDiceMatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\tR\amatchId\x12\x17\n" + + "\agame_id\x18\x04 \x01(\tR\x06gameId\"i\n" + + "\x11DiceMatchResponse\x12.\n" + + "\x05match\x18\x01 \x01(\v2\x18.hyapp.game.v1.DiceMatchR\x05match\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xbe\x03\n" + + "\x0fCallbackRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12#\n" + + "\rplatform_code\x18\x02 \x01(\tR\fplatformCode\x12\x1c\n" + + "\toperation\x18\x03 \x01(\tR\toperation\x12\x19\n" + + "\braw_body\x18\x04 \x01(\fR\arawBody\x12E\n" + + "\aheaders\x18\x05 \x03(\v2+.hyapp.game.v1.CallbackRequest.HeadersEntryR\aheaders\x12?\n" + + "\x05query\x18\x06 \x03(\v2).hyapp.game.v1.CallbackRequest.QueryEntryR\x05query\x12\x1f\n" + + "\vremote_addr\x18\a \x01(\tR\n" + + "remoteAddr\x1a:\n" + + "\fHeadersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a8\n" + + "\n" + + "QueryEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"P\n" + + "\x10CallbackResponse\x12\x19\n" + + "\braw_body\x18\x01 \x01(\fR\arawBody\x12!\n" + + "\fcontent_type\x18\x02 \x01(\tR\vcontentType\"\xb5\x01\n" + + "\x10CronBatchRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x15\n" + + "\x06run_id\x18\x02 \x01(\tR\x05runId\x12\x1b\n" + + "\tworker_id\x18\x03 \x01(\tR\bworkerId\x12\x1d\n" + + "\n" + + "batch_size\x18\x04 \x01(\x05R\tbatchSize\x12\x1e\n" + + "\vlock_ttl_ms\x18\x05 \x01(\x03R\tlockTtlMs\"\xc6\x01\n" + + "\x11CronBatchResponse\x12#\n" + + "\rclaimed_count\x18\x01 \x01(\x05R\fclaimedCount\x12'\n" + + "\x0fprocessed_count\x18\x02 \x01(\x05R\x0eprocessedCount\x12#\n" + + "\rsuccess_count\x18\x03 \x01(\x05R\fsuccessCount\x12#\n" + + "\rfailure_count\x18\x04 \x01(\x05R\ffailureCount\x12\x19\n" + + "\bhas_more\x18\x05 \x01(\bR\ahasMore\"^\n" + + "\x14ListPlatformsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\"x\n" + + "\x15ListPlatformsResponse\x129\n" + + "\tplatforms\x18\x01 \x03(\v2\x1b.hyapp.game.v1.GamePlatformR\tplatforms\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x80\x01\n" + + "\x15UpsertPlatformRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x127\n" + + "\bplatform\x18\x02 \x01(\v2\x1b.hyapp.game.v1.GamePlatformR\bplatform\"q\n" + + "\x10PlatformResponse\x127\n" + + "\bplatform\x18\x01 \x01(\v2\x1b.hyapp.game.v1.GamePlatformR\bplatform\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb6\x01\n" + + "\x12ListCatalogRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12#\n" + + "\rplatform_code\x18\x02 \x01(\tR\fplatformCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\"\x92\x01\n" + + "\x13ListCatalogResponse\x124\n" + + "\x05games\x18\x01 \x03(\v2\x1e.hyapp.game.v1.GameCatalogItemR\x05games\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"z\n" + + "\x14UpsertCatalogRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x122\n" + + "\x04game\x18\x02 \x01(\v2\x1e.hyapp.game.v1.GameCatalogItemR\x04game\"k\n" + + "\x0fCatalogResponse\x122\n" + + "\x04game\x18\x01 \x01(\v2\x1e.hyapp.game.v1.GameCatalogItemR\x04game\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"w\n" + + "\x14SetGameStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\"_\n" + + "\x14DeleteCatalogRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\"=\n" + + "\x15DeleteCatalogResponse\x12$\n" + + "\x0eserver_time_ms\x18\x01 \x01(\x03R\fserverTimeMs\"F\n" + + "\x14ListSelfGamesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\"n\n" + + "\x15ListSelfGamesResponse\x12/\n" + + "\x05games\x18\x01 \x03(\v2\x19.hyapp.game.v1.DiceConfigR\x05games\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"|\n" + + "\x17UpdateDiceConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x121\n" + + "\x06config\x18\x02 \x01(\v2\x19.hyapp.game.v1.DiceConfigR\x06config\"\x99\x06\n" + + "\x15SelfGameNewUserPolicy\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\x12+\n" + + "\x11protection_rounds\x18\x04 \x01(\x05R\x10protectionRounds\x12)\n" + + "\x10protection_hours\x18\x05 \x01(\x05R\x0fprotectionHours\x12$\n" + + "\x0emax_stake_coin\x18\x06 \x01(\x03R\fmaxStakeCoin\x12=\n" + + "\x1blifetime_subsidy_quota_coin\x18\a \x01(\x03R\x18lifetimeSubsidyQuotaCoin\x125\n" + + "\x17day1_subsidy_quota_coin\x18\b \x01(\x03R\x14day1SubsidyQuotaCoin\x12@\n" + + "\x1dsingle_round_subsidy_cap_coin\x18\t \x01(\x03R\x19singleRoundSubsidyCapCoin\x12%\n" + + "\x0estrategy_level\x18\n" + + " \x01(\tR\rstrategyLevel\x12C\n" + + "\x1elose_streak_protection_enabled\x18\v \x01(\bR\x1bloseStreakProtectionEnabled\x12.\n" + + "\x13lose_streak_trigger\x18\f \x01(\x05R\x11loseStreakTrigger\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\x12M\n" + + "$normal_phase_target_win_rate_percent\x18\x0f \x01(\x05R\x1fnormalPhaseTargetWinRatePercent\x12I\n" + + "\"black_pool_robot_force_win_enabled\x18\x10 \x01(\bR\x1dblackPoolRobotForceWinEnabled\"j\n" + + "\x1fGetSelfGameNewUserPolicyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\"\x92\x01\n" + + "\"UpdateSelfGameNewUserPolicyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12<\n" + + "\x06policy\x18\x02 \x01(\v2$.hyapp.game.v1.SelfGameNewUserPolicyR\x06policy\"\x83\x01\n" + + "\x1dSelfGameNewUserPolicyResponse\x12<\n" + + "\x06policy\x18\x01 \x01(\v2$.hyapp.game.v1.SelfGameNewUserPolicyR\x06policy\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xbd\x05\n" + + "\x11SelfGameStakePool\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x1d\n" + + "\n" + + "stake_coin\x18\x03 \x01(\x03R\tstakeCoin\x12!\n" + + "\fbalance_coin\x18\x04 \x01(\x03R\vbalanceCoin\x12#\n" + + "\rreserved_coin\x18\x05 \x01(\x03R\freservedCoin\x12%\n" + + "\x0eavailable_coin\x18\x06 \x01(\x03R\ravailableCoin\x12.\n" + + "\x13target_balance_coin\x18\a \x01(\x03R\x11targetBalanceCoin\x12*\n" + + "\x11safe_balance_coin\x18\b \x01(\x03R\x0fsafeBalanceCoin\x120\n" + + "\x14warning_balance_coin\x18\t \x01(\x03R\x12warningBalanceCoin\x12.\n" + + "\x13danger_balance_coin\x18\n" + + " \x01(\x03R\x11dangerBalanceCoin\x12\x16\n" + + "\x06status\x18\v \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "pool_level\x18\f \x01(\tR\tpoolLevel\x12,\n" + + "\x12required_pool_coin\x18\r \x01(\x03R\x10requiredPoolCoin\x12,\n" + + "\x12human_win_capacity\x18\x0e \x01(\x03R\x10humanWinCapacity\x12*\n" + + "\x11bot_match_enabled\x18\x0f \x01(\bR\x0fbotMatchEnabled\x12!\n" + + "\fblack_reason\x18\x10 \x01(\tR\vblackReason\x12\"\n" + + "\rcreated_at_ms\x18\x11 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x12 \x01(\x03R\vupdatedAtMs\"h\n" + + "\x1dListSelfGameStakePoolsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\"\x86\x01\n" + + "\x1eUpdateSelfGameStakePoolRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x124\n" + + "\x04pool\x18\x02 \x01(\v2 .hyapp.game.v1.SelfGameStakePoolR\x04pool\"w\n" + + "\x19SelfGameStakePoolResponse\x124\n" + + "\x04pool\x18\x01 \x01(\v2 .hyapp.game.v1.SelfGameStakePoolR\x04pool\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"~\n" + + "\x1eListSelfGameStakePoolsResponse\x126\n" + + "\x05pools\x18\x01 \x03(\v2 .hyapp.game.v1.SelfGameStakePoolR\x05pools\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x91\x02\n" + + "\x12DicePoolAdjustment\x12#\n" + + "\radjustment_id\x18\x01 \x01(\tR\fadjustmentId\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x1f\n" + + "\vamount_coin\x18\x03 \x01(\x03R\n" + + "amountCoin\x12\x1c\n" + + "\tdirection\x18\x04 \x01(\tR\tdirection\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12#\n" + + "\rbalance_after\x18\x06 \x01(\x03R\fbalanceAfter\x12\"\n" + + "\rcreated_at_ms\x18\a \x01(\x03R\vcreatedAtMs\x12\x1d\n" + + "\n" + + "stake_coin\x18\b \x01(\x03R\tstakeCoin\"\xdf\x01\n" + + "\x1eAdjustSelfGameStakePoolRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x1f\n" + + "\vamount_coin\x18\x03 \x01(\x03R\n" + + "amountCoin\x12\x1c\n" + + "\tdirection\x18\x04 \x01(\tR\tdirection\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x1d\n" + + "\n" + + "stake_coin\x18\x06 \x01(\x03R\tstakeCoin\"\xbd\x01\n" + + "\x1fAdjustSelfGameStakePoolResponse\x12A\n" + + "\n" + + "adjustment\x18\x01 \x01(\v2!.hyapp.game.v1.DicePoolAdjustmentR\n" + + "adjustment\x121\n" + + "\x06config\x18\x02 \x01(\v2\x19.hyapp.game.v1.DiceConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xe7\x01\n" + + "\tDiceRobot\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12-\n" + + "\x13created_by_admin_id\x18\x05 \x01(\x03R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x06 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xad\x01\n" + + "\x15ListDiceRobotsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\"\x91\x01\n" + + "\x16ListDiceRobotsResponse\x120\n" + + "\x06robots\x18\x01 \x03(\v2\x18.hyapp.game.v1.DiceRobotR\x06robots\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x7f\n" + + "\x19RegisterDiceRobotsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x19\n" + + "\buser_ids\x18\x03 \x03(\x03R\auserIds\"t\n" + + "\x1aRegisterDiceRobotsResponse\x120\n" + + "\x06robots\x18\x01 \x03(\v2\x18.hyapp.game.v1.DiceRobotR\x06robots\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x95\x01\n" + + "\x19SetDiceRobotStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\"z\n" + + "\x16DeleteDiceRobotRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"Y\n" + + "\x17DeleteDiceRobotResponse\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"i\n" + + "\x11DiceRobotResponse\x12.\n" + + "\x05robot\x18\x01 \x01(\v2\x18.hyapp.game.v1.DiceRobotR\x05robot\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb3\x01\n" + + "\x11GameWhitelistUser\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12-\n" + + "\x13created_by_admin_id\x18\x04 \x01(\x03R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\"\x83\x01\n" + + "\x1eSetGameWhitelistEnabledRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\"\x85\x01\n" + + "\x1dListGameWhitelistUsersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\"~\n" + + "\x1eListGameWhitelistUsersResponse\x126\n" + + "\x05users\x18\x01 \x03(\v2 .hyapp.game.v1.GameWhitelistUserR\x05users\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x7f\n" + + "\x1bAddGameWhitelistUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"w\n" + + "\x19GameWhitelistUserResponse\x124\n" + + "\x04user\x18\x01 \x01(\v2 .hyapp.game.v1.GameWhitelistUserR\x04user\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x82\x01\n" + + "\x1eDeleteGameWhitelistUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.game.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"G\n" + + "\x1fDeleteGameWhitelistUserResponse\x12$\n" + + "\x0eserver_time_ms\x18\x01 \x01(\x03R\fserverTimeMs2\xe6\f\n" + + "\x0eGameAppService\x12N\n" + + "\tListGames\x12\x1f.hyapp.game.v1.ListGamesRequest\x1a .hyapp.game.v1.ListGamesResponse\x12Z\n" + + "\x0fListRecentGames\x12%.hyapp.game.v1.ListRecentGamesRequest\x1a .hyapp.game.v1.ListGamesResponse\x12i\n" + + "\x12ListExploreWinners\x12(.hyapp.game.v1.ListExploreWinnersRequest\x1a).hyapp.game.v1.ListExploreWinnersResponse\x12`\n" + + "\x0fGetBridgeScript\x12%.hyapp.game.v1.GetBridgeScriptRequest\x1a&.hyapp.game.v1.GetBridgeScriptResponse\x12Q\n" + + "\n" + + "LaunchGame\x12 .hyapp.game.v1.LaunchGameRequest\x1a!.hyapp.game.v1.LaunchGameResponse\x12W\n" + + "\rGetDiceConfig\x12#.hyapp.game.v1.GetDiceConfigRequest\x1a!.hyapp.game.v1.DiceConfigResponse\x12N\n" + + "\tMatchDice\x12\x1f.hyapp.game.v1.MatchDiceRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12Z\n" + + "\x0fCreateDiceMatch\x12%.hyapp.game.v1.CreateDiceMatchRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12V\n" + + "\rJoinDiceMatch\x12#.hyapp.game.v1.JoinDiceMatchRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12T\n" + + "\fGetDiceMatch\x12\".hyapp.game.v1.GetDiceMatchRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12V\n" + + "\rRollDiceMatch\x12#.hyapp.game.v1.RollDiceMatchRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12Z\n" + + "\x0fCancelDiceMatch\x12%.hyapp.game.v1.CancelDiceMatchRequest\x1a .hyapp.game.v1.DiceMatchResponse\x12`\n" + + "\x10GetRoomRPSConfig\x12&.hyapp.game.v1.GetRoomRPSConfigRequest\x1a$.hyapp.game.v1.RoomRPSConfigResponse\x12r\n" + + "\x15ListRoomRPSChallenges\x12+.hyapp.game.v1.ListRoomRPSChallengesRequest\x1a,.hyapp.game.v1.ListRoomRPSChallengesResponse\x12o\n" + + "\x16CreateRoomRPSChallenge\x12,.hyapp.game.v1.CreateRoomRPSChallengeRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponse\x12o\n" + + "\x16AcceptRoomRPSChallenge\x12,.hyapp.game.v1.AcceptRoomRPSChallengeRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponse\x12i\n" + + "\x13GetRoomRPSChallenge\x12).hyapp.game.v1.GetRoomRPSChallengeRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponse2h\n" + + "\x13GameCallbackService\x12Q\n" + + "\x0eHandleCallback\x12\x1e.hyapp.game.v1.CallbackRequest\x1a\x1f.hyapp.game.v1.CallbackResponse2t\n" + + "\x0fGameCronService\x12a\n" + + "\x1cProcessLevelEventOutboxBatch\x12\x1f.hyapp.game.v1.CronBatchRequest\x1a .hyapp.game.v1.CronBatchResponse2\xa1\x16\n" + + "\x10GameAdminService\x12Z\n" + + "\rListPlatforms\x12#.hyapp.game.v1.ListPlatformsRequest\x1a$.hyapp.game.v1.ListPlatformsResponse\x12W\n" + + "\x0eUpsertPlatform\x12$.hyapp.game.v1.UpsertPlatformRequest\x1a\x1f.hyapp.game.v1.PlatformResponse\x12T\n" + + "\vListCatalog\x12!.hyapp.game.v1.ListCatalogRequest\x1a\".hyapp.game.v1.ListCatalogResponse\x12T\n" + + "\rUpsertCatalog\x12#.hyapp.game.v1.UpsertCatalogRequest\x1a\x1e.hyapp.game.v1.CatalogResponse\x12T\n" + + "\rSetGameStatus\x12#.hyapp.game.v1.SetGameStatusRequest\x1a\x1e.hyapp.game.v1.CatalogResponse\x12Z\n" + + "\rDeleteCatalog\x12#.hyapp.game.v1.DeleteCatalogRequest\x1a$.hyapp.game.v1.DeleteCatalogResponse\x12h\n" + + "\x17SetGameWhitelistEnabled\x12-.hyapp.game.v1.SetGameWhitelistEnabledRequest\x1a\x1e.hyapp.game.v1.CatalogResponse\x12u\n" + + "\x16ListGameWhitelistUsers\x12,.hyapp.game.v1.ListGameWhitelistUsersRequest\x1a-.hyapp.game.v1.ListGameWhitelistUsersResponse\x12l\n" + + "\x14AddGameWhitelistUser\x12*.hyapp.game.v1.AddGameWhitelistUserRequest\x1a(.hyapp.game.v1.GameWhitelistUserResponse\x12x\n" + + "\x17DeleteGameWhitelistUser\x12-.hyapp.game.v1.DeleteGameWhitelistUserRequest\x1a..hyapp.game.v1.DeleteGameWhitelistUserResponse\x12Z\n" + + "\rListSelfGames\x12#.hyapp.game.v1.ListSelfGamesRequest\x1a$.hyapp.game.v1.ListSelfGamesResponse\x12]\n" + + "\x10UpdateDiceConfig\x12&.hyapp.game.v1.UpdateDiceConfigRequest\x1a!.hyapp.game.v1.DiceConfigResponse\x12x\n" + + "\x18GetSelfGameNewUserPolicy\x12..hyapp.game.v1.GetSelfGameNewUserPolicyRequest\x1a,.hyapp.game.v1.SelfGameNewUserPolicyResponse\x12~\n" + + "\x1bUpdateSelfGameNewUserPolicy\x121.hyapp.game.v1.UpdateSelfGameNewUserPolicyRequest\x1a,.hyapp.game.v1.SelfGameNewUserPolicyResponse\x12u\n" + + "\x16ListSelfGameStakePools\x12,.hyapp.game.v1.ListSelfGameStakePoolsRequest\x1a-.hyapp.game.v1.ListSelfGameStakePoolsResponse\x12r\n" + + "\x17UpdateSelfGameStakePool\x12-.hyapp.game.v1.UpdateSelfGameStakePoolRequest\x1a(.hyapp.game.v1.SelfGameStakePoolResponse\x12x\n" + + "\x17AdjustSelfGameStakePool\x12-.hyapp.game.v1.AdjustSelfGameStakePoolRequest\x1a..hyapp.game.v1.AdjustSelfGameStakePoolResponse\x12]\n" + + "\x0eListDiceRobots\x12$.hyapp.game.v1.ListDiceRobotsRequest\x1a%.hyapp.game.v1.ListDiceRobotsResponse\x12i\n" + + "\x12RegisterDiceRobots\x12(.hyapp.game.v1.RegisterDiceRobotsRequest\x1a).hyapp.game.v1.RegisterDiceRobotsResponse\x12`\n" + + "\x12SetDiceRobotStatus\x12(.hyapp.game.v1.SetDiceRobotStatusRequest\x1a .hyapp.game.v1.DiceRobotResponse\x12`\n" + + "\x0fDeleteDiceRobot\x12%.hyapp.game.v1.DeleteDiceRobotRequest\x1a&.hyapp.game.v1.DeleteDiceRobotResponse\x12`\n" + + "\x10GetRoomRPSConfig\x12&.hyapp.game.v1.GetRoomRPSConfigRequest\x1a$.hyapp.game.v1.RoomRPSConfigResponse\x12f\n" + + "\x13UpdateRoomRPSConfig\x12).hyapp.game.v1.UpdateRoomRPSConfigRequest\x1a$.hyapp.game.v1.RoomRPSConfigResponse\x12r\n" + + "\x15ListRoomRPSChallenges\x12+.hyapp.game.v1.ListRoomRPSChallengesRequest\x1a,.hyapp.game.v1.ListRoomRPSChallengesResponse\x12i\n" + + "\x13GetRoomRPSChallenge\x12).hyapp.game.v1.GetRoomRPSChallengeRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponse\x12o\n" + + "\x16RetryRoomRPSSettlement\x12,.hyapp.game.v1.RetryRoomRPSSettlementRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponse\x12o\n" + + "\x16ExpireRoomRPSChallenge\x12,.hyapp.game.v1.ExpireRoomRPSChallengeRequest\x1a'.hyapp.game.v1.RoomRPSChallengeResponseB&Z$hyapp.local/api/proto/game/v1;gamev1b\x06proto3" var ( file_proto_game_v1_game_proto_rawDescOnce sync.Once - file_proto_game_v1_game_proto_rawDescData = file_proto_game_v1_game_proto_rawDesc + file_proto_game_v1_game_proto_rawDescData []byte ) func file_proto_game_v1_game_proto_rawDescGZIP() []byte { file_proto_game_v1_game_proto_rawDescOnce.Do(func() { - file_proto_game_v1_game_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_game_v1_game_proto_rawDescData) + file_proto_game_v1_game_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_game_v1_game_proto_rawDesc), len(file_proto_game_v1_game_proto_rawDesc))) }) return file_proto_game_v1_game_proto_rawDescData } @@ -8673,7 +7801,7 @@ func file_proto_game_v1_game_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_game_v1_game_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_game_v1_game_proto_rawDesc), len(file_proto_game_v1_game_proto_rawDesc)), NumEnums: 0, NumMessages: 92, NumExtensions: 0, @@ -8684,7 +7812,6 @@ func file_proto_game_v1_game_proto_init() { MessageInfos: file_proto_game_v1_game_proto_msgTypes, }.Build() File_proto_game_v1_game_proto = out.File - file_proto_game_v1_game_proto_rawDesc = nil file_proto_game_v1_game_proto_goTypes = nil file_proto_game_v1_game_proto_depIdxs = nil } diff --git a/api/proto/game/v1/game_grpc.pb.go b/api/proto/game/v1/game_grpc.pb.go index b8a97e01..27c5cf40 100644 --- a/api/proto/game/v1/game_grpc.pb.go +++ b/api/proto/game/v1/game_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/game/v1/game.proto package gamev1 @@ -271,55 +271,55 @@ type GameAppServiceServer interface { type UnimplementedGameAppServiceServer struct{} func (UnimplementedGameAppServiceServer) ListGames(context.Context, *ListGamesRequest) (*ListGamesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListGames not implemented") + return nil, status.Error(codes.Unimplemented, "method ListGames not implemented") } func (UnimplementedGameAppServiceServer) ListRecentGames(context.Context, *ListRecentGamesRequest) (*ListGamesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRecentGames not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRecentGames not implemented") } func (UnimplementedGameAppServiceServer) ListExploreWinners(context.Context, *ListExploreWinnersRequest) (*ListExploreWinnersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListExploreWinners not implemented") + return nil, status.Error(codes.Unimplemented, "method ListExploreWinners not implemented") } func (UnimplementedGameAppServiceServer) GetBridgeScript(context.Context, *GetBridgeScriptRequest) (*GetBridgeScriptResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBridgeScript not implemented") + return nil, status.Error(codes.Unimplemented, "method GetBridgeScript not implemented") } func (UnimplementedGameAppServiceServer) LaunchGame(context.Context, *LaunchGameRequest) (*LaunchGameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LaunchGame not implemented") + return nil, status.Error(codes.Unimplemented, "method LaunchGame not implemented") } func (UnimplementedGameAppServiceServer) GetDiceConfig(context.Context, *GetDiceConfigRequest) (*DiceConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDiceConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetDiceConfig not implemented") } func (UnimplementedGameAppServiceServer) MatchDice(context.Context, *MatchDiceRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MatchDice not implemented") + return nil, status.Error(codes.Unimplemented, "method MatchDice not implemented") } func (UnimplementedGameAppServiceServer) CreateDiceMatch(context.Context, *CreateDiceMatchRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateDiceMatch not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateDiceMatch not implemented") } func (UnimplementedGameAppServiceServer) JoinDiceMatch(context.Context, *JoinDiceMatchRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinDiceMatch not implemented") + return nil, status.Error(codes.Unimplemented, "method JoinDiceMatch not implemented") } func (UnimplementedGameAppServiceServer) GetDiceMatch(context.Context, *GetDiceMatchRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDiceMatch not implemented") + return nil, status.Error(codes.Unimplemented, "method GetDiceMatch not implemented") } func (UnimplementedGameAppServiceServer) RollDiceMatch(context.Context, *RollDiceMatchRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RollDiceMatch not implemented") + return nil, status.Error(codes.Unimplemented, "method RollDiceMatch not implemented") } func (UnimplementedGameAppServiceServer) CancelDiceMatch(context.Context, *CancelDiceMatchRequest) (*DiceMatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelDiceMatch not implemented") + return nil, status.Error(codes.Unimplemented, "method CancelDiceMatch not implemented") } func (UnimplementedGameAppServiceServer) GetRoomRPSConfig(context.Context, *GetRoomRPSConfigRequest) (*RoomRPSConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomRPSConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomRPSConfig not implemented") } func (UnimplementedGameAppServiceServer) ListRoomRPSChallenges(context.Context, *ListRoomRPSChallengesRequest) (*ListRoomRPSChallengesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomRPSChallenges not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomRPSChallenges not implemented") } func (UnimplementedGameAppServiceServer) CreateRoomRPSChallenge(context.Context, *CreateRoomRPSChallengeRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateRoomRPSChallenge not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateRoomRPSChallenge not implemented") } func (UnimplementedGameAppServiceServer) AcceptRoomRPSChallenge(context.Context, *AcceptRoomRPSChallengeRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AcceptRoomRPSChallenge not implemented") + return nil, status.Error(codes.Unimplemented, "method AcceptRoomRPSChallenge not implemented") } func (UnimplementedGameAppServiceServer) GetRoomRPSChallenge(context.Context, *GetRoomRPSChallengeRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomRPSChallenge not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomRPSChallenge not implemented") } func (UnimplementedGameAppServiceServer) mustEmbedUnimplementedGameAppServiceServer() {} func (UnimplementedGameAppServiceServer) testEmbeddedByValue() {} @@ -332,7 +332,7 @@ type UnsafeGameAppServiceServer interface { } func RegisterGameAppServiceServer(s grpc.ServiceRegistrar, srv GameAppServiceServer) { - // If the following call pancis, it indicates UnimplementedGameAppServiceServer was + // If the following call panics, it indicates UnimplementedGameAppServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -773,7 +773,7 @@ type GameCallbackServiceServer interface { type UnimplementedGameCallbackServiceServer struct{} func (UnimplementedGameCallbackServiceServer) HandleCallback(context.Context, *CallbackRequest) (*CallbackResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method HandleCallback not implemented") + return nil, status.Error(codes.Unimplemented, "method HandleCallback not implemented") } func (UnimplementedGameCallbackServiceServer) mustEmbedUnimplementedGameCallbackServiceServer() {} func (UnimplementedGameCallbackServiceServer) testEmbeddedByValue() {} @@ -786,7 +786,7 @@ type UnsafeGameCallbackServiceServer interface { } func RegisterGameCallbackServiceServer(s grpc.ServiceRegistrar, srv GameCallbackServiceServer) { - // If the following call pancis, it indicates UnimplementedGameCallbackServiceServer was + // If the following call panics, it indicates UnimplementedGameCallbackServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -879,7 +879,7 @@ type GameCronServiceServer interface { type UnimplementedGameCronServiceServer struct{} func (UnimplementedGameCronServiceServer) ProcessLevelEventOutboxBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessLevelEventOutboxBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessLevelEventOutboxBatch not implemented") } func (UnimplementedGameCronServiceServer) mustEmbedUnimplementedGameCronServiceServer() {} func (UnimplementedGameCronServiceServer) testEmbeddedByValue() {} @@ -892,7 +892,7 @@ type UnsafeGameCronServiceServer interface { } func RegisterGameCronServiceServer(s grpc.ServiceRegistrar, srv GameCronServiceServer) { - // If the following call pancis, it indicates UnimplementedGameCronServiceServer was + // If the following call panics, it indicates UnimplementedGameCronServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1319,85 +1319,85 @@ type GameAdminServiceServer interface { type UnimplementedGameAdminServiceServer struct{} func (UnimplementedGameAdminServiceServer) ListPlatforms(context.Context, *ListPlatformsRequest) (*ListPlatformsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPlatforms not implemented") + return nil, status.Error(codes.Unimplemented, "method ListPlatforms not implemented") } func (UnimplementedGameAdminServiceServer) UpsertPlatform(context.Context, *UpsertPlatformRequest) (*PlatformResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertPlatform not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertPlatform not implemented") } func (UnimplementedGameAdminServiceServer) ListCatalog(context.Context, *ListCatalogRequest) (*ListCatalogResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCatalog not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCatalog not implemented") } func (UnimplementedGameAdminServiceServer) UpsertCatalog(context.Context, *UpsertCatalogRequest) (*CatalogResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertCatalog not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertCatalog not implemented") } func (UnimplementedGameAdminServiceServer) SetGameStatus(context.Context, *SetGameStatusRequest) (*CatalogResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetGameStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetGameStatus not implemented") } func (UnimplementedGameAdminServiceServer) DeleteCatalog(context.Context, *DeleteCatalogRequest) (*DeleteCatalogResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteCatalog not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteCatalog not implemented") } func (UnimplementedGameAdminServiceServer) SetGameWhitelistEnabled(context.Context, *SetGameWhitelistEnabledRequest) (*CatalogResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetGameWhitelistEnabled not implemented") + return nil, status.Error(codes.Unimplemented, "method SetGameWhitelistEnabled not implemented") } func (UnimplementedGameAdminServiceServer) ListGameWhitelistUsers(context.Context, *ListGameWhitelistUsersRequest) (*ListGameWhitelistUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListGameWhitelistUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListGameWhitelistUsers not implemented") } func (UnimplementedGameAdminServiceServer) AddGameWhitelistUser(context.Context, *AddGameWhitelistUserRequest) (*GameWhitelistUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddGameWhitelistUser not implemented") + return nil, status.Error(codes.Unimplemented, "method AddGameWhitelistUser not implemented") } func (UnimplementedGameAdminServiceServer) DeleteGameWhitelistUser(context.Context, *DeleteGameWhitelistUserRequest) (*DeleteGameWhitelistUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteGameWhitelistUser not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteGameWhitelistUser not implemented") } func (UnimplementedGameAdminServiceServer) ListSelfGames(context.Context, *ListSelfGamesRequest) (*ListSelfGamesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSelfGames not implemented") + return nil, status.Error(codes.Unimplemented, "method ListSelfGames not implemented") } func (UnimplementedGameAdminServiceServer) UpdateDiceConfig(context.Context, *UpdateDiceConfigRequest) (*DiceConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateDiceConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateDiceConfig not implemented") } func (UnimplementedGameAdminServiceServer) GetSelfGameNewUserPolicy(context.Context, *GetSelfGameNewUserPolicyRequest) (*SelfGameNewUserPolicyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSelfGameNewUserPolicy not implemented") + return nil, status.Error(codes.Unimplemented, "method GetSelfGameNewUserPolicy not implemented") } func (UnimplementedGameAdminServiceServer) UpdateSelfGameNewUserPolicy(context.Context, *UpdateSelfGameNewUserPolicyRequest) (*SelfGameNewUserPolicyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateSelfGameNewUserPolicy not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateSelfGameNewUserPolicy not implemented") } func (UnimplementedGameAdminServiceServer) ListSelfGameStakePools(context.Context, *ListSelfGameStakePoolsRequest) (*ListSelfGameStakePoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSelfGameStakePools not implemented") + return nil, status.Error(codes.Unimplemented, "method ListSelfGameStakePools not implemented") } func (UnimplementedGameAdminServiceServer) UpdateSelfGameStakePool(context.Context, *UpdateSelfGameStakePoolRequest) (*SelfGameStakePoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateSelfGameStakePool not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateSelfGameStakePool not implemented") } func (UnimplementedGameAdminServiceServer) AdjustSelfGameStakePool(context.Context, *AdjustSelfGameStakePoolRequest) (*AdjustSelfGameStakePoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdjustSelfGameStakePool not implemented") + return nil, status.Error(codes.Unimplemented, "method AdjustSelfGameStakePool not implemented") } func (UnimplementedGameAdminServiceServer) ListDiceRobots(context.Context, *ListDiceRobotsRequest) (*ListDiceRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListDiceRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method ListDiceRobots not implemented") } func (UnimplementedGameAdminServiceServer) RegisterDiceRobots(context.Context, *RegisterDiceRobotsRequest) (*RegisterDiceRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RegisterDiceRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method RegisterDiceRobots not implemented") } func (UnimplementedGameAdminServiceServer) SetDiceRobotStatus(context.Context, *SetDiceRobotStatusRequest) (*DiceRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetDiceRobotStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetDiceRobotStatus not implemented") } func (UnimplementedGameAdminServiceServer) DeleteDiceRobot(context.Context, *DeleteDiceRobotRequest) (*DeleteDiceRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteDiceRobot not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteDiceRobot not implemented") } func (UnimplementedGameAdminServiceServer) GetRoomRPSConfig(context.Context, *GetRoomRPSConfigRequest) (*RoomRPSConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomRPSConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomRPSConfig not implemented") } func (UnimplementedGameAdminServiceServer) UpdateRoomRPSConfig(context.Context, *UpdateRoomRPSConfigRequest) (*RoomRPSConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRoomRPSConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRoomRPSConfig not implemented") } func (UnimplementedGameAdminServiceServer) ListRoomRPSChallenges(context.Context, *ListRoomRPSChallengesRequest) (*ListRoomRPSChallengesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomRPSChallenges not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomRPSChallenges not implemented") } func (UnimplementedGameAdminServiceServer) GetRoomRPSChallenge(context.Context, *GetRoomRPSChallengeRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomRPSChallenge not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomRPSChallenge not implemented") } func (UnimplementedGameAdminServiceServer) RetryRoomRPSSettlement(context.Context, *RetryRoomRPSSettlementRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RetryRoomRPSSettlement not implemented") + return nil, status.Error(codes.Unimplemented, "method RetryRoomRPSSettlement not implemented") } func (UnimplementedGameAdminServiceServer) ExpireRoomRPSChallenge(context.Context, *ExpireRoomRPSChallengeRequest) (*RoomRPSChallengeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExpireRoomRPSChallenge not implemented") + return nil, status.Error(codes.Unimplemented, "method ExpireRoomRPSChallenge not implemented") } func (UnimplementedGameAdminServiceServer) mustEmbedUnimplementedGameAdminServiceServer() {} func (UnimplementedGameAdminServiceServer) testEmbeddedByValue() {} @@ -1410,7 +1410,7 @@ type UnsafeGameAdminServiceServer interface { } func RegisterGameAdminServiceServer(s grpc.ServiceRegistrar, srv GameAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedGameAdminServiceServer was + // If the following call panics, it indicates UnimplementedGameAdminServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/luckygift/v1/luckygift.pb.go b/api/proto/luckygift/v1/luckygift.pb.go index 22c23a70..92e15ea3 100644 --- a/api/proto/luckygift/v1/luckygift.pb.go +++ b/api/proto/luckygift/v1/luckygift.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/luckygift/v1/luckygift.proto package luckygiftv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,15 +24,14 @@ const ( // RequestMeta 是 lucky-gift-service 的内部追踪元信息。 // request_id 只用于链路排查,不能被任何业务流程当成幂等键使用。 type RequestMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` + GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` + SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` - GatewayNodeId string `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"` - SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` - AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RequestMeta) Reset() { @@ -102,29 +102,28 @@ func (x *RequestMeta) GetAppCode() string { // LuckyGiftMeta 是 HyApp 内部房间送礼扣费成功后的抽奖事实输入。 // 金额、目标用户和 command_id 必须来自 wallet-service 已落账的 receipt,不能从客户端 payload 推导。 type LuckyGiftMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DeviceId string `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - AnchorId string `protobuf:"bytes,6,opt,name=anchor_id,json=anchorId,proto3" json:"anchor_id,omitempty"` - GiftId string `protobuf:"bytes,7,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - CoinSpent int64 `protobuf:"varint,8,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - PaidAtMs int64 `protobuf:"varint,9,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` - PoolId string `protobuf:"bytes,10,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - TargetUserId int64 `protobuf:"varint,11,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftCount int32 `protobuf:"varint,12,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - VisibleRegionId int64 `protobuf:"varint,13,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - CountryId int64 `protobuf:"varint,14,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DeviceId string `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + AnchorId string `protobuf:"bytes,6,opt,name=anchor_id,json=anchorId,proto3" json:"anchor_id,omitempty"` + GiftId string `protobuf:"bytes,7,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + CoinSpent int64 `protobuf:"varint,8,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + PaidAtMs int64 `protobuf:"varint,9,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` + PoolId string `protobuf:"bytes,10,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + TargetUserId int64 `protobuf:"varint,11,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftCount int32 `protobuf:"varint,12,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + VisibleRegionId int64 `protobuf:"varint,13,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + CountryId int64 `protobuf:"varint,14,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` // sender_* 是 room-service 在送礼入口已经确认的展示快照,只进入中奖事实和 IM,不能参与抽奖或账务判断。 SenderName string `protobuf:"bytes,15,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` SenderAvatar string `protobuf:"bytes,16,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"` SenderDisplayUserId string `protobuf:"bytes,17,opt,name=sender_display_user_id,json=senderDisplayUserId,proto3" json:"sender_display_user_id,omitempty"` SenderPrettyDisplayUserId string `protobuf:"bytes,18,opt,name=sender_pretty_display_user_id,json=senderPrettyDisplayUserId,proto3" json:"sender_pretty_display_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftMeta) Reset() { @@ -284,16 +283,15 @@ func (x *LuckyGiftMeta) GetSenderPrettyDisplayUserId() string { } type LuckyGiftRuleTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stage string `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` + TierId string `protobuf:"bytes,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,3,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + BaseWeightPpm int64 `protobuf:"varint,4,opt,name=base_weight_ppm,json=baseWeightPpm,proto3" json:"base_weight_ppm,omitempty"` + HighWaterOnly bool `protobuf:"varint,5,opt,name=high_water_only,json=highWaterOnly,proto3" json:"high_water_only,omitempty"` + Enabled bool `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Stage string `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` - TierId string `protobuf:"bytes,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,3,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - BaseWeightPpm int64 `protobuf:"varint,4,opt,name=base_weight_ppm,json=baseWeightPpm,proto3" json:"base_weight_ppm,omitempty"` - HighWaterOnly bool `protobuf:"varint,5,opt,name=high_water_only,json=highWaterOnly,proto3" json:"high_water_only,omitempty"` - Enabled bool `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LuckyGiftRuleTier) Reset() { @@ -369,12 +367,11 @@ func (x *LuckyGiftRuleTier) GetEnabled() bool { } type LuckyGiftRuleStage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stage string `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` + Tiers []*LuckyGiftRuleTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` unknownFields protoimpl.UnknownFields - - Stage string `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` - Tiers []*LuckyGiftRuleTier `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LuckyGiftRuleStage) Reset() { @@ -422,25 +419,24 @@ func (x *LuckyGiftRuleStage) GetTiers() []*LuckyGiftRuleTier { } type LuckyGiftRuleConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - RuleVersion int64 `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` - TargetRtpPpm int64 `protobuf:"varint,5,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` - PoolRatePpm int64 `protobuf:"varint,6,opt,name=pool_rate_ppm,json=poolRatePpm,proto3" json:"pool_rate_ppm,omitempty"` - SettlementWindowWager int64 `protobuf:"varint,7,opt,name=settlement_window_wager,json=settlementWindowWager,proto3" json:"settlement_window_wager,omitempty"` - ControlBandPpm int64 `protobuf:"varint,8,opt,name=control_band_ppm,json=controlBandPpm,proto3" json:"control_band_ppm,omitempty"` - GiftPriceReference int64 `protobuf:"varint,9,opt,name=gift_price_reference,json=giftPriceReference,proto3" json:"gift_price_reference,omitempty"` - NoviceMaxEquivalentDraws int64 `protobuf:"varint,10,opt,name=novice_max_equivalent_draws,json=noviceMaxEquivalentDraws,proto3" json:"novice_max_equivalent_draws,omitempty"` - NormalMaxEquivalentDraws int64 `protobuf:"varint,11,opt,name=normal_max_equivalent_draws,json=normalMaxEquivalentDraws,proto3" json:"normal_max_equivalent_draws,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,12,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - Stages []*LuckyGiftRuleStage `protobuf:"bytes,15,rep,name=stages,proto3" json:"stages,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + RuleVersion int64 `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` + TargetRtpPpm int64 `protobuf:"varint,5,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` + PoolRatePpm int64 `protobuf:"varint,6,opt,name=pool_rate_ppm,json=poolRatePpm,proto3" json:"pool_rate_ppm,omitempty"` + SettlementWindowWager int64 `protobuf:"varint,7,opt,name=settlement_window_wager,json=settlementWindowWager,proto3" json:"settlement_window_wager,omitempty"` + ControlBandPpm int64 `protobuf:"varint,8,opt,name=control_band_ppm,json=controlBandPpm,proto3" json:"control_band_ppm,omitempty"` + GiftPriceReference int64 `protobuf:"varint,9,opt,name=gift_price_reference,json=giftPriceReference,proto3" json:"gift_price_reference,omitempty"` + NoviceMaxEquivalentDraws int64 `protobuf:"varint,10,opt,name=novice_max_equivalent_draws,json=noviceMaxEquivalentDraws,proto3" json:"novice_max_equivalent_draws,omitempty"` + NormalMaxEquivalentDraws int64 `protobuf:"varint,11,opt,name=normal_max_equivalent_draws,json=normalMaxEquivalentDraws,proto3" json:"normal_max_equivalent_draws,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,12,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + Stages []*LuckyGiftRuleStage `protobuf:"bytes,15,rep,name=stages,proto3" json:"stages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftRuleConfig) Reset() { @@ -579,15 +575,14 @@ func (x *LuckyGiftRuleConfig) GetStages() []*LuckyGiftRuleStage { } type CheckLuckyGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + PoolId string `protobuf:"bytes,5,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - PoolId string `protobuf:"bytes,5,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckLuckyGiftRequest) Reset() { @@ -656,18 +651,17 @@ func (x *CheckLuckyGiftRequest) GetPoolId() string { } type CheckLuckyGiftResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftPrice int64 `protobuf:"varint,4,opt,name=gift_price,json=giftPrice,proto3" json:"gift_price,omitempty"` - RuleVersion int64 `protobuf:"varint,5,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - TargetRtpPpm int64 `protobuf:"varint,6,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` - ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` - PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftPrice int64 `protobuf:"varint,4,opt,name=gift_price,json=giftPrice,proto3" json:"gift_price,omitempty"` + RuleVersion int64 `protobuf:"varint,5,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + TargetRtpPpm int64 `protobuf:"varint,6,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"` + ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` + PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CheckLuckyGiftResponse) Reset() { @@ -757,34 +751,33 @@ func (x *CheckLuckyGiftResponse) GetPoolId() string { } type LuckyGiftDrawResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - RuleVersion int64 `protobuf:"varint,4,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - ExperiencePool string `protobuf:"bytes,5,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` - SelectedTierId string `protobuf:"bytes,6,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - EffectiveRewardCoins int64 `protobuf:"varint,8,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` - RewardStatus string `protobuf:"bytes,9,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - RtpWindowIndex int64 `protobuf:"varint,10,opt,name=rtp_window_index,json=rtpWindowIndex,proto3" json:"rtp_window_index,omitempty"` - GiftRtpWindowIndex int64 `protobuf:"varint,11,opt,name=gift_rtp_window_index,json=giftRtpWindowIndex,proto3" json:"gift_rtp_window_index,omitempty"` - GlobalBaseRtpPpm int64 `protobuf:"varint,12,opt,name=global_base_rtp_ppm,json=globalBaseRtpPpm,proto3" json:"global_base_rtp_ppm,omitempty"` - GiftBaseRtpPpm int64 `protobuf:"varint,13,opt,name=gift_base_rtp_ppm,json=giftBaseRtpPpm,proto3" json:"gift_base_rtp_ppm,omitempty"` - StageFeedback bool `protobuf:"varint,14,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` - HighMultiplier bool `protobuf:"varint,15,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` - CreatedAtMs int64 `protobuf:"varint,16,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - PoolId string `protobuf:"bytes,17,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,18,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - WalletTransactionId string `protobuf:"bytes,19,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,20,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - UserId int64 `protobuf:"varint,21,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ExternalUserId string `protobuf:"bytes,22,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` - AppCode string `protobuf:"bytes,23,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Hits []*LuckyGiftHit `protobuf:"bytes,24,rep,name=hits,proto3" json:"hits,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + RuleVersion int64 `protobuf:"varint,4,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + ExperiencePool string `protobuf:"bytes,5,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` + SelectedTierId string `protobuf:"bytes,6,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + EffectiveRewardCoins int64 `protobuf:"varint,8,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` + RewardStatus string `protobuf:"bytes,9,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + RtpWindowIndex int64 `protobuf:"varint,10,opt,name=rtp_window_index,json=rtpWindowIndex,proto3" json:"rtp_window_index,omitempty"` + GiftRtpWindowIndex int64 `protobuf:"varint,11,opt,name=gift_rtp_window_index,json=giftRtpWindowIndex,proto3" json:"gift_rtp_window_index,omitempty"` + GlobalBaseRtpPpm int64 `protobuf:"varint,12,opt,name=global_base_rtp_ppm,json=globalBaseRtpPpm,proto3" json:"global_base_rtp_ppm,omitempty"` + GiftBaseRtpPpm int64 `protobuf:"varint,13,opt,name=gift_base_rtp_ppm,json=giftBaseRtpPpm,proto3" json:"gift_base_rtp_ppm,omitempty"` + StageFeedback bool `protobuf:"varint,14,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` + HighMultiplier bool `protobuf:"varint,15,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` + CreatedAtMs int64 `protobuf:"varint,16,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + PoolId string `protobuf:"bytes,17,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,18,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + WalletTransactionId string `protobuf:"bytes,19,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,20,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + UserId int64 `protobuf:"varint,21,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ExternalUserId string `protobuf:"bytes,22,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` + AppCode string `protobuf:"bytes,23,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Hits []*LuckyGiftHit `protobuf:"bytes,24,rep,name=hits,proto3" json:"hits,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftDrawResult) Reset() { @@ -986,11 +979,10 @@ func (x *LuckyGiftDrawResult) GetHits() []*LuckyGiftHit { } type ExecuteLuckyGiftDrawRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + LuckyGift *LuckyGiftMeta `protobuf:"bytes,1,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` unknownFields protoimpl.UnknownFields - - LuckyGift *LuckyGiftMeta `protobuf:"bytes,1,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExecuteLuckyGiftDrawRequest) Reset() { @@ -1031,11 +1023,10 @@ func (x *ExecuteLuckyGiftDrawRequest) GetLuckyGift() *LuckyGiftMeta { } type ExecuteLuckyGiftDrawResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *LuckyGiftDrawResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields - - Result *LuckyGiftDrawResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExecuteLuckyGiftDrawResponse) Reset() { @@ -1076,11 +1067,10 @@ func (x *ExecuteLuckyGiftDrawResponse) GetResult() *LuckyGiftDrawResult { } type BatchExecuteLuckyGiftDrawRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + LuckyGifts []*LuckyGiftMeta `protobuf:"bytes,1,rep,name=lucky_gifts,json=luckyGifts,proto3" json:"lucky_gifts,omitempty"` unknownFields protoimpl.UnknownFields - - LuckyGifts []*LuckyGiftMeta `protobuf:"bytes,1,rep,name=lucky_gifts,json=luckyGifts,proto3" json:"lucky_gifts,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchExecuteLuckyGiftDrawRequest) Reset() { @@ -1121,11 +1111,10 @@ func (x *BatchExecuteLuckyGiftDrawRequest) GetLuckyGifts() []*LuckyGiftMeta { } type BatchExecuteLuckyGiftDrawResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Results []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` unknownFields protoimpl.UnknownFields - - Results []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchExecuteLuckyGiftDrawResponse) Reset() { @@ -1168,21 +1157,20 @@ func (x *BatchExecuteLuckyGiftDrawResponse) GetResults() []*LuckyGiftDrawResult // ExternalGiftDrawRequest 是外部 App 接入的抽奖输入。 // App 调用前必须已经完成自己的扣费,lucky-gift-service 只校验金额事实并返回中奖结果。 type ExternalGiftDrawRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ExternalUserId string `protobuf:"bytes,4,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` - RequestId string `protobuf:"bytes,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - GiftCount int64 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - UnitAmount int64 `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"` - TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` - Currency string `protobuf:"bytes,9,opt,name=currency,proto3" json:"currency,omitempty"` - PaidAtMs int64 `protobuf:"varint,10,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` - MetadataJson string `protobuf:"bytes,11,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - PoolId string `protobuf:"bytes,12,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ExternalUserId string `protobuf:"bytes,4,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` + RequestId string `protobuf:"bytes,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + GiftCount int64 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + UnitAmount int64 `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"` + TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` + Currency string `protobuf:"bytes,9,opt,name=currency,proto3" json:"currency,omitempty"` + PaidAtMs int64 `protobuf:"varint,10,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"` + MetadataJson string `protobuf:"bytes,11,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + PoolId string `protobuf:"bytes,12,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExternalGiftDrawRequest) Reset() { @@ -1293,22 +1281,21 @@ func (x *ExternalGiftDrawRequest) GetPoolId() string { } type ExternalGiftDrawResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,4,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ExternalUserId string `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` - GiftCount int64 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - UnitAmount int64 `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"` - TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` - RewardAmount int64 `protobuf:"varint,9,opt,name=reward_amount,json=rewardAmount,proto3" json:"reward_amount,omitempty"` - MultiplierPpm int64 `protobuf:"varint,10,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - RewardStatus string `protobuf:"bytes,11,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - RuleVersion int64 `protobuf:"varint,12,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DrawId string `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,4,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ExternalUserId string `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` + GiftCount int64 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + UnitAmount int64 `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"` + TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` + RewardAmount int64 `protobuf:"varint,9,opt,name=reward_amount,json=rewardAmount,proto3" json:"reward_amount,omitempty"` + MultiplierPpm int64 `protobuf:"varint,10,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + RewardStatus string `protobuf:"bytes,11,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + RuleVersion int64 `protobuf:"varint,12,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExternalGiftDrawResponse) Reset() { @@ -1426,12 +1413,11 @@ func (x *ExternalGiftDrawResponse) GetCreatedAtMs() int64 { } type GetLuckyGiftConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLuckyGiftConfigRequest) Reset() { @@ -1479,11 +1465,10 @@ func (x *GetLuckyGiftConfigRequest) GetPoolId() string { } type GetLuckyGiftConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *LuckyGiftRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *LuckyGiftRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLuckyGiftConfigResponse) Reset() { @@ -1524,13 +1509,12 @@ func (x *GetLuckyGiftConfigResponse) GetConfig() *LuckyGiftRuleConfig { } type UpsertLuckyGiftConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *LuckyGiftRuleConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *LuckyGiftRuleConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertLuckyGiftConfigRequest) Reset() { @@ -1585,11 +1569,10 @@ func (x *UpsertLuckyGiftConfigRequest) GetOperatorAdminId() int64 { } type UpsertLuckyGiftConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *LuckyGiftRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *LuckyGiftRuleConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertLuckyGiftConfigResponse) Reset() { @@ -1630,11 +1613,10 @@ func (x *UpsertLuckyGiftConfigResponse) GetConfig() *LuckyGiftRuleConfig { } type ListLuckyGiftConfigsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftConfigsRequest) Reset() { @@ -1675,11 +1657,10 @@ func (x *ListLuckyGiftConfigsRequest) GetMeta() *RequestMeta { } type ListLuckyGiftConfigsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Configs []*LuckyGiftRuleConfig `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` unknownFields protoimpl.UnknownFields - - Configs []*LuckyGiftRuleConfig `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftConfigsResponse) Reset() { @@ -1720,20 +1701,19 @@ func (x *ListLuckyGiftConfigsResponse) GetConfigs() []*LuckyGiftRuleConfig { } type ListLuckyGiftDrawsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - ExternalUserId string `protobuf:"bytes,10,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` - ExternalOnly bool `protobuf:"varint,11,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + ExternalUserId string `protobuf:"bytes,10,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` + ExternalOnly bool `protobuf:"varint,11,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftDrawsRequest) Reset() { @@ -1837,12 +1817,11 @@ func (x *ListLuckyGiftDrawsRequest) GetExternalOnly() bool { } type ListLuckyGiftDrawsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Draws []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=draws,proto3" json:"draws,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Draws []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=draws,proto3" json:"draws,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftDrawsResponse) Reset() { @@ -1890,21 +1869,20 @@ func (x *ListLuckyGiftDrawsResponse) GetTotal() int64 { } type LuckyGiftDrawSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PoolId string `protobuf:"bytes,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - TotalDraws int64 `protobuf:"varint,2,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"` - UniqueUsers int64 `protobuf:"varint,3,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"` - UniqueRooms int64 `protobuf:"varint,4,opt,name=unique_rooms,json=uniqueRooms,proto3" json:"unique_rooms,omitempty"` - TotalSpentCoins int64 `protobuf:"varint,5,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"` - TotalRewardCoins int64 `protobuf:"varint,6,opt,name=total_reward_coins,json=totalRewardCoins,proto3" json:"total_reward_coins,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - ActualRtpPpm int64 `protobuf:"varint,8,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` - PendingDraws int64 `protobuf:"varint,9,opt,name=pending_draws,json=pendingDraws,proto3" json:"pending_draws,omitempty"` - GrantedDraws int64 `protobuf:"varint,10,opt,name=granted_draws,json=grantedDraws,proto3" json:"granted_draws,omitempty"` - FailedDraws int64 `protobuf:"varint,11,opt,name=failed_draws,json=failedDraws,proto3" json:"failed_draws,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PoolId string `protobuf:"bytes,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + TotalDraws int64 `protobuf:"varint,2,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"` + UniqueUsers int64 `protobuf:"varint,3,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"` + UniqueRooms int64 `protobuf:"varint,4,opt,name=unique_rooms,json=uniqueRooms,proto3" json:"unique_rooms,omitempty"` + TotalSpentCoins int64 `protobuf:"varint,5,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"` + TotalRewardCoins int64 `protobuf:"varint,6,opt,name=total_reward_coins,json=totalRewardCoins,proto3" json:"total_reward_coins,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + ActualRtpPpm int64 `protobuf:"varint,8,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"` + PendingDraws int64 `protobuf:"varint,9,opt,name=pending_draws,json=pendingDraws,proto3" json:"pending_draws,omitempty"` + GrantedDraws int64 `protobuf:"varint,10,opt,name=granted_draws,json=grantedDraws,proto3" json:"granted_draws,omitempty"` + FailedDraws int64 `protobuf:"varint,11,opt,name=failed_draws,json=failedDraws,proto3" json:"failed_draws,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftDrawSummary) Reset() { @@ -2015,19 +1993,18 @@ func (x *LuckyGiftDrawSummary) GetFailedDraws() int64 { } type LuckyGiftPoolBalance struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - Balance int64 `protobuf:"varint,3,opt,name=balance,proto3" json:"balance,omitempty"` - ReserveFloor int64 `protobuf:"varint,4,opt,name=reserve_floor,json=reserveFloor,proto3" json:"reserve_floor,omitempty"` - AvailableBalance int64 `protobuf:"varint,5,opt,name=available_balance,json=availableBalance,proto3" json:"available_balance,omitempty"` - TotalIn int64 `protobuf:"varint,6,opt,name=total_in,json=totalIn,proto3" json:"total_in,omitempty"` - TotalOut int64 `protobuf:"varint,7,opt,name=total_out,json=totalOut,proto3" json:"total_out,omitempty"` - Materialized bool `protobuf:"varint,8,opt,name=materialized,proto3" json:"materialized,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + Balance int64 `protobuf:"varint,3,opt,name=balance,proto3" json:"balance,omitempty"` + ReserveFloor int64 `protobuf:"varint,4,opt,name=reserve_floor,json=reserveFloor,proto3" json:"reserve_floor,omitempty"` + AvailableBalance int64 `protobuf:"varint,5,opt,name=available_balance,json=availableBalance,proto3" json:"available_balance,omitempty"` + TotalIn int64 `protobuf:"varint,6,opt,name=total_in,json=totalIn,proto3" json:"total_in,omitempty"` + TotalOut int64 `protobuf:"varint,7,opt,name=total_out,json=totalOut,proto3" json:"total_out,omitempty"` + Materialized bool `protobuf:"varint,8,opt,name=materialized,proto3" json:"materialized,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftPoolBalance) Reset() { @@ -2124,18 +2101,17 @@ func (x *LuckyGiftPoolBalance) GetUpdatedAtMs() int64 { } type GetLuckyGiftDrawSummaryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - PoolId string `protobuf:"bytes,6,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - ExternalUserId string `protobuf:"bytes,8,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` - ExternalOnly bool `protobuf:"varint,9,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + PoolId string `protobuf:"bytes,6,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + ExternalUserId string `protobuf:"bytes,8,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"` + ExternalOnly bool `protobuf:"varint,9,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetLuckyGiftDrawSummaryRequest) Reset() { @@ -2225,11 +2201,10 @@ func (x *GetLuckyGiftDrawSummaryRequest) GetExternalOnly() bool { } type GetLuckyGiftDrawSummaryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Summary *LuckyGiftDrawSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` unknownFields protoimpl.UnknownFields - - Summary *LuckyGiftDrawSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLuckyGiftDrawSummaryResponse) Reset() { @@ -2270,12 +2245,11 @@ func (x *GetLuckyGiftDrawSummaryResponse) GetSummary() *LuckyGiftDrawSummary { } type ListLuckyGiftPoolBalancesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftPoolBalancesRequest) Reset() { @@ -2323,11 +2297,10 @@ func (x *ListLuckyGiftPoolBalancesRequest) GetPoolId() string { } type ListLuckyGiftPoolBalancesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pools []*LuckyGiftPoolBalance `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` unknownFields protoimpl.UnknownFields - - Pools []*LuckyGiftPoolBalance `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListLuckyGiftPoolBalancesResponse) Reset() { @@ -2370,15 +2343,14 @@ func (x *ListLuckyGiftPoolBalancesResponse) GetPools() []*LuckyGiftPoolBalance { // LuckyGiftHit 只返回批量逐份开奖中实际中奖的精简位置,不复制全部审计明细。 // 声明追加在文件尾以保持既有 protobuf message index 稳定。 type LuckyGiftHit struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftIndex int32 `protobuf:"varint,1,opt,name=gift_index,json=giftIndex,proto3" json:"gift_index,omitempty"` - DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - SelectedTierId string `protobuf:"bytes,3,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,4,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - RewardCoins int64 `protobuf:"varint,5,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftIndex int32 `protobuf:"varint,1,opt,name=gift_index,json=giftIndex,proto3" json:"gift_index,omitempty"` + DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + SelectedTierId string `protobuf:"bytes,3,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,4,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + RewardCoins int64 `protobuf:"varint,5,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftHit) Reset() { @@ -2448,552 +2420,255 @@ func (x *LuckyGiftHit) GetRewardCoins() int64 { var File_proto_luckygift_v1_luckygift_proto protoreflect.FileDescriptor -var file_proto_luckygift_v1_luckygift_proto_rawDesc = []byte{ - 0x0a, 0x22, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, - 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, - 0x26, 0x0a, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x73, 0x65, 0x6e, 0x74, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, - 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x8b, 0x05, 0x0a, 0x0d, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, - 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x0a, 0x70, 0x61, - 0x69, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x70, 0x61, 0x69, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1d, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x19, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, - 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xd3, - 0x01, 0x0a, 0x11, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, - 0x54, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, - 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x50, - 0x70, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x77, 0x61, 0x74, 0x65, 0x72, - 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x69, 0x67, - 0x68, 0x57, 0x61, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x12, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, - 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x12, 0x3b, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, - 0x6c, 0x65, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x22, 0xa1, 0x05, - 0x0a, 0x13, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, 0x12, 0x22, 0x0a, 0x0d, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x6f, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x50, 0x70, 0x6d, - 0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x77, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x77, 0x61, 0x67, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x15, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x57, 0x61, 0x67, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x61, 0x6e, 0x64, 0x50, - 0x70, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x12, 0x67, 0x69, 0x66, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x6e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x72, - 0x61, 0x77, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6e, 0x6f, 0x76, 0x69, 0x63, - 0x65, 0x4d, 0x61, 0x78, 0x45, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x6d, 0x61, - 0x78, 0x5f, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x72, 0x61, - 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x4d, 0x61, 0x78, 0x45, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x44, 0x72, 0x61, - 0x77, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x2d, - 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, - 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x75, 0x63, 0x6b, 0x79, - 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, - 0x6f, 0x6c, 0x49, 0x64, 0x22, 0x8d, 0x02, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x67, 0x69, 0x66, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x74, 0x70, 0x50, - 0x70, 0x6d, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, - 0x6f, 0x6c, 0x49, 0x64, 0x22, 0xc4, 0x07, 0x0a, 0x13, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, - 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, - 0x34, 0x0a, 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x14, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x74, - 0x70, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x74, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, 0x74, 0x70, - 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x12, 0x67, 0x69, 0x66, 0x74, 0x52, 0x74, 0x70, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x13, 0x67, 0x6c, 0x6f, 0x62, 0x61, - 0x6c, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x61, 0x73, 0x65, - 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, 0x12, 0x29, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x42, 0x61, 0x73, 0x65, 0x52, 0x74, 0x70, 0x50, 0x70, - 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x64, 0x62, - 0x61, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, - 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x69, 0x74, 0x73, 0x18, 0x18, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x48, 0x69, 0x74, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x1b, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, - 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x22, 0x5f, 0x0a, 0x1c, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x66, 0x0a, - 0x20, 0x42, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x47, 0x69, 0x66, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x21, 0x42, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x8d, 0x03, - 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x12, 0x1c, 0x0a, 0x0a, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x69, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x22, 0xb2, 0x03, - 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, - 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, - 0x77, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x6e, 0x69, - 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, - 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, - 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0x69, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x22, 0x5d, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xc0, 0x01, 0x0a, - 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, - 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, - 0x60, 0x0a, 0x1d, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, - 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, - 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x52, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, - 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, - 0x66, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6f, - 0x6e, 0x6c, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x71, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, - 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, - 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x64, - 0x72, 0x61, 0x77, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xaf, 0x03, 0x0a, 0x14, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, - 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, - 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x2a, 0x0a, - 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x74, - 0x75, 0x61, 0x6c, 0x5f, 0x72, 0x74, 0x70, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x52, 0x74, 0x70, 0x50, 0x70, 0x6d, 0x12, - 0x23, 0x0a, 0x0d, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, - 0x72, 0x61, 0x77, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, - 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x72, 0x61, 0x77, 0x73, 0x22, 0xb6, 0x02, 0x0a, - 0x14, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x66, - 0x6c, 0x6f, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa0, 0x02, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x65, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, - 0x70, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, - 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, - 0x64, 0x22, 0x63, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, - 0x47, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0c, 0x4c, 0x75, 0x63, 0x6b, 0x79, - 0x47, 0x69, 0x66, 0x74, 0x48, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, - 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x73, 0x32, 0xf7, 0x03, 0x0a, 0x10, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x79, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, - 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, - 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, - 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x17, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x69, 0x66, - 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8a, 0x06, - 0x0a, 0x15, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x15, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, - 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x73, 0x12, 0x2d, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, - 0x61, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, - 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x88, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, - 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x34, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x67, 0x69, 0x66, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x30, 0x5a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x2f, 0x76, 0x31, - 0x3b, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x67, 0x69, 0x66, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_luckygift_v1_luckygift_proto_rawDesc = "" + + "\n" + + "\"proto/luckygift/v1/luckygift.proto\x12\x12hyapp.luckygift.v1\"\xa5\x01\n" + + "\vRequestMeta\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x16\n" + + "\x06caller\x18\x02 \x01(\tR\x06caller\x12&\n" + + "\x0fgateway_node_id\x18\x03 \x01(\tR\rgatewayNodeId\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\x04 \x01(\x03R\bsentAtMs\x12\x19\n" + + "\bapp_code\x18\x05 \x01(\tR\aappCode\"\x8b\x05\n" + + "\rLuckyGiftMeta\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" + + "\tdevice_id\x18\x04 \x01(\tR\bdeviceId\x12\x17\n" + + "\aroom_id\x18\x05 \x01(\tR\x06roomId\x12\x1b\n" + + "\tanchor_id\x18\x06 \x01(\tR\banchorId\x12\x17\n" + + "\agift_id\x18\a \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "coin_spent\x18\b \x01(\x03R\tcoinSpent\x12\x1c\n" + + "\n" + + "paid_at_ms\x18\t \x01(\x03R\bpaidAtMs\x12\x17\n" + + "\apool_id\x18\n" + + " \x01(\tR\x06poolId\x12$\n" + + "\x0etarget_user_id\x18\v \x01(\x03R\ftargetUserId\x12\x1d\n" + + "\n" + + "gift_count\x18\f \x01(\x05R\tgiftCount\x12*\n" + + "\x11visible_region_id\x18\r \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" + + "\n" + + "country_id\x18\x0e \x01(\x03R\tcountryId\x12\x1f\n" + + "\vsender_name\x18\x0f \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\x10 \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\x11 \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\x12 \x01(\tR\x19senderPrettyDisplayUserId\"\xd3\x01\n" + + "\x11LuckyGiftRuleTier\x12\x14\n" + + "\x05stage\x18\x01 \x01(\tR\x05stage\x12\x17\n" + + "\atier_id\x18\x02 \x01(\tR\x06tierId\x12%\n" + + "\x0emultiplier_ppm\x18\x03 \x01(\x03R\rmultiplierPpm\x12&\n" + + "\x0fbase_weight_ppm\x18\x04 \x01(\x03R\rbaseWeightPpm\x12&\n" + + "\x0fhigh_water_only\x18\x05 \x01(\bR\rhighWaterOnly\x12\x18\n" + + "\aenabled\x18\x06 \x01(\bR\aenabled\"g\n" + + "\x12LuckyGiftRuleStage\x12\x14\n" + + "\x05stage\x18\x01 \x01(\tR\x05stage\x12;\n" + + "\x05tiers\x18\x02 \x03(\v2%.hyapp.luckygift.v1.LuckyGiftRuleTierR\x05tiers\"\xa1\x05\n" + + "\x13LuckyGiftRuleConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\apool_id\x18\x02 \x01(\tR\x06poolId\x12!\n" + + "\frule_version\x18\x03 \x01(\x03R\vruleVersion\x12\x18\n" + + "\aenabled\x18\x04 \x01(\bR\aenabled\x12$\n" + + "\x0etarget_rtp_ppm\x18\x05 \x01(\x03R\ftargetRtpPpm\x12\"\n" + + "\rpool_rate_ppm\x18\x06 \x01(\x03R\vpoolRatePpm\x126\n" + + "\x17settlement_window_wager\x18\a \x01(\x03R\x15settlementWindowWager\x12(\n" + + "\x10control_band_ppm\x18\b \x01(\x03R\x0econtrolBandPpm\x120\n" + + "\x14gift_price_reference\x18\t \x01(\x03R\x12giftPriceReference\x12=\n" + + "\x1bnovice_max_equivalent_draws\x18\n" + + " \x01(\x03R\x18noviceMaxEquivalentDraws\x12=\n" + + "\x1bnormal_max_equivalent_draws\x18\v \x01(\x03R\x18normalMaxEquivalentDraws\x12*\n" + + "\x11effective_from_ms\x18\f \x01(\x03R\x0feffectiveFromMs\x12-\n" + + "\x13created_by_admin_id\x18\r \x01(\x03R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12>\n" + + "\x06stages\x18\x0f \x03(\v2&.hyapp.luckygift.v1.LuckyGiftRuleStageR\x06stages\"\xb0\x01\n" + + "\x15CheckLuckyGiftRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x17\n" + + "\agift_id\x18\x04 \x01(\tR\x06giftId\x12\x17\n" + + "\apool_id\x18\x05 \x01(\tR\x06poolId\"\x8d\x02\n" + + "\x16CheckLuckyGiftResponse\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_price\x18\x04 \x01(\x03R\tgiftPrice\x12!\n" + + "\frule_version\x18\x05 \x01(\x03R\vruleVersion\x12$\n" + + "\x0etarget_rtp_ppm\x18\x06 \x01(\x03R\ftargetRtpPpm\x12'\n" + + "\x0fexperience_pool\x18\a \x01(\tR\x0eexperiencePool\x12\x17\n" + + "\apool_id\x18\b \x01(\tR\x06poolId\"\xc4\a\n" + + "\x13LuckyGiftDrawResult\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12!\n" + + "\frule_version\x18\x04 \x01(\x03R\vruleVersion\x12'\n" + + "\x0fexperience_pool\x18\x05 \x01(\tR\x0eexperiencePool\x12(\n" + + "\x10selected_tier_id\x18\x06 \x01(\tR\x0eselectedTierId\x12*\n" + + "\x11base_reward_coins\x18\a \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\b \x01(\x03R\x14effectiveRewardCoins\x12#\n" + + "\rreward_status\x18\t \x01(\tR\frewardStatus\x12(\n" + + "\x10rtp_window_index\x18\n" + + " \x01(\x03R\x0ertpWindowIndex\x121\n" + + "\x15gift_rtp_window_index\x18\v \x01(\x03R\x12giftRtpWindowIndex\x12-\n" + + "\x13global_base_rtp_ppm\x18\f \x01(\x03R\x10globalBaseRtpPpm\x12)\n" + + "\x11gift_base_rtp_ppm\x18\r \x01(\x03R\x0egiftBaseRtpPpm\x12%\n" + + "\x0estage_feedback\x18\x0e \x01(\bR\rstageFeedback\x12'\n" + + "\x0fhigh_multiplier\x18\x0f \x01(\bR\x0ehighMultiplier\x12\"\n" + + "\rcreated_at_ms\x18\x10 \x01(\x03R\vcreatedAtMs\x12\x17\n" + + "\apool_id\x18\x11 \x01(\tR\x06poolId\x12%\n" + + "\x0emultiplier_ppm\x18\x12 \x01(\x03R\rmultiplierPpm\x122\n" + + "\x15wallet_transaction_id\x18\x13 \x01(\tR\x13walletTransactionId\x12,\n" + + "\x12coin_balance_after\x18\x14 \x01(\x03R\x10coinBalanceAfter\x12\x17\n" + + "\auser_id\x18\x15 \x01(\x03R\x06userId\x12(\n" + + "\x10external_user_id\x18\x16 \x01(\tR\x0eexternalUserId\x12\x19\n" + + "\bapp_code\x18\x17 \x01(\tR\aappCode\x124\n" + + "\x04hits\x18\x18 \x03(\v2 .hyapp.luckygift.v1.LuckyGiftHitR\x04hits\"_\n" + + "\x1bExecuteLuckyGiftDrawRequest\x12@\n" + + "\n" + + "lucky_gift\x18\x01 \x01(\v2!.hyapp.luckygift.v1.LuckyGiftMetaR\tluckyGift\"_\n" + + "\x1cExecuteLuckyGiftDrawResponse\x12?\n" + + "\x06result\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\x06result\"f\n" + + " BatchExecuteLuckyGiftDrawRequest\x12B\n" + + "\vlucky_gifts\x18\x01 \x03(\v2!.hyapp.luckygift.v1.LuckyGiftMetaR\n" + + "luckyGifts\"f\n" + + "!BatchExecuteLuckyGiftDrawResponse\x12A\n" + + "\aresults\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\aresults\"\x8d\x03\n" + + "\x17ExternalGiftDrawRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bapp_code\x18\x03 \x01(\tR\aappCode\x12(\n" + + "\x10external_user_id\x18\x04 \x01(\tR\x0eexternalUserId\x12\x1d\n" + + "\n" + + "request_id\x18\x05 \x01(\tR\trequestId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x03R\tgiftCount\x12\x1f\n" + + "\vunit_amount\x18\a \x01(\x03R\n" + + "unitAmount\x12!\n" + + "\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12\x1a\n" + + "\bcurrency\x18\t \x01(\tR\bcurrency\x12\x1c\n" + + "\n" + + "paid_at_ms\x18\n" + + " \x01(\x03R\bpaidAtMs\x12#\n" + + "\rmetadata_json\x18\v \x01(\tR\fmetadataJson\x12\x17\n" + + "\apool_id\x18\f \x01(\tR\x06poolId\"\xb2\x03\n" + + "\x18ExternalGiftDrawResponse\x12\x17\n" + + "\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "request_id\x18\x02 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x04 \x01(\tR\aappCode\x12(\n" + + "\x10external_user_id\x18\x05 \x01(\tR\x0eexternalUserId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x03R\tgiftCount\x12\x1f\n" + + "\vunit_amount\x18\a \x01(\x03R\n" + + "unitAmount\x12!\n" + + "\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12#\n" + + "\rreward_amount\x18\t \x01(\x03R\frewardAmount\x12%\n" + + "\x0emultiplier_ppm\x18\n" + + " \x01(\x03R\rmultiplierPpm\x12#\n" + + "\rreward_status\x18\v \x01(\tR\frewardStatus\x12!\n" + + "\frule_version\x18\f \x01(\x03R\vruleVersion\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\"i\n" + + "\x19GetLuckyGiftConfigRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" + + "\apool_id\x18\x02 \x01(\tR\x06poolId\"]\n" + + "\x1aGetLuckyGiftConfigResponse\x12?\n" + + "\x06config\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\"\xc0\x01\n" + + "\x1cUpsertLuckyGiftConfigRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12?\n" + + "\x06config\x18\x02 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"`\n" + + "\x1dUpsertLuckyGiftConfigResponse\x12?\n" + + "\x06config\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\"R\n" + + "\x1bListLuckyGiftConfigsRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\"a\n" + + "\x1cListLuckyGiftConfigsResponse\x12A\n" + + "\aconfigs\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\aconfigs\"\xcc\x02\n" + + "\x19ListLuckyGiftDrawsRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agift_id\x18\x02 \x01(\tR\x06giftId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\x12\x17\n" + + "\apool_id\x18\b \x01(\tR\x06poolId\x12(\n" + + "\x10external_user_id\x18\n" + + " \x01(\tR\x0eexternalUserId\x12#\n" + + "\rexternal_only\x18\v \x01(\bR\fexternalOnly\"q\n" + + "\x1aListLuckyGiftDrawsResponse\x12=\n" + + "\x05draws\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\x05draws\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xaf\x03\n" + + "\x14LuckyGiftDrawSummary\x12\x17\n" + + "\apool_id\x18\x01 \x01(\tR\x06poolId\x12\x1f\n" + + "\vtotal_draws\x18\x02 \x01(\x03R\n" + + "totalDraws\x12!\n" + + "\funique_users\x18\x03 \x01(\x03R\vuniqueUsers\x12!\n" + + "\funique_rooms\x18\x04 \x01(\x03R\vuniqueRooms\x12*\n" + + "\x11total_spent_coins\x18\x05 \x01(\x03R\x0ftotalSpentCoins\x12,\n" + + "\x12total_reward_coins\x18\x06 \x01(\x03R\x10totalRewardCoins\x12*\n" + + "\x11base_reward_coins\x18\a \x01(\x03R\x0fbaseRewardCoins\x12$\n" + + "\x0eactual_rtp_ppm\x18\b \x01(\x03R\factualRtpPpm\x12#\n" + + "\rpending_draws\x18\t \x01(\x03R\fpendingDraws\x12#\n" + + "\rgranted_draws\x18\n" + + " \x01(\x03R\fgrantedDraws\x12!\n" + + "\ffailed_draws\x18\v \x01(\x03R\vfailedDraws\"\xb6\x02\n" + + "\x14LuckyGiftPoolBalance\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\apool_id\x18\x02 \x01(\tR\x06poolId\x12\x18\n" + + "\abalance\x18\x03 \x01(\x03R\abalance\x12#\n" + + "\rreserve_floor\x18\x04 \x01(\x03R\freserveFloor\x12+\n" + + "\x11available_balance\x18\x05 \x01(\x03R\x10availableBalance\x12\x19\n" + + "\btotal_in\x18\x06 \x01(\x03R\atotalIn\x12\x1b\n" + + "\ttotal_out\x18\a \x01(\x03R\btotalOut\x12\"\n" + + "\fmaterialized\x18\b \x01(\bR\fmaterialized\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"\xa0\x02\n" + + "\x1eGetLuckyGiftDrawSummaryRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agift_id\x18\x02 \x01(\tR\x06giftId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x17\n" + + "\apool_id\x18\x06 \x01(\tR\x06poolId\x12(\n" + + "\x10external_user_id\x18\b \x01(\tR\x0eexternalUserId\x12#\n" + + "\rexternal_only\x18\t \x01(\bR\fexternalOnly\"e\n" + + "\x1fGetLuckyGiftDrawSummaryResponse\x12B\n" + + "\asummary\x18\x01 \x01(\v2(.hyapp.luckygift.v1.LuckyGiftDrawSummaryR\asummary\"p\n" + + " ListLuckyGiftPoolBalancesRequest\x123\n" + + "\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" + + "\apool_id\x18\x02 \x01(\tR\x06poolId\"c\n" + + "!ListLuckyGiftPoolBalancesResponse\x12>\n" + + "\x05pools\x18\x01 \x03(\v2(.hyapp.luckygift.v1.LuckyGiftPoolBalanceR\x05pools\"\xba\x01\n" + + "\fLuckyGiftHit\x12\x1d\n" + + "\n" + + "gift_index\x18\x01 \x01(\x05R\tgiftIndex\x12\x17\n" + + "\adraw_id\x18\x02 \x01(\tR\x06drawId\x12(\n" + + "\x10selected_tier_id\x18\x03 \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\x04 \x01(\x03R\rmultiplierPpm\x12!\n" + + "\freward_coins\x18\x05 \x01(\x03R\vrewardCoins2\xf7\x03\n" + + "\x10LuckyGiftService\x12g\n" + + "\x0eCheckLuckyGift\x12).hyapp.luckygift.v1.CheckLuckyGiftRequest\x1a*.hyapp.luckygift.v1.CheckLuckyGiftResponse\x12y\n" + + "\x14ExecuteLuckyGiftDraw\x12/.hyapp.luckygift.v1.ExecuteLuckyGiftDrawRequest\x1a0.hyapp.luckygift.v1.ExecuteLuckyGiftDrawResponse\x12\x88\x01\n" + + "\x19BatchExecuteLuckyGiftDraw\x124.hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawRequest\x1a5.hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawResponse\x12t\n" + + "\x17ExecuteExternalGiftDraw\x12+.hyapp.luckygift.v1.ExternalGiftDrawRequest\x1a,.hyapp.luckygift.v1.ExternalGiftDrawResponse2\x8a\x06\n" + + "\x15AdminLuckyGiftService\x12s\n" + + "\x12GetLuckyGiftConfig\x12-.hyapp.luckygift.v1.GetLuckyGiftConfigRequest\x1a..hyapp.luckygift.v1.GetLuckyGiftConfigResponse\x12|\n" + + "\x15UpsertLuckyGiftConfig\x120.hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest\x1a1.hyapp.luckygift.v1.UpsertLuckyGiftConfigResponse\x12y\n" + + "\x14ListLuckyGiftConfigs\x12/.hyapp.luckygift.v1.ListLuckyGiftConfigsRequest\x1a0.hyapp.luckygift.v1.ListLuckyGiftConfigsResponse\x12s\n" + + "\x12ListLuckyGiftDraws\x12-.hyapp.luckygift.v1.ListLuckyGiftDrawsRequest\x1a..hyapp.luckygift.v1.ListLuckyGiftDrawsResponse\x12\x82\x01\n" + + "\x17GetLuckyGiftDrawSummary\x122.hyapp.luckygift.v1.GetLuckyGiftDrawSummaryRequest\x1a3.hyapp.luckygift.v1.GetLuckyGiftDrawSummaryResponse\x12\x88\x01\n" + + "\x19ListLuckyGiftPoolBalances\x124.hyapp.luckygift.v1.ListLuckyGiftPoolBalancesRequest\x1a5.hyapp.luckygift.v1.ListLuckyGiftPoolBalancesResponseB0Z.hyapp.local/api/proto/luckygift/v1;luckygiftv1b\x06proto3" var ( file_proto_luckygift_v1_luckygift_proto_rawDescOnce sync.Once - file_proto_luckygift_v1_luckygift_proto_rawDescData = file_proto_luckygift_v1_luckygift_proto_rawDesc + file_proto_luckygift_v1_luckygift_proto_rawDescData []byte ) func file_proto_luckygift_v1_luckygift_proto_rawDescGZIP() []byte { file_proto_luckygift_v1_luckygift_proto_rawDescOnce.Do(func() { - file_proto_luckygift_v1_luckygift_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_luckygift_v1_luckygift_proto_rawDescData) + file_proto_luckygift_v1_luckygift_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_luckygift_v1_luckygift_proto_rawDesc), len(file_proto_luckygift_v1_luckygift_proto_rawDesc))) }) return file_proto_luckygift_v1_luckygift_proto_rawDescData } @@ -3090,7 +2765,7 @@ func file_proto_luckygift_v1_luckygift_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_luckygift_v1_luckygift_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_luckygift_v1_luckygift_proto_rawDesc), len(file_proto_luckygift_v1_luckygift_proto_rawDesc)), NumEnums: 0, NumMessages: 29, NumExtensions: 0, @@ -3101,7 +2776,6 @@ func file_proto_luckygift_v1_luckygift_proto_init() { MessageInfos: file_proto_luckygift_v1_luckygift_proto_msgTypes, }.Build() File_proto_luckygift_v1_luckygift_proto = out.File - file_proto_luckygift_v1_luckygift_proto_rawDesc = nil file_proto_luckygift_v1_luckygift_proto_goTypes = nil file_proto_luckygift_v1_luckygift_proto_depIdxs = nil } diff --git a/api/proto/luckygift/v1/luckygift_grpc.pb.go b/api/proto/luckygift/v1/luckygift_grpc.pb.go index 383aaa9f..5c8afac6 100644 --- a/api/proto/luckygift/v1/luckygift_grpc.pb.go +++ b/api/proto/luckygift/v1/luckygift_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/luckygift/v1/luckygift.proto package luckygiftv1 @@ -102,16 +102,16 @@ type LuckyGiftServiceServer interface { type UnimplementedLuckyGiftServiceServer struct{} func (UnimplementedLuckyGiftServiceServer) CheckLuckyGift(context.Context, *CheckLuckyGiftRequest) (*CheckLuckyGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckLuckyGift not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckLuckyGift not implemented") } func (UnimplementedLuckyGiftServiceServer) ExecuteLuckyGiftDraw(context.Context, *ExecuteLuckyGiftDrawRequest) (*ExecuteLuckyGiftDrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExecuteLuckyGiftDraw not implemented") + return nil, status.Error(codes.Unimplemented, "method ExecuteLuckyGiftDraw not implemented") } func (UnimplementedLuckyGiftServiceServer) BatchExecuteLuckyGiftDraw(context.Context, *BatchExecuteLuckyGiftDrawRequest) (*BatchExecuteLuckyGiftDrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchExecuteLuckyGiftDraw not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchExecuteLuckyGiftDraw not implemented") } func (UnimplementedLuckyGiftServiceServer) ExecuteExternalGiftDraw(context.Context, *ExternalGiftDrawRequest) (*ExternalGiftDrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExecuteExternalGiftDraw not implemented") + return nil, status.Error(codes.Unimplemented, "method ExecuteExternalGiftDraw not implemented") } func (UnimplementedLuckyGiftServiceServer) mustEmbedUnimplementedLuckyGiftServiceServer() {} func (UnimplementedLuckyGiftServiceServer) testEmbeddedByValue() {} @@ -124,7 +124,7 @@ type UnsafeLuckyGiftServiceServer interface { } func RegisterLuckyGiftServiceServer(s grpc.ServiceRegistrar, srv LuckyGiftServiceServer) { - // If the following call pancis, it indicates UnimplementedLuckyGiftServiceServer was + // If the following call panics, it indicates UnimplementedLuckyGiftServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -344,22 +344,22 @@ type AdminLuckyGiftServiceServer interface { type UnimplementedAdminLuckyGiftServiceServer struct{} func (UnimplementedAdminLuckyGiftServiceServer) GetLuckyGiftConfig(context.Context, *GetLuckyGiftConfigRequest) (*GetLuckyGiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLuckyGiftConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetLuckyGiftConfig not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) UpsertLuckyGiftConfig(context.Context, *UpsertLuckyGiftConfigRequest) (*UpsertLuckyGiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertLuckyGiftConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertLuckyGiftConfig not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) ListLuckyGiftConfigs(context.Context, *ListLuckyGiftConfigsRequest) (*ListLuckyGiftConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLuckyGiftConfigs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLuckyGiftConfigs not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) ListLuckyGiftDraws(context.Context, *ListLuckyGiftDrawsRequest) (*ListLuckyGiftDrawsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLuckyGiftDraws not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLuckyGiftDraws not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) GetLuckyGiftDrawSummary(context.Context, *GetLuckyGiftDrawSummaryRequest) (*GetLuckyGiftDrawSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLuckyGiftDrawSummary not implemented") + return nil, status.Error(codes.Unimplemented, "method GetLuckyGiftDrawSummary not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) ListLuckyGiftPoolBalances(context.Context, *ListLuckyGiftPoolBalancesRequest) (*ListLuckyGiftPoolBalancesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLuckyGiftPoolBalances not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLuckyGiftPoolBalances not implemented") } func (UnimplementedAdminLuckyGiftServiceServer) mustEmbedUnimplementedAdminLuckyGiftServiceServer() {} func (UnimplementedAdminLuckyGiftServiceServer) testEmbeddedByValue() {} @@ -372,7 +372,7 @@ type UnsafeAdminLuckyGiftServiceServer interface { } func RegisterAdminLuckyGiftServiceServer(s grpc.ServiceRegistrar, srv AdminLuckyGiftServiceServer) { - // If the following call pancis, it indicates UnimplementedAdminLuckyGiftServiceServer was + // If the following call panics, it indicates UnimplementedAdminLuckyGiftServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/robot/v1/robot.pb.go b/api/proto/robot/v1/robot.pb.go index 682ee00b..becc325c 100644 --- a/api/proto/robot/v1/robot.pb.go +++ b/api/proto/robot/v1/robot.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/robot/v1/robot.proto package robotv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,15 +23,14 @@ const ( // RequestMeta 是 robot-service 内部 RPC 的租户和追踪上下文;不要把 app_code 放到业务字段里绕过统一鉴权链路。 type RequestMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` + ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` + AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Caller string `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"` - ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - SentAtMs int64 `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` - AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RequestMeta) Reset() { @@ -99,21 +99,20 @@ func (x *RequestMeta) GetAppCode() string { } type Robot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RobotScope string `protobuf:"bytes,2,opt,name=robot_scope,json=robotScope,proto3" json:"robot_scope,omitempty"` - GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - RoomScene string `protobuf:"bytes,4,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - CreatedByAdminId int64 `protobuf:"varint,7,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - LastUsedAtMs int64 `protobuf:"varint,10,opt,name=last_used_at_ms,json=lastUsedAtMs,proto3" json:"last_used_at_ms,omitempty"` - UsedCount int64 `protobuf:"varint,11,opt,name=used_count,json=usedCount,proto3" json:"used_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RobotScope string `protobuf:"bytes,2,opt,name=robot_scope,json=robotScope,proto3" json:"robot_scope,omitempty"` + GameId string `protobuf:"bytes,3,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + RoomScene string `protobuf:"bytes,4,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + CreatedByAdminId int64 `protobuf:"varint,7,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + LastUsedAtMs int64 `protobuf:"varint,10,opt,name=last_used_at_ms,json=lastUsedAtMs,proto3" json:"last_used_at_ms,omitempty"` + UsedCount int64 `protobuf:"varint,11,opt,name=used_count,json=usedCount,proto3" json:"used_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Robot) Reset() { @@ -224,15 +223,14 @@ func (x *Robot) GetUsedCount() int64 { } type ListGameRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGameRobotsRequest) Reset() { @@ -301,13 +299,12 @@ func (x *ListGameRobotsRequest) GetCursor() string { } type ListGameRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGameRobotsResponse) Reset() { @@ -362,13 +359,12 @@ func (x *ListGameRobotsResponse) GetServerTimeMs() int64 { } type RegisterGameRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterGameRobotsRequest) Reset() { @@ -423,12 +419,11 @@ func (x *RegisterGameRobotsRequest) GetUserIds() []int64 { } type RegisterGameRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterGameRobotsResponse) Reset() { @@ -476,15 +471,14 @@ func (x *RegisterGameRobotsResponse) GetServerTimeMs() int64 { } type PickGameRobotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` - SelectedAtMs int64 `protobuf:"varint,4,opt,name=selected_at_ms,json=selectedAtMs,proto3" json:"selected_at_ms,omitempty"` - ExcludeUserIds []int64 `protobuf:"varint,5,rep,packed,name=exclude_user_ids,json=excludeUserIds,proto3" json:"exclude_user_ids,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + MatchId string `protobuf:"bytes,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + SelectedAtMs int64 `protobuf:"varint,4,opt,name=selected_at_ms,json=selectedAtMs,proto3" json:"selected_at_ms,omitempty"` + ExcludeUserIds []int64 `protobuf:"varint,5,rep,packed,name=exclude_user_ids,json=excludeUserIds,proto3" json:"exclude_user_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PickGameRobotRequest) Reset() { @@ -553,12 +547,11 @@ func (x *PickGameRobotRequest) GetExcludeUserIds() []int64 { } type GameRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robot *Robot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robot *Robot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GameRobotResponse) Reset() { @@ -606,14 +599,13 @@ func (x *GameRobotResponse) GetServerTimeMs() int64 { } type SetGameRobotStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetGameRobotStatusRequest) Reset() { @@ -675,13 +667,12 @@ func (x *SetGameRobotStatusRequest) GetStatus() string { } type DeleteGameRobotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - GameId string `protobuf:"bytes,2,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteGameRobotRequest) Reset() { @@ -736,12 +727,11 @@ func (x *DeleteGameRobotRequest) GetUserId() int64 { } type DeleteGameRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteGameRobotResponse) Reset() { @@ -789,15 +779,14 @@ func (x *DeleteGameRobotResponse) GetServerTimeMs() int64 { } type ListRoomRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomRobotsRequest) Reset() { @@ -866,13 +855,12 @@ func (x *ListRoomRobotsRequest) GetCursor() string { } type ListRoomRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomRobotsResponse) Reset() { @@ -927,13 +915,12 @@ func (x *ListRoomRobotsResponse) GetServerTimeMs() int64 { } type RegisterRoomRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterRoomRobotsRequest) Reset() { @@ -988,12 +975,11 @@ func (x *RegisterRoomRobotsRequest) GetUserIds() []int64 { } type RegisterRoomRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robots []*Robot `protobuf:"bytes,1,rep,name=robots,proto3" json:"robots,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RegisterRoomRobotsResponse) Reset() { @@ -1041,14 +1027,13 @@ func (x *RegisterRoomRobotsResponse) GetServerTimeMs() int64 { } type SetRoomRobotStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomRobotStatusRequest) Reset() { @@ -1110,13 +1095,12 @@ func (x *SetRoomRobotStatusRequest) GetStatus() string { } type DeleteRoomRobotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRoomRobotRequest) Reset() { @@ -1171,12 +1155,11 @@ func (x *DeleteRoomRobotRequest) GetUserId() int64 { } type DeleteRoomRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRoomRobotResponse) Reset() { @@ -1224,14 +1207,13 @@ func (x *DeleteRoomRobotResponse) GetServerTimeMs() int64 { } type PickRoomRobotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + SelectedAtMs int64 `protobuf:"varint,4,opt,name=selected_at_ms,json=selectedAtMs,proto3" json:"selected_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomScene string `protobuf:"bytes,2,opt,name=room_scene,json=roomScene,proto3" json:"room_scene,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - SelectedAtMs int64 `protobuf:"varint,4,opt,name=selected_at_ms,json=selectedAtMs,proto3" json:"selected_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PickRoomRobotRequest) Reset() { @@ -1293,12 +1275,11 @@ func (x *PickRoomRobotRequest) GetSelectedAtMs() int64 { } type RoomRobotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Robot *Robot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Robot *Robot `protobuf:"bytes,1,opt,name=robot,proto3" json:"robot,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRobotResponse) Reset() { @@ -1347,276 +1328,136 @@ func (x *RoomRobotResponse) GetServerTimeMs() int64 { var File_proto_robot_v1_robot_proto protoreflect.FileDescriptor -var file_proto_robot_v1_robot_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x22, 0xa1, 0x01, 0x0a, - 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x73, 0x65, 0x6e, 0x74, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, - 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0xe9, 0x02, 0x0a, 0x05, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x25, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xae, 0x01, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x8e, 0x01, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, - 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, - 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x80, - 0x01, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, - 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x22, 0x71, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2d, 0x0a, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x14, 0x50, 0x69, 0x63, 0x6b, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x73, 0x22, 0x66, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x05, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x19, 0x53, - 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x7b, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x59, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb4, 0x01, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, - 0x63, 0x65, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x6d, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, - 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x71, 0x0a, 0x1a, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x52, 0x06, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, - 0x9c, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x81, - 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x59, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xa5, 0x01, - 0x0a, 0x14, 0x50, 0x69, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, - 0x6d, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x66, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x52, 0x05, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x32, 0x82, 0x04, - 0x0a, 0x10, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x47, - 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x47, 0x61, - 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x58, 0x0a, 0x0d, 0x50, 0x69, 0x63, 0x6b, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x69, 0x63, 0x6b, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x12, 0x53, 0x65, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, - 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x32, 0x82, 0x04, 0x0a, 0x10, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x29, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x50, 0x69, 0x63, 0x6b, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x62, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_robot_v1_robot_proto_rawDesc = "" + + "\n" + + "\x1aproto/robot/v1/robot.proto\x12\x0ehyapp.robot.v1\"\xa1\x01\n" + + "\vRequestMeta\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x16\n" + + "\x06caller\x18\x02 \x01(\tR\x06caller\x12\"\n" + + "\ractor_user_id\x18\x03 \x01(\x03R\vactorUserId\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\x04 \x01(\x03R\bsentAtMs\x12\x19\n" + + "\bapp_code\x18\x05 \x01(\tR\aappCode\"\xe9\x02\n" + + "\x05Robot\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1f\n" + + "\vrobot_scope\x18\x02 \x01(\tR\n" + + "robotScope\x12\x17\n" + + "\agame_id\x18\x03 \x01(\tR\x06gameId\x12\x1d\n" + + "\n" + + "room_scene\x18\x04 \x01(\tR\troomScene\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12-\n" + + "\x13created_by_admin_id\x18\a \x01(\x03R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\x12%\n" + + "\x0flast_used_at_ms\x18\n" + + " \x01(\x03R\flastUsedAtMs\x12\x1d\n" + + "\n" + + "used_count\x18\v \x01(\x03R\tusedCount\"\xae\x01\n" + + "\x15ListGameRobotsRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\"\x8e\x01\n" + + "\x16ListGameRobotsResponse\x12-\n" + + "\x06robots\x18\x01 \x03(\v2\x15.hyapp.robot.v1.RobotR\x06robots\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x80\x01\n" + + "\x19RegisterGameRobotsRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x19\n" + + "\buser_ids\x18\x03 \x03(\x03R\auserIds\"q\n" + + "\x1aRegisterGameRobotsResponse\x12-\n" + + "\x06robots\x18\x01 \x03(\v2\x15.hyapp.robot.v1.RobotR\x06robots\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xcb\x01\n" + + "\x14PickGameRobotRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\tR\amatchId\x12$\n" + + "\x0eselected_at_ms\x18\x04 \x01(\x03R\fselectedAtMs\x12(\n" + + "\x10exclude_user_ids\x18\x05 \x03(\x03R\x0eexcludeUserIds\"f\n" + + "\x11GameRobotResponse\x12+\n" + + "\x05robot\x18\x01 \x01(\v2\x15.hyapp.robot.v1.RobotR\x05robot\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x96\x01\n" + + "\x19SetGameRobotStatusRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\"{\n" + + "\x16DeleteGameRobotRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x17\n" + + "\agame_id\x18\x02 \x01(\tR\x06gameId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"Y\n" + + "\x17DeleteGameRobotResponse\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb4\x01\n" + + "\x15ListRoomRobotsRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "room_scene\x18\x02 \x01(\tR\troomScene\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\"\x8e\x01\n" + + "\x16ListRoomRobotsResponse\x12-\n" + + "\x06robots\x18\x01 \x03(\v2\x15.hyapp.robot.v1.RobotR\x06robots\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x86\x01\n" + + "\x19RegisterRoomRobotsRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "room_scene\x18\x02 \x01(\tR\troomScene\x12\x19\n" + + "\buser_ids\x18\x03 \x03(\x03R\auserIds\"q\n" + + "\x1aRegisterRoomRobotsResponse\x12-\n" + + "\x06robots\x18\x01 \x03(\v2\x15.hyapp.robot.v1.RobotR\x06robots\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x9c\x01\n" + + "\x19SetRoomRobotStatusRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "room_scene\x18\x02 \x01(\tR\troomScene\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\"\x81\x01\n" + + "\x16DeleteRoomRobotRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "room_scene\x18\x02 \x01(\tR\troomScene\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"Y\n" + + "\x17DeleteRoomRobotResponse\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xa5\x01\n" + + "\x14PickRoomRobotRequest\x12/\n" + + "\x04meta\x18\x01 \x01(\v2\x1b.hyapp.robot.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "room_scene\x18\x02 \x01(\tR\troomScene\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12$\n" + + "\x0eselected_at_ms\x18\x04 \x01(\x03R\fselectedAtMs\"f\n" + + "\x11RoomRobotResponse\x12+\n" + + "\x05robot\x18\x01 \x01(\v2\x15.hyapp.robot.v1.RobotR\x05robot\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs2\x82\x04\n" + + "\x10GameRobotService\x12_\n" + + "\x0eListGameRobots\x12%.hyapp.robot.v1.ListGameRobotsRequest\x1a&.hyapp.robot.v1.ListGameRobotsResponse\x12k\n" + + "\x12RegisterGameRobots\x12).hyapp.robot.v1.RegisterGameRobotsRequest\x1a*.hyapp.robot.v1.RegisterGameRobotsResponse\x12X\n" + + "\rPickGameRobot\x12$.hyapp.robot.v1.PickGameRobotRequest\x1a!.hyapp.robot.v1.GameRobotResponse\x12b\n" + + "\x12SetGameRobotStatus\x12).hyapp.robot.v1.SetGameRobotStatusRequest\x1a!.hyapp.robot.v1.GameRobotResponse\x12b\n" + + "\x0fDeleteGameRobot\x12&.hyapp.robot.v1.DeleteGameRobotRequest\x1a'.hyapp.robot.v1.DeleteGameRobotResponse2\x82\x04\n" + + "\x10RoomRobotService\x12_\n" + + "\x0eListRoomRobots\x12%.hyapp.robot.v1.ListRoomRobotsRequest\x1a&.hyapp.robot.v1.ListRoomRobotsResponse\x12k\n" + + "\x12RegisterRoomRobots\x12).hyapp.robot.v1.RegisterRoomRobotsRequest\x1a*.hyapp.robot.v1.RegisterRoomRobotsResponse\x12X\n" + + "\rPickRoomRobot\x12$.hyapp.robot.v1.PickRoomRobotRequest\x1a!.hyapp.robot.v1.RoomRobotResponse\x12b\n" + + "\x12SetRoomRobotStatus\x12).hyapp.robot.v1.SetRoomRobotStatusRequest\x1a!.hyapp.robot.v1.RoomRobotResponse\x12b\n" + + "\x0fDeleteRoomRobot\x12&.hyapp.robot.v1.DeleteRoomRobotRequest\x1a'.hyapp.robot.v1.DeleteRoomRobotResponseB(Z&hyapp.local/api/proto/robot/v1;robotv1b\x06proto3" var ( file_proto_robot_v1_robot_proto_rawDescOnce sync.Once - file_proto_robot_v1_robot_proto_rawDescData = file_proto_robot_v1_robot_proto_rawDesc + file_proto_robot_v1_robot_proto_rawDescData []byte ) func file_proto_robot_v1_robot_proto_rawDescGZIP() []byte { file_proto_robot_v1_robot_proto_rawDescOnce.Do(func() { - file_proto_robot_v1_robot_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_robot_v1_robot_proto_rawDescData) + file_proto_robot_v1_robot_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_robot_v1_robot_proto_rawDesc), len(file_proto_robot_v1_robot_proto_rawDesc))) }) return file_proto_robot_v1_robot_proto_rawDescData } @@ -1697,7 +1538,7 @@ func file_proto_robot_v1_robot_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_robot_v1_robot_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_robot_v1_robot_proto_rawDesc), len(file_proto_robot_v1_robot_proto_rawDesc)), NumEnums: 0, NumMessages: 20, NumExtensions: 0, @@ -1708,7 +1549,6 @@ func file_proto_robot_v1_robot_proto_init() { MessageInfos: file_proto_robot_v1_robot_proto_msgTypes, }.Build() File_proto_robot_v1_robot_proto = out.File - file_proto_robot_v1_robot_proto_rawDesc = nil file_proto_robot_v1_robot_proto_goTypes = nil file_proto_robot_v1_robot_proto_depIdxs = nil } diff --git a/api/proto/robot/v1/robot_grpc.pb.go b/api/proto/robot/v1/robot_grpc.pb.go index 0442dbb8..c1bb2b2e 100644 --- a/api/proto/robot/v1/robot_grpc.pb.go +++ b/api/proto/robot/v1/robot_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/robot/v1/robot.proto package robotv1 @@ -115,19 +115,19 @@ type GameRobotServiceServer interface { type UnimplementedGameRobotServiceServer struct{} func (UnimplementedGameRobotServiceServer) ListGameRobots(context.Context, *ListGameRobotsRequest) (*ListGameRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListGameRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method ListGameRobots not implemented") } func (UnimplementedGameRobotServiceServer) RegisterGameRobots(context.Context, *RegisterGameRobotsRequest) (*RegisterGameRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RegisterGameRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method RegisterGameRobots not implemented") } func (UnimplementedGameRobotServiceServer) PickGameRobot(context.Context, *PickGameRobotRequest) (*GameRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PickGameRobot not implemented") + return nil, status.Error(codes.Unimplemented, "method PickGameRobot not implemented") } func (UnimplementedGameRobotServiceServer) SetGameRobotStatus(context.Context, *SetGameRobotStatusRequest) (*GameRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetGameRobotStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetGameRobotStatus not implemented") } func (UnimplementedGameRobotServiceServer) DeleteGameRobot(context.Context, *DeleteGameRobotRequest) (*DeleteGameRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteGameRobot not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteGameRobot not implemented") } func (UnimplementedGameRobotServiceServer) mustEmbedUnimplementedGameRobotServiceServer() {} func (UnimplementedGameRobotServiceServer) testEmbeddedByValue() {} @@ -140,7 +140,7 @@ type UnsafeGameRobotServiceServer interface { } func RegisterGameRobotServiceServer(s grpc.ServiceRegistrar, srv GameRobotServiceServer) { - // If the following call pancis, it indicates UnimplementedGameRobotServiceServer was + // If the following call panics, it indicates UnimplementedGameRobotServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -369,19 +369,19 @@ type RoomRobotServiceServer interface { type UnimplementedRoomRobotServiceServer struct{} func (UnimplementedRoomRobotServiceServer) ListRoomRobots(context.Context, *ListRoomRobotsRequest) (*ListRoomRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomRobots not implemented") } func (UnimplementedRoomRobotServiceServer) RegisterRoomRobots(context.Context, *RegisterRoomRobotsRequest) (*RegisterRoomRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RegisterRoomRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method RegisterRoomRobots not implemented") } func (UnimplementedRoomRobotServiceServer) PickRoomRobot(context.Context, *PickRoomRobotRequest) (*RoomRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PickRoomRobot not implemented") + return nil, status.Error(codes.Unimplemented, "method PickRoomRobot not implemented") } func (UnimplementedRoomRobotServiceServer) SetRoomRobotStatus(context.Context, *SetRoomRobotStatusRequest) (*RoomRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetRoomRobotStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetRoomRobotStatus not implemented") } func (UnimplementedRoomRobotServiceServer) DeleteRoomRobot(context.Context, *DeleteRoomRobotRequest) (*DeleteRoomRobotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteRoomRobot not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteRoomRobot not implemented") } func (UnimplementedRoomRobotServiceServer) mustEmbedUnimplementedRoomRobotServiceServer() {} func (UnimplementedRoomRobotServiceServer) testEmbeddedByValue() {} @@ -394,7 +394,7 @@ type UnsafeRoomRobotServiceServer interface { } func RegisterRoomRobotServiceServer(s grpc.ServiceRegistrar, srv RoomRobotServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomRobotServiceServer was + // If the following call panics, it indicates UnimplementedRoomRobotServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/room/v1/room.pb.go b/api/proto/room/v1/room.pb.go index fb31c987..39c3650c 100644 --- a/api/proto/room/v1/room.pb.go +++ b/api/proto/room/v1/room.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/room/v1/room.proto package roomv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,13 +24,10 @@ const ( // RequestMeta 固定承载所有命令的调用元信息。 // room-service 用它串起幂等、追踪、路由和业务操作者身份。 type RequestMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` // room_id 是命令路由、持久化和腾讯 IM/RTC 映射共同依赖的必填字段。 // CreateRoom 时必须满足 ^[A-Za-z0-9_-]{1,48}$。 RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` @@ -37,6 +35,8 @@ type RequestMeta struct { SessionId string `protobuf:"bytes,6,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` SentAtMs int64 `protobuf:"varint,7,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"` AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RequestMeta) Reset() { @@ -127,13 +127,12 @@ func (x *RequestMeta) GetAppCode() string { // CommandResult 统一返回命令是否真正落地,以及落地后的房间版本。 type CommandResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Applied bool `protobuf:"varint,1,opt,name=applied,proto3" json:"applied,omitempty"` + RoomVersion int64 `protobuf:"varint,2,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Applied bool `protobuf:"varint,1,opt,name=applied,proto3" json:"applied,omitempty"` - RoomVersion int64 `protobuf:"varint,2,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CommandResult) Reset() { @@ -189,15 +188,14 @@ func (x *CommandResult) GetServerTimeMs() int64 { // RoomUser 只表达 room-service 需要保存的房间内轻量用户态。 type RoomUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + JoinedAtMs int64 `protobuf:"varint,3,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` + LastSeenAtMs int64 `protobuf:"varint,4,opt,name=last_seen_at_ms,json=lastSeenAtMs,proto3" json:"last_seen_at_ms,omitempty"` + GiftValue int64 `protobuf:"varint,5,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - JoinedAtMs int64 `protobuf:"varint,3,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` - LastSeenAtMs int64 `protobuf:"varint,4,opt,name=last_seen_at_ms,json=lastSeenAtMs,proto3" json:"last_seen_at_ms,omitempty"` - GiftValue int64 `protobuf:"varint,5,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomUser) Reset() { @@ -268,17 +266,16 @@ func (x *RoomUser) GetGiftValue() int64 { // RoomOnlineUser 是在线用户列表的展示读模型。 // role 保留进房 presence 语义;room_role 只表达房间管理员身份;is_owner 单独表达房主身份。 type RoomOnlineUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + RoomRole string `protobuf:"bytes,3,opt,name=room_role,json=roomRole,proto3" json:"room_role,omitempty"` + GiftValue int64 `protobuf:"varint,4,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + JoinedAtMs int64 `protobuf:"varint,5,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` + LastSeenAtMs int64 `protobuf:"varint,6,opt,name=last_seen_at_ms,json=lastSeenAtMs,proto3" json:"last_seen_at_ms,omitempty"` + IsOwner bool `protobuf:"varint,7,opt,name=is_owner,json=isOwner,proto3" json:"is_owner,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - RoomRole string `protobuf:"bytes,3,opt,name=room_role,json=roomRole,proto3" json:"room_role,omitempty"` - GiftValue int64 `protobuf:"varint,4,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` - JoinedAtMs int64 `protobuf:"varint,5,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` - LastSeenAtMs int64 `protobuf:"varint,6,opt,name=last_seen_at_ms,json=lastSeenAtMs,proto3" json:"last_seen_at_ms,omitempty"` - IsOwner bool `protobuf:"varint,7,opt,name=is_owner,json=isOwner,proto3" json:"is_owner,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomOnlineUser) Reset() { @@ -362,13 +359,10 @@ func (x *RoomOnlineUser) GetIsOwner() bool { // SeatState 表达单个麦位当前占用和 RTC 发流确认状态。 type SeatState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SeatNo int32 `protobuf:"varint,1,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SeatNo int32 `protobuf:"varint,1,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` // publish_state 为空表示空麦或未进入发流流程;上麦后先进入 pending_publish,确认后进入 publishing。 PublishState string `protobuf:"bytes,4,opt,name=publish_state,json=publishState,proto3" json:"publish_state,omitempty"` // mic_session_id 是单次上麦发流会话 ID;所有客户端确认或 RTC webhook 必须带回它。 @@ -386,7 +380,9 @@ type SeatState struct { // mic_heartbeat_at_ms 是当前 mic_session 最近一次服务端接受麦上心跳的 UTC epoch ms。 MicHeartbeatAtMs int64 `protobuf:"varint,11,opt,name=mic_heartbeat_at_ms,json=micHeartbeatAtMs,proto3" json:"mic_heartbeat_at_ms,omitempty"` // gift_value 是当前房间内该麦位用户收到的礼物热度累计,用户离房后清零。 - GiftValue int64 `protobuf:"varint,12,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + GiftValue int64 `protobuf:"varint,12,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SeatState) Reset() { @@ -505,14 +501,13 @@ func (x *SeatState) GetGiftValue() int64 { // RankItem 表达房间内本地礼物榜项目。 type RankItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` + GiftValue int64 `protobuf:"varint,3,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,4,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` - GiftValue int64 `protobuf:"varint,3,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,4,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RankItem) Reset() { @@ -575,15 +570,14 @@ func (x *RankItem) GetUpdatedAtMs() int64 { // RoomContributionRankItem 表达房间内某个周期的送礼贡献用户排行项。 type RoomContributionRankItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` + GiftValue int64 `protobuf:"varint,4,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,5,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` - GiftValue int64 `protobuf:"varint,4,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,5,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomContributionRankItem) Reset() { @@ -653,31 +647,30 @@ func (x *RoomContributionRankItem) GetUpdatedAtMs() int64 { // LuckyGiftDrawResult 是 SendGift 同步返回给当前送礼用户的幸运礼物抽奖表现。 type LuckyGiftDrawResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - RuleVersion int64 `protobuf:"varint,6,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` - ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` - SelectedTierId string `protobuf:"bytes,8,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,9,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - BaseRewardCoins int64 `protobuf:"varint,10,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` - EffectiveRewardCoins int64 `protobuf:"varint,11,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` - RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` - StageFeedback bool `protobuf:"varint,13,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` - HighMultiplier bool `protobuf:"varint,14,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,17,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PoolId string `protobuf:"bytes,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + RuleVersion int64 `protobuf:"varint,6,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"` + ExperiencePool string `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"` + SelectedTierId string `protobuf:"bytes,8,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,9,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + BaseRewardCoins int64 `protobuf:"varint,10,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"` + EffectiveRewardCoins int64 `protobuf:"varint,11,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"` + RewardStatus string `protobuf:"bytes,12,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"` + StageFeedback bool `protobuf:"varint,13,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"` + HighMultiplier bool `protobuf:"varint,14,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + WalletTransactionId string `protobuf:"bytes,16,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,17,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` // target_user_id 是本次幸运礼物抽奖对应的收礼用户;多目标送礼用它关联结果。 TargetUserId int64 `protobuf:"varint,18,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // hits 只包含 gift_count 微批中实际中奖的位置;旧客户端忽略该追加字段。 - Hits []*SendGiftLuckyHit `protobuf:"bytes,19,rep,name=hits,proto3" json:"hits,omitempty"` + Hits []*SendGiftLuckyHit `protobuf:"bytes,19,rep,name=hits,proto3" json:"hits,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LuckyGiftDrawResult) Reset() { @@ -845,17 +838,16 @@ func (x *LuckyGiftDrawResult) GetHits() []*SendGiftLuckyHit { // RoomRocketRewardItem 是后台配置给客户端展示的火箭奖励候选项。 type RoomRocketRewardItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RewardItemId string `protobuf:"bytes,1,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` - ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - Weight int64 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"` - DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - IconUrl string `protobuf:"bytes,5,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RewardItemId string `protobuf:"bytes,1,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` + ResourceGroupId int64 `protobuf:"varint,2,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + Weight int64 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"` + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + IconUrl string `protobuf:"bytes,5,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` // quantity 表示该奖项在一次火箭发射中最多发给多少个在房用户;为空或 0 时兼容旧配置按 1 份处理。 - Quantity int64 `protobuf:"varint,6,opt,name=quantity,proto3" json:"quantity,omitempty"` + Quantity int64 `protobuf:"varint,6,opt,name=quantity,proto3" json:"quantity,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketRewardItem) Reset() { @@ -932,10 +924,7 @@ func (x *RoomRocketRewardItem) GetQuantity() int64 { // RoomRocketLevel 暴露单个等级火箭的物料、阈值和三类奖励池。 type RoomRocketLevel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` FuelThreshold int64 `protobuf:"varint,2,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` CoverUrl string `protobuf:"bytes,3,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` @@ -945,6 +934,8 @@ type RoomRocketLevel struct { InRoomRewards []*RoomRocketRewardItem `protobuf:"bytes,7,rep,name=in_room_rewards,json=inRoomRewards,proto3" json:"in_room_rewards,omitempty"` Top1Rewards []*RoomRocketRewardItem `protobuf:"bytes,8,rep,name=top1_rewards,json=top1Rewards,proto3" json:"top1_rewards,omitempty"` IgniterRewards []*RoomRocketRewardItem `protobuf:"bytes,9,rep,name=igniter_rewards,json=igniterRewards,proto3" json:"igniter_rewards,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketLevel) Reset() { @@ -1042,18 +1033,17 @@ func (x *RoomRocketLevel) GetIgniterRewards() []*RoomRocketRewardItem { // RoomRocketRewardGrant 是一次火箭发射后给某个用户结算出的具体奖励。 type RoomRocketRewardGrant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RewardRole string `protobuf:"bytes,1,opt,name=reward_role,json=rewardRole,proto3" json:"reward_role,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RewardItemId string `protobuf:"bytes,3,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` - ResourceGroupId int64 `protobuf:"varint,4,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` - DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` - GrantId string `protobuf:"bytes,7,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RewardRole string `protobuf:"bytes,1,opt,name=reward_role,json=rewardRole,proto3" json:"reward_role,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RewardItemId string `protobuf:"bytes,3,opt,name=reward_item_id,json=rewardItemId,proto3" json:"reward_item_id,omitempty"` + ResourceGroupId int64 `protobuf:"varint,4,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` + DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"` + GrantId string `protobuf:"bytes,7,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketRewardGrant) Reset() { @@ -1144,13 +1134,12 @@ func (x *RoomRocketRewardGrant) GetStatus() string { // RoomRocketContribution 是当前火箭等级内的实际加燃料贡献累计。 type RoomRocketContribution struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Fuel int64 `protobuf:"varint,2,opt,name=fuel,proto3" json:"fuel,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Fuel int64 `protobuf:"varint,2,opt,name=fuel,proto3" json:"fuel,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRocketContribution) Reset() { @@ -1206,20 +1195,19 @@ func (x *RoomRocketContribution) GetUpdatedAtMs() int64 { // RoomRocketPendingLaunch 是已经点火、等待延迟发射的单枚火箭。 type RoomRocketPendingLaunch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + FuelThreshold int64 `protobuf:"varint,3,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` + IgnitedAtMs int64 `protobuf:"varint,4,opt,name=ignited_at_ms,json=ignitedAtMs,proto3" json:"ignited_at_ms,omitempty"` + LaunchAtMs int64 `protobuf:"varint,5,opt,name=launch_at_ms,json=launchAtMs,proto3" json:"launch_at_ms,omitempty"` + ResetAtMs int64 `protobuf:"varint,6,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` + Top1UserId int64 `protobuf:"varint,7,opt,name=top1_user_id,json=top1UserId,proto3" json:"top1_user_id,omitempty"` + IgniterUserId int64 `protobuf:"varint,8,opt,name=igniter_user_id,json=igniterUserId,proto3" json:"igniter_user_id,omitempty"` + ConfigVersion int64 `protobuf:"varint,9,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + CoverUrl string `protobuf:"bytes,10,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` unknownFields protoimpl.UnknownFields - - RocketId string `protobuf:"bytes,1,opt,name=rocket_id,json=rocketId,proto3" json:"rocket_id,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - FuelThreshold int64 `protobuf:"varint,3,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` - IgnitedAtMs int64 `protobuf:"varint,4,opt,name=ignited_at_ms,json=ignitedAtMs,proto3" json:"ignited_at_ms,omitempty"` - LaunchAtMs int64 `protobuf:"varint,5,opt,name=launch_at_ms,json=launchAtMs,proto3" json:"launch_at_ms,omitempty"` - ResetAtMs int64 `protobuf:"varint,6,opt,name=reset_at_ms,json=resetAtMs,proto3" json:"reset_at_ms,omitempty"` - Top1UserId int64 `protobuf:"varint,7,opt,name=top1_user_id,json=top1UserId,proto3" json:"top1_user_id,omitempty"` - IgniterUserId int64 `protobuf:"varint,8,opt,name=igniter_user_id,json=igniterUserId,proto3" json:"igniter_user_id,omitempty"` - ConfigVersion int64 `protobuf:"varint,9,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` - CoverUrl string `protobuf:"bytes,10,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRocketPendingLaunch) Reset() { @@ -1324,10 +1312,7 @@ func (x *RoomRocketPendingLaunch) GetCoverUrl() string { // RoomRocketState 是 Room Cell 持有并随快照恢复的当前火箭状态。 type RoomRocketState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` CurrentLevel int32 `protobuf:"varint,1,opt,name=current_level,json=currentLevel,proto3" json:"current_level,omitempty"` CurrentFuel int64 `protobuf:"varint,2,opt,name=current_fuel,json=currentFuel,proto3" json:"current_fuel,omitempty"` FuelThreshold int64 `protobuf:"varint,3,opt,name=fuel_threshold,json=fuelThreshold,proto3" json:"fuel_threshold,omitempty"` @@ -1343,6 +1328,8 @@ type RoomRocketState struct { LastRewards []*RoomRocketRewardGrant `protobuf:"bytes,13,rep,name=last_rewards,json=lastRewards,proto3" json:"last_rewards,omitempty"` PendingLaunches []*RoomRocketPendingLaunch `protobuf:"bytes,14,rep,name=pending_launches,json=pendingLaunches,proto3" json:"pending_launches,omitempty"` CurrentContributions []*RoomRocketContribution `protobuf:"bytes,15,rep,name=current_contributions,json=currentContributions,proto3" json:"current_contributions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketState) Reset() { @@ -1482,18 +1469,17 @@ func (x *RoomRocketState) GetCurrentContributions() []*RoomRocketContribution { // RoomRocketInfo 是 App 初始化火箭 UI 的完整读模型。 type RoomRocketInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - Levels []*RoomRocketLevel `protobuf:"bytes,2,rep,name=levels,proto3" json:"levels,omitempty"` - State *RoomRocketState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - BroadcastScope string `protobuf:"bytes,5,opt,name=broadcast_scope,json=broadcastScope,proto3" json:"broadcast_scope,omitempty"` - LaunchDelayMs int64 `protobuf:"varint,6,opt,name=launch_delay_ms,json=launchDelayMs,proto3" json:"launch_delay_ms,omitempty"` - BroadcastDelayMs int64 `protobuf:"varint,7,opt,name=broadcast_delay_ms,json=broadcastDelayMs,proto3" json:"broadcast_delay_ms,omitempty"` - RewardStackPolicy string `protobuf:"bytes,8,opt,name=reward_stack_policy,json=rewardStackPolicy,proto3" json:"reward_stack_policy,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + Levels []*RoomRocketLevel `protobuf:"bytes,2,rep,name=levels,proto3" json:"levels,omitempty"` + State *RoomRocketState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + BroadcastScope string `protobuf:"bytes,5,opt,name=broadcast_scope,json=broadcastScope,proto3" json:"broadcast_scope,omitempty"` + LaunchDelayMs int64 `protobuf:"varint,6,opt,name=launch_delay_ms,json=launchDelayMs,proto3" json:"launch_delay_ms,omitempty"` + BroadcastDelayMs int64 `protobuf:"varint,7,opt,name=broadcast_delay_ms,json=broadcastDelayMs,proto3" json:"broadcast_delay_ms,omitempty"` + RewardStackPolicy string `protobuf:"bytes,8,opt,name=reward_stack_policy,json=rewardStackPolicy,proto3" json:"reward_stack_policy,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomRocketInfo) Reset() { @@ -1584,16 +1570,15 @@ func (x *RoomRocketInfo) GetRewardStackPolicy() string { // RoomRocketGiftFuelRule 是后台配置的礼物燃料覆盖规则。 type RoomRocketGiftFuelRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RuleId string `protobuf:"bytes,1,opt,name=rule_id,json=ruleId,proto3" json:"rule_id,omitempty"` + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftTypeCode string `protobuf:"bytes,3,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` + MultiplierPpm int64 `protobuf:"varint,4,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + FixedFuel int64 `protobuf:"varint,5,opt,name=fixed_fuel,json=fixedFuel,proto3" json:"fixed_fuel,omitempty"` + Excluded bool `protobuf:"varint,6,opt,name=excluded,proto3" json:"excluded,omitempty"` unknownFields protoimpl.UnknownFields - - RuleId string `protobuf:"bytes,1,opt,name=rule_id,json=ruleId,proto3" json:"rule_id,omitempty"` - GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftTypeCode string `protobuf:"bytes,3,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` - MultiplierPpm int64 `protobuf:"varint,4,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - FixedFuel int64 `protobuf:"varint,5,opt,name=fixed_fuel,json=fixedFuel,proto3" json:"fixed_fuel,omitempty"` - Excluded bool `protobuf:"varint,6,opt,name=excluded,proto3" json:"excluded,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomRocketGiftFuelRule) Reset() { @@ -1670,10 +1655,7 @@ func (x *RoomRocketGiftFuelRule) GetExcluded() bool { // AdminRoomRocketConfig 是后台管理读写的完整火箭配置。 type AdminRoomRocketConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` ConfigVersion int64 `protobuf:"varint,3,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` @@ -1688,6 +1670,8 @@ type AdminRoomRocketConfig struct { UpdatedByAdminId int64 `protobuf:"varint,12,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRoomRocketConfig) Reset() { @@ -1819,11 +1803,10 @@ func (x *AdminRoomRocketConfig) GetUpdatedAtMs() int64 { } type AdminGetRoomRocketConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomRocketConfigRequest) Reset() { @@ -1864,12 +1847,11 @@ func (x *AdminGetRoomRocketConfigRequest) GetMeta() *RequestMeta { } type AdminGetRoomRocketConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminRoomRocketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminRoomRocketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomRocketConfigResponse) Reset() { @@ -1917,13 +1899,12 @@ func (x *AdminGetRoomRocketConfigResponse) GetServerTimeMs() int64 { } type AdminUpdateRoomRocketConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *AdminRoomRocketConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + AdminId int64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *AdminRoomRocketConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - AdminId int64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomRocketConfigRequest) Reset() { @@ -1978,12 +1959,11 @@ func (x *AdminUpdateRoomRocketConfigRequest) GetAdminId() int64 { } type AdminUpdateRoomRocketConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminRoomRocketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminRoomRocketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomRocketConfigResponse) Reset() { @@ -2031,14 +2011,13 @@ func (x *AdminUpdateRoomRocketConfigResponse) GetServerTimeMs() int64 { } type AdminRoomSeatConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CandidateSeatCounts []int32 `protobuf:"varint,1,rep,packed,name=candidate_seat_counts,json=candidateSeatCounts,proto3" json:"candidate_seat_counts,omitempty"` - AllowedSeatCounts []int32 `protobuf:"varint,2,rep,packed,name=allowed_seat_counts,json=allowedSeatCounts,proto3" json:"allowed_seat_counts,omitempty"` - DefaultSeatCount int32 `protobuf:"varint,3,opt,name=default_seat_count,json=defaultSeatCount,proto3" json:"default_seat_count,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,4,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CandidateSeatCounts []int32 `protobuf:"varint,1,rep,packed,name=candidate_seat_counts,json=candidateSeatCounts,proto3" json:"candidate_seat_counts,omitempty"` + AllowedSeatCounts []int32 `protobuf:"varint,2,rep,packed,name=allowed_seat_counts,json=allowedSeatCounts,proto3" json:"allowed_seat_counts,omitempty"` + DefaultSeatCount int32 `protobuf:"varint,3,opt,name=default_seat_count,json=defaultSeatCount,proto3" json:"default_seat_count,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,4,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRoomSeatConfig) Reset() { @@ -2100,11 +2079,10 @@ func (x *AdminRoomSeatConfig) GetUpdatedAtMs() int64 { } type AdminGetRoomSeatConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomSeatConfigRequest) Reset() { @@ -2145,12 +2123,11 @@ func (x *AdminGetRoomSeatConfigRequest) GetMeta() *RequestMeta { } type AdminGetRoomSeatConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminRoomSeatConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminRoomSeatConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomSeatConfigResponse) Reset() { @@ -2198,13 +2175,12 @@ func (x *AdminGetRoomSeatConfigResponse) GetServerTimeMs() int64 { } type AdminUpdateRoomSeatConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AllowedSeatCounts []int32 `protobuf:"varint,2,rep,packed,name=allowed_seat_counts,json=allowedSeatCounts,proto3" json:"allowed_seat_counts,omitempty"` - DefaultSeatCount int32 `protobuf:"varint,3,opt,name=default_seat_count,json=defaultSeatCount,proto3" json:"default_seat_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AllowedSeatCounts []int32 `protobuf:"varint,2,rep,packed,name=allowed_seat_counts,json=allowedSeatCounts,proto3" json:"allowed_seat_counts,omitempty"` + DefaultSeatCount int32 `protobuf:"varint,3,opt,name=default_seat_count,json=defaultSeatCount,proto3" json:"default_seat_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomSeatConfigRequest) Reset() { @@ -2259,12 +2235,11 @@ func (x *AdminUpdateRoomSeatConfigRequest) GetDefaultSeatCount() int32 { } type AdminUpdateRoomSeatConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminRoomSeatConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminRoomSeatConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomSeatConfigResponse) Reset() { @@ -2312,12 +2287,11 @@ func (x *AdminUpdateRoomSeatConfigResponse) GetServerTimeMs() int64 { } type AdminHumanRoomRobotCountryPool struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + RobotUserIds []int64 `protobuf:"varint,2,rep,packed,name=robot_user_ids,json=robotUserIds,proto3" json:"robot_user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - RobotUserIds []int64 `protobuf:"varint,2,rep,packed,name=robot_user_ids,json=robotUserIds,proto3" json:"robot_user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminHumanRoomRobotCountryPool) Reset() { @@ -2365,14 +2339,13 @@ func (x *AdminHumanRoomRobotCountryPool) GetRobotUserIds() []int64 { } type AdminHumanRoomRobotCountryRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - MaxRoomCount int32 `protobuf:"varint,2,opt,name=max_room_count,json=maxRoomCount,proto3" json:"max_room_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + MaxRoomCount int32 `protobuf:"varint,2,opt,name=max_room_count,json=maxRoomCount,proto3" json:"max_room_count,omitempty"` // allowed_owner_ids 为空表示该国家扫描所有真人房;非空时只扫描房主展示短号/内部 owner_user_id 命中的房间。 AllowedOwnerIds []string `protobuf:"bytes,3,rep,name=allowed_owner_ids,json=allowedOwnerIds,proto3" json:"allowed_owner_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminHumanRoomRobotCountryRule) Reset() { @@ -2427,10 +2400,7 @@ func (x *AdminHumanRoomRobotCountryRule) GetAllowedOwnerIds() []string { } type AdminHumanRoomRobotConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` CandidateRoomMaxOnline int32 `protobuf:"varint,3,opt,name=candidate_room_max_online,json=candidateRoomMaxOnline,proto3" json:"candidate_room_max_online,omitempty"` @@ -2461,7 +2431,9 @@ type AdminHumanRoomRobotConfig struct { // country_limit_enabled 打开后只按 country_rules 中配置的国家进真人房。 CountryLimitEnabled bool `protobuf:"varint,27,opt,name=country_limit_enabled,json=countryLimitEnabled,proto3" json:"country_limit_enabled,omitempty"` // country_rules 配置每个国家最多同时进入几个真人房;空集合表示不进入任何国家。 - CountryRules []*AdminHumanRoomRobotCountryRule `protobuf:"bytes,28,rep,name=country_rules,json=countryRules,proto3" json:"country_rules,omitempty"` + CountryRules []*AdminHumanRoomRobotCountryRule `protobuf:"bytes,28,rep,name=country_rules,json=countryRules,proto3" json:"country_rules,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminHumanRoomRobotConfig) Reset() { @@ -2691,11 +2663,10 @@ func (x *AdminHumanRoomRobotConfig) GetCountryRules() []*AdminHumanRoomRobotCoun } type AdminGetHumanRoomRobotConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetHumanRoomRobotConfigRequest) Reset() { @@ -2736,12 +2707,11 @@ func (x *AdminGetHumanRoomRobotConfigRequest) GetMeta() *RequestMeta { } type AdminGetHumanRoomRobotConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminHumanRoomRobotConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminHumanRoomRobotConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetHumanRoomRobotConfigResponse) Reset() { @@ -2789,13 +2759,12 @@ func (x *AdminGetHumanRoomRobotConfigResponse) GetServerTimeMs() int64 { } type AdminUpdateHumanRoomRobotConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Config *AdminHumanRoomRobotConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Config *AdminHumanRoomRobotConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateHumanRoomRobotConfigRequest) Reset() { @@ -2850,12 +2819,11 @@ func (x *AdminUpdateHumanRoomRobotConfigRequest) GetAdminId() uint64 { } type AdminUpdateHumanRoomRobotConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *AdminHumanRoomRobotConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *AdminHumanRoomRobotConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateHumanRoomRobotConfigResponse) Reset() { @@ -2903,17 +2871,16 @@ func (x *AdminUpdateHumanRoomRobotConfigResponse) GetServerTimeMs() int64 { } type AdminRoomPinRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RoomShortId string `protobuf:"bytes,2,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RoomShortId string `protobuf:"bytes,2,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRoomPinRoom) Reset() { @@ -2996,24 +2963,23 @@ func (x *AdminRoomPinRoom) GetStatus() string { } type AdminRoomPin struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,2,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Weight int64 `protobuf:"varint,4,opt,name=weight,proto3" json:"weight,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - PinnedAtMs int64 `protobuf:"varint,6,opt,name=pinned_at_ms,json=pinnedAtMs,proto3" json:"pinned_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,7,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - CancelledAtMs int64 `protobuf:"varint,8,opt,name=cancelled_at_ms,json=cancelledAtMs,proto3" json:"cancelled_at_ms,omitempty"` - CreatedByAdminId uint64 `protobuf:"varint,9,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` - CancelledByAdminId uint64 `protobuf:"varint,10,opt,name=cancelled_by_admin_id,json=cancelledByAdminId,proto3" json:"cancelled_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - Room *AdminRoomPinRoom `protobuf:"bytes,13,opt,name=room,proto3" json:"room,omitempty"` - PinType string `protobuf:"bytes,14,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,2,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Weight int64 `protobuf:"varint,4,opt,name=weight,proto3" json:"weight,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + PinnedAtMs int64 `protobuf:"varint,6,opt,name=pinned_at_ms,json=pinnedAtMs,proto3" json:"pinned_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,7,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + CancelledAtMs int64 `protobuf:"varint,8,opt,name=cancelled_at_ms,json=cancelledAtMs,proto3" json:"cancelled_at_ms,omitempty"` + CreatedByAdminId uint64 `protobuf:"varint,9,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"` + CancelledByAdminId uint64 `protobuf:"varint,10,opt,name=cancelled_by_admin_id,json=cancelledByAdminId,proto3" json:"cancelled_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + Room *AdminRoomPinRoom `protobuf:"bytes,13,opt,name=room,proto3" json:"room,omitempty"` + PinType string `protobuf:"bytes,14,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRoomPin) Reset() { @@ -3145,17 +3111,16 @@ func (x *AdminRoomPin) GetPinType() string { } type AdminListRoomPinsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - VisibleRegionId int64 `protobuf:"varint,6,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - PinType string `protobuf:"bytes,7,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + VisibleRegionId int64 `protobuf:"varint,6,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + PinType string `protobuf:"bytes,7,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminListRoomPinsRequest) Reset() { @@ -3238,13 +3203,12 @@ func (x *AdminListRoomPinsRequest) GetPinType() string { } type AdminListRoomPinsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pins []*AdminRoomPin `protobuf:"bytes,1,rep,name=pins,proto3" json:"pins,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Pins []*AdminRoomPin `protobuf:"bytes,1,rep,name=pins,proto3" json:"pins,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminListRoomPinsResponse) Reset() { @@ -3299,18 +3263,17 @@ func (x *AdminListRoomPinsResponse) GetServerTimeMs() int64 { } type AdminCreateRoomPinRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Weight int64 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"` + DurationDays int64 `protobuf:"varint,4,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + AdminId uint64 `protobuf:"varint,5,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + PinnedAtMs int64 `protobuf:"varint,6,opt,name=pinned_at_ms,json=pinnedAtMs,proto3" json:"pinned_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,7,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + PinType string `protobuf:"bytes,8,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Weight int64 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"` - DurationDays int64 `protobuf:"varint,4,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` - AdminId uint64 `protobuf:"varint,5,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` - PinnedAtMs int64 `protobuf:"varint,6,opt,name=pinned_at_ms,json=pinnedAtMs,proto3" json:"pinned_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,7,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - PinType string `protobuf:"bytes,8,opt,name=pin_type,json=pinType,proto3" json:"pin_type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCreateRoomPinRequest) Reset() { @@ -3400,12 +3363,11 @@ func (x *AdminCreateRoomPinRequest) GetPinType() string { } type AdminCreateRoomPinResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pin *AdminRoomPin `protobuf:"bytes,1,opt,name=pin,proto3" json:"pin,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Pin *AdminRoomPin `protobuf:"bytes,1,opt,name=pin,proto3" json:"pin,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCreateRoomPinResponse) Reset() { @@ -3453,13 +3415,12 @@ func (x *AdminCreateRoomPinResponse) GetServerTimeMs() int64 { } type AdminCancelRoomPinRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + PinId int64 `protobuf:"varint,2,opt,name=pin_id,json=pinId,proto3" json:"pin_id,omitempty"` + AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - PinId int64 `protobuf:"varint,2,opt,name=pin_id,json=pinId,proto3" json:"pin_id,omitempty"` - AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCancelRoomPinRequest) Reset() { @@ -3514,12 +3475,11 @@ func (x *AdminCancelRoomPinRequest) GetAdminId() uint64 { } type AdminCancelRoomPinResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Pin *AdminRoomPin `protobuf:"bytes,1,opt,name=pin,proto3" json:"pin,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Pin *AdminRoomPin `protobuf:"bytes,1,opt,name=pin,proto3" json:"pin,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCancelRoomPinResponse) Reset() { @@ -3567,22 +3527,21 @@ func (x *AdminCancelRoomPinResponse) GetServerTimeMs() int64 { } type AdminRobotRoomGiftRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftIds []string `protobuf:"bytes,1,rep,name=gift_ids,json=giftIds,proto3" json:"gift_ids,omitempty"` - LuckyGiftIds []string `protobuf:"bytes,2,rep,name=lucky_gift_ids,json=luckyGiftIds,proto3" json:"lucky_gift_ids,omitempty"` - NormalGiftIntervalMs int64 `protobuf:"varint,3,opt,name=normal_gift_interval_ms,json=normalGiftIntervalMs,proto3" json:"normal_gift_interval_ms,omitempty"` - LuckyComboMin int64 `protobuf:"varint,4,opt,name=lucky_combo_min,json=luckyComboMin,proto3" json:"lucky_combo_min,omitempty"` - LuckyComboMax int64 `protobuf:"varint,5,opt,name=lucky_combo_max,json=luckyComboMax,proto3" json:"lucky_combo_max,omitempty"` - LuckyPauseMinMs int64 `protobuf:"varint,6,opt,name=lucky_pause_min_ms,json=luckyPauseMinMs,proto3" json:"lucky_pause_min_ms,omitempty"` - LuckyPauseMaxMs int64 `protobuf:"varint,7,opt,name=lucky_pause_max_ms,json=luckyPauseMaxMs,proto3" json:"lucky_pause_max_ms,omitempty"` - RobotStayMinMs int64 `protobuf:"varint,8,opt,name=robot_stay_min_ms,json=robotStayMinMs,proto3" json:"robot_stay_min_ms,omitempty"` - RobotStayMaxMs int64 `protobuf:"varint,9,opt,name=robot_stay_max_ms,json=robotStayMaxMs,proto3" json:"robot_stay_max_ms,omitempty"` - RobotReplaceMinMs int64 `protobuf:"varint,10,opt,name=robot_replace_min_ms,json=robotReplaceMinMs,proto3" json:"robot_replace_min_ms,omitempty"` - RobotReplaceMaxMs int64 `protobuf:"varint,11,opt,name=robot_replace_max_ms,json=robotReplaceMaxMs,proto3" json:"robot_replace_max_ms,omitempty"` - MaxGiftSenders int64 `protobuf:"varint,12,opt,name=max_gift_senders,json=maxGiftSenders,proto3" json:"max_gift_senders,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftIds []string `protobuf:"bytes,1,rep,name=gift_ids,json=giftIds,proto3" json:"gift_ids,omitempty"` + LuckyGiftIds []string `protobuf:"bytes,2,rep,name=lucky_gift_ids,json=luckyGiftIds,proto3" json:"lucky_gift_ids,omitempty"` + NormalGiftIntervalMs int64 `protobuf:"varint,3,opt,name=normal_gift_interval_ms,json=normalGiftIntervalMs,proto3" json:"normal_gift_interval_ms,omitempty"` + LuckyComboMin int64 `protobuf:"varint,4,opt,name=lucky_combo_min,json=luckyComboMin,proto3" json:"lucky_combo_min,omitempty"` + LuckyComboMax int64 `protobuf:"varint,5,opt,name=lucky_combo_max,json=luckyComboMax,proto3" json:"lucky_combo_max,omitempty"` + LuckyPauseMinMs int64 `protobuf:"varint,6,opt,name=lucky_pause_min_ms,json=luckyPauseMinMs,proto3" json:"lucky_pause_min_ms,omitempty"` + LuckyPauseMaxMs int64 `protobuf:"varint,7,opt,name=lucky_pause_max_ms,json=luckyPauseMaxMs,proto3" json:"lucky_pause_max_ms,omitempty"` + RobotStayMinMs int64 `protobuf:"varint,8,opt,name=robot_stay_min_ms,json=robotStayMinMs,proto3" json:"robot_stay_min_ms,omitempty"` + RobotStayMaxMs int64 `protobuf:"varint,9,opt,name=robot_stay_max_ms,json=robotStayMaxMs,proto3" json:"robot_stay_max_ms,omitempty"` + RobotReplaceMinMs int64 `protobuf:"varint,10,opt,name=robot_replace_min_ms,json=robotReplaceMinMs,proto3" json:"robot_replace_min_ms,omitempty"` + RobotReplaceMaxMs int64 `protobuf:"varint,11,opt,name=robot_replace_max_ms,json=robotReplaceMaxMs,proto3" json:"robot_replace_max_ms,omitempty"` + MaxGiftSenders int64 `protobuf:"varint,12,opt,name=max_gift_senders,json=maxGiftSenders,proto3" json:"max_gift_senders,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRobotRoomGiftRule) Reset() { @@ -3700,10 +3659,7 @@ func (x *AdminRobotRoomGiftRule) GetMaxGiftSenders() int64 { } type AdminRobotRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` RoomShortId string `protobuf:"bytes,3,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` @@ -3719,6 +3675,8 @@ type AdminRobotRoom struct { UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` ActiveRobotCount int32 `protobuf:"varint,14,opt,name=active_robot_count,json=activeRobotCount,proto3" json:"active_robot_count,omitempty"` SeatCount int32 `protobuf:"varint,15,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRobotRoom) Reset() { @@ -3857,14 +3815,13 @@ func (x *AdminRobotRoom) GetSeatCount() int32 { } type AdminListRobotRoomsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminListRobotRoomsRequest) Reset() { @@ -3926,13 +3883,12 @@ func (x *AdminListRobotRoomsRequest) GetStatus() string { } type AdminListRobotRoomsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rooms []*AdminRobotRoom `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rooms []*AdminRobotRoom `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminListRobotRoomsResponse) Reset() { @@ -3987,10 +3943,7 @@ func (x *AdminListRobotRoomsResponse) GetServerTimeMs() int64 { } type AdminCreateRobotRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` OwnerRobotUserId int64 `protobuf:"varint,2,opt,name=owner_robot_user_id,json=ownerRobotUserId,proto3" json:"owner_robot_user_id,omitempty"` CandidateRobotUserIds []int64 `protobuf:"varint,3,rep,packed,name=candidate_robot_user_ids,json=candidateRobotUserIds,proto3" json:"candidate_robot_user_ids,omitempty"` @@ -4003,6 +3956,8 @@ type AdminCreateRobotRoomRequest struct { AdminId uint64 `protobuf:"varint,10,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` OwnerCountryCode string `protobuf:"bytes,11,opt,name=owner_country_code,json=ownerCountryCode,proto3" json:"owner_country_code,omitempty"` SeatCount int32 `protobuf:"varint,12,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminCreateRobotRoomRequest) Reset() { @@ -4120,12 +4075,11 @@ func (x *AdminCreateRobotRoomRequest) GetSeatCount() int32 { } type AdminCreateRobotRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Room *AdminRobotRoom `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Room *AdminRobotRoom `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCreateRobotRoomResponse) Reset() { @@ -4173,13 +4127,12 @@ func (x *AdminCreateRobotRoomResponse) GetServerTimeMs() int64 { } type AdminSetRobotRoomStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - AdminId uint64 `protobuf:"varint,3,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminSetRobotRoomStatusRequest) Reset() { @@ -4234,12 +4187,11 @@ func (x *AdminSetRobotRoomStatusRequest) GetAdminId() uint64 { } type AdminSetRobotRoomStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Room *AdminRobotRoom `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Room *AdminRobotRoom `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminSetRobotRoomStatusResponse) Reset() { @@ -4287,14 +4239,13 @@ func (x *AdminSetRobotRoomStatusResponse) GetServerTimeMs() int64 { } type AdminRenameOwnerCountryCodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - OldCountryCode string `protobuf:"bytes,2,opt,name=old_country_code,json=oldCountryCode,proto3" json:"old_country_code,omitempty"` - NewCountryCode string `protobuf:"bytes,3,opt,name=new_country_code,json=newCountryCode,proto3" json:"new_country_code,omitempty"` - AdminId uint64 `protobuf:"varint,4,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + OldCountryCode string `protobuf:"bytes,2,opt,name=old_country_code,json=oldCountryCode,proto3" json:"old_country_code,omitempty"` + NewCountryCode string `protobuf:"bytes,3,opt,name=new_country_code,json=newCountryCode,proto3" json:"new_country_code,omitempty"` + AdminId uint64 `protobuf:"varint,4,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRenameOwnerCountryCodeRequest) Reset() { @@ -4356,13 +4307,12 @@ func (x *AdminRenameOwnerCountryCodeRequest) GetAdminId() uint64 { } type AdminRenameOwnerCountryCodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomListEntries int64 `protobuf:"varint,1,opt,name=room_list_entries,json=roomListEntries,proto3" json:"room_list_entries,omitempty"` - RoomSnapshots int64 `protobuf:"varint,2,opt,name=room_snapshots,json=roomSnapshots,proto3" json:"room_snapshots,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RoomListEntries int64 `protobuf:"varint,1,opt,name=room_list_entries,json=roomListEntries,proto3" json:"room_list_entries,omitempty"` + RoomSnapshots int64 `protobuf:"varint,2,opt,name=room_snapshots,json=roomSnapshots,proto3" json:"room_snapshots,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRenameOwnerCountryCodeResponse) Reset() { @@ -4417,12 +4367,11 @@ func (x *AdminRenameOwnerCountryCodeResponse) GetServerTimeMs() int64 { } type AdminFilterAvailableRoomRobotsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminFilterAvailableRoomRobotsRequest) Reset() { @@ -4470,13 +4419,12 @@ func (x *AdminFilterAvailableRoomRobotsRequest) GetUserIds() []int64 { } type AdminFilterAvailableRoomRobotsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AvailableUserIds []int64 `protobuf:"varint,1,rep,packed,name=available_user_ids,json=availableUserIds,proto3" json:"available_user_ids,omitempty"` - OccupiedUserIds []int64 `protobuf:"varint,2,rep,packed,name=occupied_user_ids,json=occupiedUserIds,proto3" json:"occupied_user_ids,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AvailableUserIds []int64 `protobuf:"varint,1,rep,packed,name=available_user_ids,json=availableUserIds,proto3" json:"available_user_ids,omitempty"` + OccupiedUserIds []int64 `protobuf:"varint,2,rep,packed,name=occupied_user_ids,json=occupiedUserIds,proto3" json:"occupied_user_ids,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminFilterAvailableRoomRobotsResponse) Reset() { @@ -4532,15 +4480,14 @@ func (x *AdminFilterAvailableRoomRobotsResponse) GetServerTimeMs() int64 { // RoomBanState 表达单个房间 ban 的治理状态。 type RoomBanState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,3,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,3,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` // expires_at_ms 为 0 表示永久 ban;非 0 表示该 UTC 毫秒后可重新进房。 - ExpiresAtMs int64 `protobuf:"varint,4,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,4,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomBanState) Reset() { @@ -4603,27 +4550,24 @@ func (x *RoomBanState) GetExpiresAtMs() int64 { // RoomSnapshot 把 room-service 对外需要暴露的房间投影集中返回。 type RoomSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - Mode string `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - ChatEnabled bool `protobuf:"varint,6,opt,name=chat_enabled,json=chatEnabled,proto3" json:"chat_enabled,omitempty"` - MicSeats []*SeatState `protobuf:"bytes,7,rep,name=mic_seats,json=micSeats,proto3" json:"mic_seats,omitempty"` - OnlineUsers []*RoomUser `protobuf:"bytes,8,rep,name=online_users,json=onlineUsers,proto3" json:"online_users,omitempty"` - AdminUserIds []int64 `protobuf:"varint,9,rep,packed,name=admin_user_ids,json=adminUserIds,proto3" json:"admin_user_ids,omitempty"` - BanUserIds []int64 `protobuf:"varint,10,rep,packed,name=ban_user_ids,json=banUserIds,proto3" json:"ban_user_ids,omitempty"` - MuteUserIds []int64 `protobuf:"varint,11,rep,packed,name=mute_user_ids,json=muteUserIds,proto3" json:"mute_user_ids,omitempty"` - GiftRank []*RankItem `protobuf:"bytes,12,rep,name=gift_rank,json=giftRank,proto3" json:"gift_rank,omitempty"` - RoomExt map[string]string `protobuf:"bytes,13,rep,name=room_ext,json=roomExt,proto3" json:"room_ext,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Heat int64 `protobuf:"varint,14,opt,name=heat,proto3" json:"heat,omitempty"` - Version int64 `protobuf:"varint,15,opt,name=version,proto3" json:"version,omitempty"` - AppCode string `protobuf:"bytes,16,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RoomShortId string `protobuf:"bytes,17,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,18,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + Mode string `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + ChatEnabled bool `protobuf:"varint,6,opt,name=chat_enabled,json=chatEnabled,proto3" json:"chat_enabled,omitempty"` + MicSeats []*SeatState `protobuf:"bytes,7,rep,name=mic_seats,json=micSeats,proto3" json:"mic_seats,omitempty"` + OnlineUsers []*RoomUser `protobuf:"bytes,8,rep,name=online_users,json=onlineUsers,proto3" json:"online_users,omitempty"` + AdminUserIds []int64 `protobuf:"varint,9,rep,packed,name=admin_user_ids,json=adminUserIds,proto3" json:"admin_user_ids,omitempty"` + BanUserIds []int64 `protobuf:"varint,10,rep,packed,name=ban_user_ids,json=banUserIds,proto3" json:"ban_user_ids,omitempty"` + MuteUserIds []int64 `protobuf:"varint,11,rep,packed,name=mute_user_ids,json=muteUserIds,proto3" json:"mute_user_ids,omitempty"` + GiftRank []*RankItem `protobuf:"bytes,12,rep,name=gift_rank,json=giftRank,proto3" json:"gift_rank,omitempty"` + RoomExt map[string]string `protobuf:"bytes,13,rep,name=room_ext,json=roomExt,proto3" json:"room_ext,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Heat int64 `protobuf:"varint,14,opt,name=heat,proto3" json:"heat,omitempty"` + Version int64 `protobuf:"varint,15,opt,name=version,proto3" json:"version,omitempty"` + AppCode string `protobuf:"bytes,16,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RoomShortId string `protobuf:"bytes,17,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,18,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` // locked 只表达房间是否需要入房密码;具体密码哈希不对外映射到 HTTP JSON。 Locked bool `protobuf:"varint,19,opt,name=locked,proto3" json:"locked,omitempty"` // rocket 是语音房火箭当前状态;配置物料通过 GetRoomRocket 单独读取,避免快照过大。 @@ -4631,7 +4575,9 @@ type RoomSnapshot struct { // ban_states 保存 ban 的过期边界;ban_user_ids 仍只服务简单集合判断。 BanStates []*RoomBanState `protobuf:"bytes,21,rep,name=ban_states,json=banStates,proto3" json:"ban_states,omitempty"` // online_count 允许 lite 响应不携带 online_users 明细仍保留准确在线人数。 - OnlineCount int32 `protobuf:"varint,22,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` + OnlineCount int32 `protobuf:"varint,22,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomSnapshot) Reset() { @@ -4814,16 +4760,15 @@ func (x *RoomSnapshot) GetOnlineCount() int32 { // RoomBackgroundImage 是房间维度保存过的背景图素材。 // 保存列表归属于 room-service,当前生效背景仍写入 RoomSnapshot.room_ext["background_url"]。 type RoomBackgroundImage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BackgroundId int64 `protobuf:"varint,1,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ImageUrl string `protobuf:"bytes,3,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` - CreatedByUserId int64 `protobuf:"varint,4,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + BackgroundId int64 `protobuf:"varint,1,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ImageUrl string `protobuf:"bytes,3,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` + CreatedByUserId int64 `protobuf:"varint,4,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomBackgroundImage) Reset() { @@ -4899,13 +4844,12 @@ func (x *RoomBackgroundImage) GetUpdatedAtMs() int64 { } type SaveRoomBackgroundRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ImageUrl string `protobuf:"bytes,3,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ImageUrl string `protobuf:"bytes,3,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SaveRoomBackgroundRequest) Reset() { @@ -4960,12 +4904,11 @@ func (x *SaveRoomBackgroundRequest) GetImageUrl() string { } type SaveRoomBackgroundResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Background *RoomBackgroundImage `protobuf:"bytes,1,opt,name=background,proto3" json:"background,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Background *RoomBackgroundImage `protobuf:"bytes,1,opt,name=background,proto3" json:"background,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SaveRoomBackgroundResponse) Reset() { @@ -5013,13 +4956,12 @@ func (x *SaveRoomBackgroundResponse) GetServerTimeMs() int64 { } type ListRoomBackgroundsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomBackgroundsRequest) Reset() { @@ -5074,13 +5016,12 @@ func (x *ListRoomBackgroundsRequest) GetViewerUserId() int64 { } type ListRoomBackgroundsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Backgrounds []*RoomBackgroundImage `protobuf:"bytes,1,rep,name=backgrounds,proto3" json:"backgrounds,omitempty"` SelectedBackgroundUrl string `protobuf:"bytes,2,opt,name=selected_background_url,json=selectedBackgroundUrl,proto3" json:"selected_background_url,omitempty"` ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRoomBackgroundsResponse) Reset() { @@ -5135,12 +5076,11 @@ func (x *ListRoomBackgroundsResponse) GetServerTimeMs() int64 { } type SetRoomBackgroundRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + BackgroundId int64 `protobuf:"varint,2,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - BackgroundId int64 `protobuf:"varint,2,opt,name=background_id,json=backgroundId,proto3" json:"background_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomBackgroundRequest) Reset() { @@ -5188,13 +5128,12 @@ func (x *SetRoomBackgroundRequest) GetBackgroundId() int64 { } type SetRoomBackgroundResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + Background *RoomBackgroundImage `protobuf:"bytes,3,opt,name=background,proto3" json:"background,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` - Background *RoomBackgroundImage `protobuf:"bytes,3,opt,name=background,proto3" json:"background,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomBackgroundResponse) Reset() { @@ -5252,11 +5191,8 @@ func (x *SetRoomBackgroundResponse) GetBackground() *RoomBackgroundImage { // 必填语义:meta.room_id、meta.command_id、meta.actor_user_id、mode、room_name 和 room_avatar。 // 同一个 meta.actor_user_id 只能作为 owner 创建一个房间;重复创建返回 Conflict。 type CreateRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` // seat_count 为空或 0 时使用后台房间配置默认值;正数必须命中后台启用座位数。 SeatCount int32 `protobuf:"varint,2,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` // mode 必须非空;当前只作为房间状态字段保存和透出。 @@ -5276,7 +5212,9 @@ type CreateRoomRequest struct { // robot_room 只供内部机器人房间编排器设置;gateway 不接受客户端提交该字段。 RobotRoom bool `protobuf:"varint,10,opt,name=robot_room,json=robotRoom,proto3" json:"robot_room,omitempty"` // robot_user_ids 是该机器人房间允许参与机器人送礼和虚拟上麦的用户集合。 - RobotUserIds []int64 `protobuf:"varint,11,rep,packed,name=robot_user_ids,json=robotUserIds,proto3" json:"robot_user_ids,omitempty"` + RobotUserIds []int64 `protobuf:"varint,11,rep,packed,name=robot_user_ids,json=robotUserIds,proto3" json:"robot_user_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateRoomRequest) Reset() { @@ -5388,12 +5326,11 @@ func (x *CreateRoomRequest) GetRobotUserIds() []int64 { // CreateRoomResponse 返回新建后的房间快照。 type CreateRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRoomResponse) Reset() { @@ -5443,15 +5380,14 @@ func (x *CreateRoomResponse) GetRoom() *RoomSnapshot { // UpdateRoomProfileRequest 修改房间展示资料和麦位数量。 // 该命令只允许当前在房间 presence 内的 owner 执行,座位数必须命中后台启用配置。 type UpdateRoomProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomName *string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3,oneof" json:"room_name,omitempty"` - RoomAvatar *string `protobuf:"bytes,3,opt,name=room_avatar,json=roomAvatar,proto3,oneof" json:"room_avatar,omitempty"` - RoomDescription *string `protobuf:"bytes,4,opt,name=room_description,json=roomDescription,proto3,oneof" json:"room_description,omitempty"` - SeatCount *int32 `protobuf:"varint,5,opt,name=seat_count,json=seatCount,proto3,oneof" json:"seat_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomName *string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3,oneof" json:"room_name,omitempty"` + RoomAvatar *string `protobuf:"bytes,3,opt,name=room_avatar,json=roomAvatar,proto3,oneof" json:"room_avatar,omitempty"` + RoomDescription *string `protobuf:"bytes,4,opt,name=room_description,json=roomDescription,proto3,oneof" json:"room_description,omitempty"` + SeatCount *int32 `protobuf:"varint,5,opt,name=seat_count,json=seatCount,proto3,oneof" json:"seat_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRoomProfileRequest) Reset() { @@ -5521,12 +5457,11 @@ func (x *UpdateRoomProfileRequest) GetSeatCount() int32 { // UpdateRoomProfileResponse 返回修改后的最新房间快照。 type UpdateRoomProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRoomProfileResponse) Reset() { @@ -5575,19 +5510,18 @@ func (x *UpdateRoomProfileResponse) GetRoom() *RoomSnapshot { // JoinRoomRequest 把用户 presence 接入房间业务态。 type RoomEntryVehicleSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + AssetUrl string `protobuf:"bytes,4,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,5,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,6,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + MetadataJson string `protobuf:"bytes,7,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + EntitlementId string `protobuf:"bytes,8,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - AssetUrl string `protobuf:"bytes,4,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,5,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,6,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` - MetadataJson string `protobuf:"bytes,7,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - EntitlementId string `protobuf:"bytes,8,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomEntryVehicleSnapshot) Reset() { @@ -5685,15 +5619,14 @@ func (x *RoomEntryVehicleSnapshot) GetExpiresAtMs() int64 { // RoomUserDisplayProfile 是 gateway 在入口固化的用户展示快照,只服务 IM/UI 兜底。 type RoomUserDisplayProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` - Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` - DisplayUserId string `protobuf:"bytes,4,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - PrettyDisplayUserId string `protobuf:"bytes,5,opt,name=pretty_display_user_id,json=prettyDisplayUserId,proto3" json:"pretty_display_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` + Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` + DisplayUserId string `protobuf:"bytes,4,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + PrettyDisplayUserId string `protobuf:"bytes,5,opt,name=pretty_display_user_id,json=prettyDisplayUserId,proto3" json:"pretty_display_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomUserDisplayProfile) Reset() { @@ -5762,12 +5695,9 @@ func (x *RoomUserDisplayProfile) GetPrettyDisplayUserId() string { } type JoinRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` // password 只用于本次入房校验;room-service 不把明文写入 command log 或快照。 Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` EntryVehicle *RoomEntryVehicleSnapshot `protobuf:"bytes,4,opt,name=entry_vehicle,json=entryVehicle,proto3" json:"entry_vehicle,omitempty"` @@ -5782,6 +5712,8 @@ type JoinRoomRequest struct { // presence_recovery 只用于客户端仍在房间但业务 presence 已超时清理的恢复。 // 恢复成功只补回 Room Cell 在线状态,不发布 RoomUserJoined IM/outbox,避免重复入场表现和统计。 PresenceRecovery bool `protobuf:"varint,10,opt,name=presence_recovery,json=presenceRecovery,proto3" json:"presence_recovery,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *JoinRoomRequest) Reset() { @@ -5887,14 +5819,13 @@ func (x *JoinRoomRequest) GetPresenceRecovery() bool { // RoomEffectiveVipSnapshot 是 room-service 在进房时从 wallet-service 固化的轻量 VIP 展示事实。 // 权益执行仍以后端 effective_benefits 为准,客户端不能用该快照自行声明房间权限。 type RoomEffectiveVipSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProgramType string `protobuf:"bytes,1,opt,name=program_type,json=programType,proto3" json:"program_type,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - RoomEntryNoticeEnabled bool `protobuf:"varint,4,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3" json:"room_entry_notice_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ProgramType string `protobuf:"bytes,1,opt,name=program_type,json=programType,proto3" json:"program_type,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + RoomEntryNoticeEnabled bool `protobuf:"varint,4,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3" json:"room_entry_notice_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomEffectiveVipSnapshot) Reset() { @@ -5957,14 +5888,13 @@ func (x *RoomEffectiveVipSnapshot) GetRoomEntryNoticeEnabled() bool { // JoinRoomResponse 返回加入后的房间快照。 type JoinRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + User *RoomUser `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + EffectiveVip *RoomEffectiveVipSnapshot `protobuf:"bytes,4,opt,name=effective_vip,json=effectiveVip,proto3" json:"effective_vip,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - User *RoomUser `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` - EffectiveVip *RoomEffectiveVipSnapshot `protobuf:"bytes,4,opt,name=effective_vip,json=effectiveVip,proto3" json:"effective_vip,omitempty"` + sizeCache protoimpl.SizeCache } func (x *JoinRoomResponse) Reset() { @@ -6028,11 +5958,10 @@ func (x *JoinRoomResponse) GetEffectiveVip() *RoomEffectiveVipSnapshot { // RoomHeartbeatRequest 显式刷新已经存在的房间业务 presence。 // 它不能替代 JoinRoom;用户不在房间时必须拒绝,避免心跳把已离开的用户重新加入房间。 type RoomHeartbeatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomHeartbeatRequest) Reset() { @@ -6074,13 +6003,12 @@ func (x *RoomHeartbeatRequest) GetMeta() *RequestMeta { // RoomHeartbeatResponse 返回刷新后的用户 presence 和房间快照。 type RoomHeartbeatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + User *RoomUser `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - User *RoomUser `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomHeartbeatResponse) Reset() { @@ -6136,11 +6064,10 @@ func (x *RoomHeartbeatResponse) GetRoom() *RoomSnapshot { // LeaveRoomRequest 把用户从房间 presence 移出。 type LeaveRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LeaveRoomRequest) Reset() { @@ -6182,12 +6109,11 @@ func (x *LeaveRoomRequest) GetMeta() *RequestMeta { // LeaveRoomResponse 返回离房后的房间快照。 type LeaveRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LeaveRoomResponse) Reset() { @@ -6236,12 +6162,11 @@ func (x *LeaveRoomResponse) GetRoom() *RoomSnapshot { // CloseRoomRequest 关闭房间并清理业务 presence 和麦位。 type CloseRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CloseRoomRequest) Reset() { @@ -6290,12 +6215,11 @@ func (x *CloseRoomRequest) GetReason() string { // CloseRoomResponse 返回关闭后的房间快照。 type CloseRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CloseRoomResponse) Reset() { @@ -6344,29 +6268,28 @@ func (x *CloseRoomResponse) GetRoom() *RoomSnapshot { // AdminRoomListItem 是后台房间管理卡片;它来自 room-service owner 读模型,不允许后台直连房间库。 type AdminRoomListItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RoomShortId string `protobuf:"bytes,2,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` - Mode string `protobuf:"bytes,7,opt,name=mode,proto3" json:"mode,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - CloseReason string `protobuf:"bytes,9,opt,name=close_reason,json=closeReason,proto3" json:"close_reason,omitempty"` - ClosedByAdminId uint64 `protobuf:"varint,10,opt,name=closed_by_admin_id,json=closedByAdminId,proto3" json:"closed_by_admin_id,omitempty"` - ClosedByAdminName string `protobuf:"bytes,11,opt,name=closed_by_admin_name,json=closedByAdminName,proto3" json:"closed_by_admin_name,omitempty"` - ClosedAtMs int64 `protobuf:"varint,12,opt,name=closed_at_ms,json=closedAtMs,proto3" json:"closed_at_ms,omitempty"` - Heat int64 `protobuf:"varint,13,opt,name=heat,proto3" json:"heat,omitempty"` - OnlineCount int32 `protobuf:"varint,14,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` - SeatCount int32 `protobuf:"varint,15,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` - OccupiedSeatCount int32 `protobuf:"varint,16,opt,name=occupied_seat_count,json=occupiedSeatCount,proto3" json:"occupied_seat_count,omitempty"` - SortScore int64 `protobuf:"varint,17,opt,name=sort_score,json=sortScore,proto3" json:"sort_score,omitempty"` - CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RoomShortId string `protobuf:"bytes,2,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + CoverUrl string `protobuf:"bytes,6,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + Mode string `protobuf:"bytes,7,opt,name=mode,proto3" json:"mode,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + CloseReason string `protobuf:"bytes,9,opt,name=close_reason,json=closeReason,proto3" json:"close_reason,omitempty"` + ClosedByAdminId uint64 `protobuf:"varint,10,opt,name=closed_by_admin_id,json=closedByAdminId,proto3" json:"closed_by_admin_id,omitempty"` + ClosedByAdminName string `protobuf:"bytes,11,opt,name=closed_by_admin_name,json=closedByAdminName,proto3" json:"closed_by_admin_name,omitempty"` + ClosedAtMs int64 `protobuf:"varint,12,opt,name=closed_at_ms,json=closedAtMs,proto3" json:"closed_at_ms,omitempty"` + Heat int64 `protobuf:"varint,13,opt,name=heat,proto3" json:"heat,omitempty"` + OnlineCount int32 `protobuf:"varint,14,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` + SeatCount int32 `protobuf:"varint,15,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + OccupiedSeatCount int32 `protobuf:"varint,16,opt,name=occupied_seat_count,json=occupiedSeatCount,proto3" json:"occupied_seat_count,omitempty"` + SortScore int64 `protobuf:"varint,17,opt,name=sort_score,json=sortScore,proto3" json:"sort_score,omitempty"` + CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminRoomListItem) Reset() { @@ -6533,19 +6456,18 @@ func (x *AdminRoomListItem) GetUpdatedAtMs() int64 { } type AdminListRoomsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - VisibleRegionId int64 `protobuf:"varint,6,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - SortBy string `protobuf:"bytes,7,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` - SortDirection string `protobuf:"bytes,8,opt,name=sort_direction,json=sortDirection,proto3" json:"sort_direction,omitempty"` - OwnerUserId int64 `protobuf:"varint,9,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + VisibleRegionId int64 `protobuf:"varint,6,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + SortBy string `protobuf:"bytes,7,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + SortDirection string `protobuf:"bytes,8,opt,name=sort_direction,json=sortDirection,proto3" json:"sort_direction,omitempty"` + OwnerUserId int64 `protobuf:"varint,9,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminListRoomsRequest) Reset() { @@ -6642,13 +6564,12 @@ func (x *AdminListRoomsRequest) GetOwnerUserId() int64 { } type AdminListRoomsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rooms []*AdminRoomListItem `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rooms []*AdminRoomListItem `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminListRoomsResponse) Reset() { @@ -6703,12 +6624,11 @@ func (x *AdminListRoomsResponse) GetServerTimeMs() int64 { } type AdminGetRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomRequest) Reset() { @@ -6756,12 +6676,11 @@ func (x *AdminGetRoomRequest) GetRoomId() string { } type AdminGetRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Room *AdminRoomListItem `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Room *AdminRoomListItem `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminGetRoomResponse) Reset() { @@ -6809,22 +6728,21 @@ func (x *AdminGetRoomResponse) GetServerTimeMs() int64 { } type AdminUpdateRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Title *string `protobuf:"bytes,2,opt,name=title,proto3,oneof" json:"title,omitempty"` - CoverUrl *string `protobuf:"bytes,3,opt,name=cover_url,json=coverUrl,proto3,oneof" json:"cover_url,omitempty"` - Description *string `protobuf:"bytes,4,opt,name=description,proto3,oneof" json:"description,omitempty"` - Mode *string `protobuf:"bytes,5,opt,name=mode,proto3,oneof" json:"mode,omitempty"` - Status *string `protobuf:"bytes,6,opt,name=status,proto3,oneof" json:"status,omitempty"` - VisibleRegionId *int64 `protobuf:"varint,7,opt,name=visible_region_id,json=visibleRegionId,proto3,oneof" json:"visible_region_id,omitempty"` - CloseReason string `protobuf:"bytes,8,opt,name=close_reason,json=closeReason,proto3" json:"close_reason,omitempty"` - AdminId uint64 `protobuf:"varint,9,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` - AdminName string `protobuf:"bytes,10,opt,name=admin_name,json=adminName,proto3" json:"admin_name,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title,proto3,oneof" json:"title,omitempty"` + CoverUrl *string `protobuf:"bytes,3,opt,name=cover_url,json=coverUrl,proto3,oneof" json:"cover_url,omitempty"` + Description *string `protobuf:"bytes,4,opt,name=description,proto3,oneof" json:"description,omitempty"` + Mode *string `protobuf:"bytes,5,opt,name=mode,proto3,oneof" json:"mode,omitempty"` + Status *string `protobuf:"bytes,6,opt,name=status,proto3,oneof" json:"status,omitempty"` + VisibleRegionId *int64 `protobuf:"varint,7,opt,name=visible_region_id,json=visibleRegionId,proto3,oneof" json:"visible_region_id,omitempty"` + CloseReason string `protobuf:"bytes,8,opt,name=close_reason,json=closeReason,proto3" json:"close_reason,omitempty"` + AdminId uint64 `protobuf:"varint,9,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + AdminName string `protobuf:"bytes,10,opt,name=admin_name,json=adminName,proto3" json:"admin_name,omitempty"` // owner_country_code 是内部运维/同步字段,用于通过真实 Room Cell owner 修复房主国家投影。 OwnerCountryCode *string `protobuf:"bytes,11,opt,name=owner_country_code,json=ownerCountryCode,proto3,oneof" json:"owner_country_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomRequest) Reset() { @@ -6935,12 +6853,11 @@ func (x *AdminUpdateRoomRequest) GetOwnerCountryCode() string { } type AdminUpdateRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminUpdateRoomResponse) Reset() { @@ -6988,13 +6905,12 @@ func (x *AdminUpdateRoomResponse) GetRoom() *RoomSnapshot { } type AdminDeleteRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AdminId uint64 `protobuf:"varint,2,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` + AdminName string `protobuf:"bytes,3,opt,name=admin_name,json=adminName,proto3" json:"admin_name,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AdminId uint64 `protobuf:"varint,2,opt,name=admin_id,json=adminId,proto3" json:"admin_id,omitempty"` - AdminName string `protobuf:"bytes,3,opt,name=admin_name,json=adminName,proto3" json:"admin_name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminDeleteRoomRequest) Reset() { @@ -7049,12 +6965,11 @@ func (x *AdminDeleteRoomRequest) GetAdminName() string { } type AdminDeleteRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminDeleteRoomResponse) Reset() { @@ -7103,14 +7018,13 @@ func (x *AdminDeleteRoomResponse) GetRoom() *RoomSnapshot { // MicUpRequest 申请把用户放到指定麦位。 type MicUpRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` // target_display_profile 是上麦用户展示快照,room-service 只透传到麦位 IM/outbox。 TargetDisplayProfile *RoomUserDisplayProfile `protobuf:"bytes,3,opt,name=target_display_profile,json=targetDisplayProfile,proto3" json:"target_display_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MicUpRequest) Reset() { @@ -7166,15 +7080,14 @@ func (x *MicUpRequest) GetTargetDisplayProfile() *RoomUserDisplayProfile { // MicUpResponse 返回最新房间快照与目标麦位。 type MicUpResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` - MicSessionId string `protobuf:"bytes,4,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` - PublishDeadlineMs int64 `protobuf:"varint,5,opt,name=publish_deadline_ms,json=publishDeadlineMs,proto3" json:"publish_deadline_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + MicSessionId string `protobuf:"bytes,4,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` + PublishDeadlineMs int64 `protobuf:"varint,5,opt,name=publish_deadline_ms,json=publishDeadlineMs,proto3" json:"publish_deadline_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MicUpResponse) Reset() { @@ -7244,16 +7157,15 @@ func (x *MicUpResponse) GetPublishDeadlineMs() int64 { // MicDownRequest 把用户从当前麦位移下。 type MicDownRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // reason 为空表示主动下麦;系统自动释放麦位时会写入稳定原因,例如 publish_timeout。 Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // target_display_profile 只用于补偿 IM 展示,空值不影响下麦状态提交。 TargetDisplayProfile *RoomUserDisplayProfile `protobuf:"bytes,4,opt,name=target_display_profile,json=targetDisplayProfile,proto3" json:"target_display_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MicDownRequest) Reset() { @@ -7316,13 +7228,12 @@ func (x *MicDownRequest) GetTargetDisplayProfile() *RoomUserDisplayProfile { // MicDownResponse 返回最新房间快照与目标麦位。 type MicDownResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MicDownResponse) Reset() { @@ -7378,15 +7289,14 @@ func (x *MicDownResponse) GetRoom() *RoomSnapshot { // ChangeMicSeatRequest 直接调整指定用户所在麦位。 type ChangeMicSeatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - SeatNo int32 `protobuf:"varint,3,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + SeatNo int32 `protobuf:"varint,3,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` // target_display_profile 是被换麦用户展示快照,避免客户端等待在线成员刷新。 TargetDisplayProfile *RoomUserDisplayProfile `protobuf:"bytes,4,opt,name=target_display_profile,json=targetDisplayProfile,proto3" json:"target_display_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeMicSeatRequest) Reset() { @@ -7449,12 +7359,11 @@ func (x *ChangeMicSeatRequest) GetTargetDisplayProfile() *RoomUserDisplayProfile // ChangeMicSeatResponse 返回变更后的房间快照。 type ChangeMicSeatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChangeMicSeatResponse) Reset() { @@ -7504,11 +7413,8 @@ func (x *ChangeMicSeatResponse) GetRoom() *RoomSnapshot { // ConfirmMicPublishingRequest 确认当前 mic_session 已经在 RTC 侧成功发布音频。 // 客户端 SDK 回调和后续 RTC webhook 都必须带 mic_session_id、room_version 和 event_time_ms。 type ConfirmMicPublishingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` // target_user_id 为空时默认确认 actor_user_id;RTC webhook 入口可显式指定目标用户。 TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` MicSessionId string `protobuf:"bytes,3,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` @@ -7517,6 +7423,8 @@ type ConfirmMicPublishingRequest struct { Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` // target_display_profile 是确认发流用户展示快照,空值不影响状态收敛。 TargetDisplayProfile *RoomUserDisplayProfile `protobuf:"bytes,7,opt,name=target_display_profile,json=targetDisplayProfile,proto3" json:"target_display_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConfirmMicPublishingRequest) Reset() { @@ -7600,13 +7508,12 @@ func (x *ConfirmMicPublishingRequest) GetTargetDisplayProfile() *RoomUserDisplay // ConfirmMicPublishingResponse 返回确认后的最新房间快照。 type ConfirmMicPublishingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConfirmMicPublishingResponse) Reset() { @@ -7662,15 +7569,14 @@ func (x *ConfirmMicPublishingResponse) GetRoom() *RoomSnapshot { // MicHeartbeatRequest 刷新当前 publishing 麦位会话的服务端麦上心跳。 type MicHeartbeatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` // target_user_id 为空时默认刷新 actor_user_id 自己的麦上会话。 TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // mic_session_id 必须匹配当前麦位上的会话,避免旧心跳续住新会话。 - MicSessionId string `protobuf:"bytes,3,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` + MicSessionId string `protobuf:"bytes,3,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MicHeartbeatRequest) Reset() { @@ -7726,14 +7632,13 @@ func (x *MicHeartbeatRequest) GetMicSessionId() string { // MicHeartbeatResponse 返回刷新后的麦位和房间快照。 type MicHeartbeatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` - MicHeartbeatAtMs int64 `protobuf:"varint,4,opt,name=mic_heartbeat_at_ms,json=micHeartbeatAtMs,proto3" json:"mic_heartbeat_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + MicHeartbeatAtMs int64 `protobuf:"varint,4,opt,name=mic_heartbeat_at_ms,json=micHeartbeatAtMs,proto3" json:"mic_heartbeat_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MicHeartbeatResponse) Reset() { @@ -7796,16 +7701,15 @@ func (x *MicHeartbeatResponse) GetMicHeartbeatAtMs() int64 { // SetMicMuteRequest 修改麦位上的服务端可见静音态。 type SetMicMuteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` // target_user_id 为空时默认修改 actor_user_id 自己的麦克风静音态。 TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` Muted bool `protobuf:"varint,3,opt,name=muted,proto3" json:"muted,omitempty"` // target_display_profile 是被静音状态变更用户展示快照,只服务 IM/UI 兜底。 TargetDisplayProfile *RoomUserDisplayProfile `protobuf:"bytes,4,opt,name=target_display_profile,json=targetDisplayProfile,proto3" json:"target_display_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetMicMuteRequest) Reset() { @@ -7868,13 +7772,12 @@ func (x *SetMicMuteRequest) GetTargetDisplayProfile() *RoomUserDisplayProfile { // SetMicMuteResponse 返回静音态变更后的最新房间快照。 type SetMicMuteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetMicMuteResponse) Reset() { @@ -7931,17 +7834,16 @@ func (x *SetMicMuteResponse) GetRoom() *RoomSnapshot { // ApplyRTCEventRequest 把可信 RTC 服务端回调转换成 Room Cell 命令。 // event_type 当前只接受 audio_started、audio_stopped、room_exited。 type ApplyRTCEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - EventTimeMs int64 `protobuf:"varint,4,opt,name=event_time_ms,json=eventTimeMs,proto3" json:"event_time_ms,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` - ExternalEventId string `protobuf:"bytes,7,opt,name=external_event_id,json=externalEventId,proto3" json:"external_event_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + EventType string `protobuf:"bytes,3,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + EventTimeMs int64 `protobuf:"varint,4,opt,name=event_time_ms,json=eventTimeMs,proto3" json:"event_time_ms,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` + ExternalEventId string `protobuf:"bytes,7,opt,name=external_event_id,json=externalEventId,proto3" json:"external_event_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ApplyRTCEventRequest) Reset() { @@ -8025,13 +7927,12 @@ func (x *ApplyRTCEventRequest) GetExternalEventId() string { // ApplyRTCEventResponse 返回 RTC 事件落房间状态后的快照。 type ApplyRTCEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ApplyRTCEventResponse) Reset() { @@ -8087,13 +7988,12 @@ func (x *ApplyRTCEventResponse) GetRoom() *RoomSnapshot { // SetMicSeatLockRequest 锁定或解锁指定麦位。 type SetMicSeatLockRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` + Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - SeatNo int32 `protobuf:"varint,2,opt,name=seat_no,json=seatNo,proto3" json:"seat_no,omitempty"` - Locked bool `protobuf:"varint,3,opt,name=locked,proto3" json:"locked,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetMicSeatLockRequest) Reset() { @@ -8149,12 +8049,11 @@ func (x *SetMicSeatLockRequest) GetLocked() bool { // SetMicSeatLockResponse 返回锁麦后的最新房间快照。 type SetMicSeatLockResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetMicSeatLockResponse) Reset() { @@ -8203,12 +8102,11 @@ func (x *SetMicSeatLockResponse) GetRoom() *RoomSnapshot { // SetChatEnabledRequest 开启或关闭房间公屏。 type SetChatEnabledRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetChatEnabledRequest) Reset() { @@ -8257,12 +8155,11 @@ func (x *SetChatEnabledRequest) GetEnabled() bool { // SetChatEnabledResponse 返回聊天开关变更后的最新房间快照。 type SetChatEnabledResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetChatEnabledResponse) Reset() { @@ -8312,13 +8209,12 @@ func (x *SetChatEnabledResponse) GetRoom() *RoomSnapshot { // SetRoomPasswordRequest 设置或清空房间入房密码。 // locked=true 时 password 必须非空;locked=false 表示清空密码并解除锁房。 type SetRoomPasswordRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Locked bool `protobuf:"varint,2,opt,name=locked,proto3" json:"locked,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Locked bool `protobuf:"varint,2,opt,name=locked,proto3" json:"locked,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomPasswordRequest) Reset() { @@ -8374,12 +8270,11 @@ func (x *SetRoomPasswordRequest) GetPassword() string { // SetRoomPasswordResponse 返回锁房状态变更后的最新房间快照。 type SetRoomPasswordResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomPasswordResponse) Reset() { @@ -8428,13 +8323,12 @@ func (x *SetRoomPasswordResponse) GetRoom() *RoomSnapshot { // SetRoomAdminRequest 添加或移除房间管理员。 type SetRoomAdminRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomAdminRequest) Reset() { @@ -8490,12 +8384,11 @@ func (x *SetRoomAdminRequest) GetEnabled() bool { // SetRoomAdminResponse 返回管理员集合变更后的最新房间快照。 type SetRoomAdminResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetRoomAdminResponse) Reset() { @@ -8544,13 +8437,12 @@ func (x *SetRoomAdminResponse) GetRoom() *RoomSnapshot { // MuteUserRequest 修改房间内禁言态。 type MuteUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Muted bool `protobuf:"varint,3,opt,name=muted,proto3" json:"muted,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Muted bool `protobuf:"varint,3,opt,name=muted,proto3" json:"muted,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MuteUserRequest) Reset() { @@ -8606,12 +8498,11 @@ func (x *MuteUserRequest) GetMuted() bool { // MuteUserResponse 返回最新房间快照。 type MuteUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MuteUserResponse) Reset() { @@ -8660,14 +8551,13 @@ func (x *MuteUserResponse) GetRoom() *RoomSnapshot { // KickUserRequest 把指定用户踢出房间。 type KickUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // duration_ms 为 0 表示永久 ban;大于 0 表示从服务端当前 UTC 时间起禁止进房的时长。 - DurationMs int64 `protobuf:"varint,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + DurationMs int64 `protobuf:"varint,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *KickUserRequest) Reset() { @@ -8723,16 +8613,15 @@ func (x *KickUserRequest) GetDurationMs() int64 { // KickUserResponse 返回最新房间快照。 type KickUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` // rtc_kicked 表示 room-service 已通过 TRTC 服务端接口移除目标用户;失败不回滚房间踢人事实。 RtcKicked bool `protobuf:"varint,3,opt,name=rtc_kicked,json=rtcKicked,proto3" json:"rtc_kicked,omitempty"` // rtc_kick_error 仅用于调用方排障和告警,客户端展示仍以统一错误码和房间状态为准。 - RtcKickError string `protobuf:"bytes,4,opt,name=rtc_kick_error,json=rtcKickError,proto3" json:"rtc_kick_error,omitempty"` + RtcKickError string `protobuf:"bytes,4,opt,name=rtc_kick_error,json=rtcKickError,proto3" json:"rtc_kick_error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *KickUserResponse) Reset() { @@ -8795,12 +8684,11 @@ func (x *KickUserResponse) GetRtcKickError() string { // UnbanUserRequest 解除房间内 ban,用户仍需重新 JoinRoom。 type UnbanUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnbanUserRequest) Reset() { @@ -8849,12 +8737,11 @@ func (x *UnbanUserRequest) GetTargetUserId() int64 { // UnbanUserResponse 返回解封后的最新房间快照。 type UnbanUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnbanUserResponse) Reset() { @@ -8904,16 +8791,15 @@ func (x *UnbanUserResponse) GetRoom() *RoomSnapshot { // SystemEvictUserRequest 是平台级封禁、风控或后台治理触发的系统驱逐入口。 // 该命令仍由 Room Cell 修改房间状态;调用方不能直接写房间 presence 或麦位。 type SystemEvictUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` // ban_from_room 为 true 时把用户加入当前房间 ban 集合,防止同一房间恢复入口重新进入。 - BanFromRoom bool `protobuf:"varint,5,opt,name=ban_from_room,json=banFromRoom,proto3" json:"ban_from_room,omitempty"` + BanFromRoom bool `protobuf:"varint,5,opt,name=ban_from_room,json=banFromRoom,proto3" json:"ban_from_room,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SystemEvictUserRequest) Reset() { @@ -8983,16 +8869,15 @@ func (x *SystemEvictUserRequest) GetBanFromRoom() bool { // SystemEvictUserResponse 返回系统驱逐的房间状态和外部 RTC 副作用结果。 type SystemEvictUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HadCurrentRoom bool `protobuf:"varint,1,opt,name=had_current_room,json=hadCurrentRoom,proto3" json:"had_current_room,omitempty"` - Result *CommandResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RtcKicked bool `protobuf:"varint,5,opt,name=rtc_kicked,json=rtcKicked,proto3" json:"rtc_kicked,omitempty"` - RtcKickError string `protobuf:"bytes,6,opt,name=rtc_kick_error,json=rtcKickError,proto3" json:"rtc_kick_error,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + HadCurrentRoom bool `protobuf:"varint,1,opt,name=had_current_room,json=hadCurrentRoom,proto3" json:"had_current_room,omitempty"` + Result *CommandResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,3,opt,name=room,proto3" json:"room,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RtcKicked bool `protobuf:"varint,5,opt,name=rtc_kicked,json=rtcKicked,proto3" json:"rtc_kicked,omitempty"` + RtcKickError string `protobuf:"bytes,6,opt,name=rtc_kick_error,json=rtcKickError,proto3" json:"rtc_kick_error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SystemEvictUserResponse) Reset() { @@ -9069,17 +8954,16 @@ func (x *SystemEvictUserResponse) GetRtcKickError() string { // SendGiftTargetHostScope 是 gateway 在送礼入口按每个接收方固化的主播工资入账快照。 type SendGiftTargetHostScope struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` // target_is_host 由 gateway 根据 user-service active host profile 注入,客户端不能直接声明。 TargetIsHost bool `protobuf:"varint,2,opt,name=target_is_host,json=targetIsHost,proto3" json:"target_is_host,omitempty"` // target_host_region_id 是主播所属区域,后续结算按该区域匹配 Host & Agency 政策。 TargetHostRegionId int64 `protobuf:"varint,3,opt,name=target_host_region_id,json=targetHostRegionId,proto3" json:"target_host_region_id,omitempty"` // target_agency_owner_user_id 是送礼瞬间主播上级代理收款用户;为空表示当前无代理或代理关系不可结算。 TargetAgencyOwnerUserId int64 `protobuf:"varint,4,opt,name=target_agency_owner_user_id,json=targetAgencyOwnerUserId,proto3" json:"target_agency_owner_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftTargetHostScope) Reset() { @@ -9143,15 +9027,14 @@ func (x *SendGiftTargetHostScope) GetTargetAgencyOwnerUserId() int64 { // SendGiftDisplayProfile 是 gateway 在送礼入口固化的轻量展示快照。 // room-service 只把它写入事件和 IM,不把用户资料扩散到 Room Cell 核心状态。 type SendGiftDisplayProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` - DisplayUserId string `protobuf:"bytes,4,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - PrettyDisplayUserId string `protobuf:"bytes,5,opt,name=pretty_display_user_id,json=prettyDisplayUserId,proto3" json:"pretty_display_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` + DisplayUserId string `protobuf:"bytes,4,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + PrettyDisplayUserId string `protobuf:"bytes,5,opt,name=pretty_display_user_id,json=prettyDisplayUserId,proto3" json:"pretty_display_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftDisplayProfile) Reset() { @@ -9222,21 +9105,20 @@ func (x *SendGiftDisplayProfile) GetPrettyDisplayUserId() string { // SendGiftBatchTarget 是批量送礼展示响应中单个目标的结算和展示快照。 // 它只服务发送方本地即时展示,不替代逐目标 RoomGiftSent 业务事实。 type SendGiftBatchTarget struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - ReceiverNickname string `protobuf:"bytes,2,opt,name=receiver_nickname,json=receiverNickname,proto3" json:"receiver_nickname,omitempty"` - ReceiverAvatar string `protobuf:"bytes,3,opt,name=receiver_avatar,json=receiverAvatar,proto3" json:"receiver_avatar,omitempty"` - ReceiverDisplayUserId string `protobuf:"bytes,4,opt,name=receiver_display_user_id,json=receiverDisplayUserId,proto3" json:"receiver_display_user_id,omitempty"` - ReceiverPrettyDisplayUserId string `protobuf:"bytes,5,opt,name=receiver_pretty_display_user_id,json=receiverPrettyDisplayUserId,proto3" json:"receiver_pretty_display_user_id,omitempty"` - GiftValue int64 `protobuf:"varint,6,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` - TargetGiftValue int64 `protobuf:"varint,7,opt,name=target_gift_value,json=targetGiftValue,proto3" json:"target_gift_value,omitempty"` - CoinSpent int64 `protobuf:"varint,8,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - BillingReceiptId string `protobuf:"bytes,9,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` - CommandId string `protobuf:"bytes,10,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - LuckyGift *LuckyGiftDrawResult `protobuf:"bytes,11,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + ReceiverNickname string `protobuf:"bytes,2,opt,name=receiver_nickname,json=receiverNickname,proto3" json:"receiver_nickname,omitempty"` + ReceiverAvatar string `protobuf:"bytes,3,opt,name=receiver_avatar,json=receiverAvatar,proto3" json:"receiver_avatar,omitempty"` + ReceiverDisplayUserId string `protobuf:"bytes,4,opt,name=receiver_display_user_id,json=receiverDisplayUserId,proto3" json:"receiver_display_user_id,omitempty"` + ReceiverPrettyDisplayUserId string `protobuf:"bytes,5,opt,name=receiver_pretty_display_user_id,json=receiverPrettyDisplayUserId,proto3" json:"receiver_pretty_display_user_id,omitempty"` + GiftValue int64 `protobuf:"varint,6,opt,name=gift_value,json=giftValue,proto3" json:"gift_value,omitempty"` + TargetGiftValue int64 `protobuf:"varint,7,opt,name=target_gift_value,json=targetGiftValue,proto3" json:"target_gift_value,omitempty"` + CoinSpent int64 `protobuf:"varint,8,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + BillingReceiptId string `protobuf:"bytes,9,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` + CommandId string `protobuf:"bytes,10,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + LuckyGift *LuckyGiftDrawResult `protobuf:"bytes,11,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftBatchTarget) Reset() { @@ -9349,10 +9231,7 @@ func (x *SendGiftBatchTarget) GetLuckyGift() *LuckyGiftDrawResult { // SendGiftBatchDisplay 是新批量送礼接口返回给发送方的本地展示协议。 // 房间广播使用同构的 RoomGiftBatchSent IM 事件;coin_balance_after 不进入该展示对象。 type SendGiftBatchDisplay struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` SenderUserId int64 `protobuf:"varint,2,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` SenderName string `protobuf:"bytes,3,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"` @@ -9375,6 +9254,8 @@ type SendGiftBatchDisplay struct { TargetUserIds []int64 `protobuf:"varint,20,rep,packed,name=target_user_ids,json=targetUserIds,proto3" json:"target_user_ids,omitempty"` Targets []*SendGiftBatchTarget `protobuf:"bytes,21,rep,name=targets,proto3" json:"targets,omitempty"` CommandId string `protobuf:"bytes,22,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftBatchDisplay) Reset() { @@ -9563,11 +9444,8 @@ func (x *SendGiftBatchDisplay) GetCommandId() string { // SendGiftRequest 是首版房间内最重要的变现命令。 type SendGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` // target_user_id 是兼容旧客户端的单目标字段;新客户端优先使用 target_user_ids。 TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` @@ -9601,6 +9479,8 @@ type SendGiftRequest struct { // combo_session_id + batch_seq 只描述 Flutter 微批会话,command_id 仍是跨服务唯一幂等键。 ComboSessionId string `protobuf:"bytes,19,opt,name=combo_session_id,json=comboSessionId,proto3" json:"combo_session_id,omitempty"` BatchSeq int64 `protobuf:"varint,20,opt,name=batch_seq,json=batchSeq,proto3" json:"batch_seq,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftRequest) Reset() { @@ -9775,16 +9655,13 @@ func (x *SendGiftRequest) GetBatchSeq() int64 { // SendGiftResponse 返回扣费成功并落到房间后的状态结果。 type SendGiftResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - BillingReceiptId string `protobuf:"bytes,2,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` - RoomHeat int64 `protobuf:"varint,3,opt,name=room_heat,json=roomHeat,proto3" json:"room_heat,omitempty"` - GiftRank []*RankItem `protobuf:"bytes,4,rep,name=gift_rank,json=giftRank,proto3" json:"gift_rank,omitempty"` - Room *RoomSnapshot `protobuf:"bytes,5,opt,name=room,proto3" json:"room,omitempty"` - Rocket *RoomRocketState `protobuf:"bytes,6,opt,name=rocket,proto3" json:"rocket,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + BillingReceiptId string `protobuf:"bytes,2,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` + RoomHeat int64 `protobuf:"varint,3,opt,name=room_heat,json=roomHeat,proto3" json:"room_heat,omitempty"` + GiftRank []*RankItem `protobuf:"bytes,4,rep,name=gift_rank,json=giftRank,proto3" json:"gift_rank,omitempty"` + Room *RoomSnapshot `protobuf:"bytes,5,opt,name=room,proto3" json:"room,omitempty"` + Rocket *RoomRocketState `protobuf:"bytes,6,opt,name=rocket,proto3" json:"rocket,omitempty"` // lucky_gift 是本次送礼的聚合幸运礼物结果;多目标时倍率和返奖金额按所有目标累加。 LuckyGift *LuckyGiftDrawResult `protobuf:"bytes,7,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` // lucky_gifts 是每个收礼目标的独立抽奖结果;多目标客户端用 target_user_id 对齐明细表现。 @@ -9796,7 +9673,9 @@ type SendGiftResponse struct { // batch_display 是新 batch-send 接口的多人展示快照;旧 send 入口保持空值。 BatchDisplay *SendGiftBatchDisplay `protobuf:"bytes,11,opt,name=batch_display,json=batchDisplay,proto3" json:"batch_display,omitempty"` // v2 保存并重放首次成功的原始结算结果;追加字段不改变旧 Flutter 对顶层 V1 字段的读取。 - V2 *SendGiftResultV2 `protobuf:"bytes,12,opt,name=v2,proto3" json:"v2,omitempty"` + V2 *SendGiftResultV2 `protobuf:"bytes,12,opt,name=v2,proto3" json:"v2,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftResponse) Reset() { @@ -9915,13 +9794,12 @@ func (x *SendGiftResponse) GetV2() *SendGiftResultV2 { // CheckSpeakPermissionRequest 让腾讯云 IM 发言回调或 gateway 在公屏前同步问房间业务态。 type CheckSpeakPermissionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AppCode string `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckSpeakPermissionRequest) Reset() { @@ -9977,13 +9855,12 @@ func (x *CheckSpeakPermissionRequest) GetAppCode() string { // CheckSpeakPermissionResponse 返回当前用户是否允许发言。 type CheckSpeakPermissionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` unknownFields protoimpl.UnknownFields - - Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckSpeakPermissionResponse) Reset() { @@ -10039,15 +9916,14 @@ func (x *CheckSpeakPermissionResponse) GetRoomVersion() int64 { // VerifyRoomPresenceRequest 让外部 IM 入口在进群前确认用户业务上仍在房间内。 type VerifyRoomPresenceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SessionId string `protobuf:"bytes,3,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SessionId string `protobuf:"bytes,3,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *VerifyRoomPresenceRequest) Reset() { @@ -10117,13 +9993,12 @@ func (x *VerifyRoomPresenceRequest) GetAppCode() string { // VerifyRoomPresenceResponse 返回用户是否仍然属于该房间。 type VerifyRoomPresenceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Present bool `protobuf:"varint,1,opt,name=present,proto3" json:"present,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` unknownFields protoimpl.UnknownFields - - Present bool `protobuf:"varint,1,opt,name=present,proto3" json:"present,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *VerifyRoomPresenceResponse) Reset() { @@ -10180,12 +10055,11 @@ func (x *VerifyRoomPresenceResponse) GetRoomVersion() int64 { // ResolveRoomAppCodeRequest 仅供已验签的三方回调按全局 room_id 解析租户。 // 该入口不接受客户端 app_code,避免固定 URL 参数把 Fami 事件错误路由到 Lalu。 type ResolveRoomAppCodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResolveRoomAppCodeRequest) Reset() { @@ -10233,11 +10107,10 @@ func (x *ResolveRoomAppCodeRequest) GetRoomId() string { } type ResolveRoomAppCodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResolveRoomAppCodeResponse) Reset() { @@ -10281,17 +10154,14 @@ func (x *ResolveRoomAppCodeResponse) GetAppCode() string { // visible_region_id 是 gateway 解析的实际查询区域:默认取 viewer 区域,显式筛选时取已校验的 filter_region_id。 // gateway 同时写 filter_region_id 绑定游标;客户端不能直接构造任一内部字段。 type ListRoomsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` - Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` - Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` + Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` // country_code 是可选国家筛选值;gateway 必须先确认它属于 active 区域。 CountryCode string `protobuf:"bytes,8,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` // viewer_country_code 是当前用户国家,用于 All/区域列表的本国家优先排序。 @@ -10300,6 +10170,8 @@ type ListRoomsRequest struct { AllVisibleRegions bool `protobuf:"varint,10,opt,name=all_visible_regions,json=allVisibleRegions,proto3" json:"all_visible_regions,omitempty"` // filter_region_id 是 gateway 校验过的 active 区域筛选;它与 all_visible_regions/country_code 互斥。 FilterRegionId int64 `protobuf:"varint,11,opt,name=filter_region_id,json=filterRegionId,proto3" json:"filter_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRoomsRequest) Reset() { @@ -10412,17 +10284,16 @@ func (x *ListRoomsRequest) GetFilterRegionId() int64 { // ListRoomsByOwnersRequest 查询一组房主名下 active 房间。 // owner_user_ids 必须由 gateway 根据上游业务归属注入,客户端不能直接提交任意房主集合。 type ListRoomsByOwnersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + OwnerUserIds []int64 `protobuf:"varint,3,rep,packed,name=owner_user_ids,json=ownerUserIds,proto3" json:"owner_user_ids,omitempty"` + Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` + Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - OwnerUserIds []int64 `protobuf:"varint,3,rep,packed,name=owner_user_ids,json=ownerUserIds,proto3" json:"owner_user_ids,omitempty"` - Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` - Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` - Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomsByOwnersRequest) Reset() { @@ -10507,19 +10378,18 @@ func (x *ListRoomsByOwnersRequest) GetQuery() string { // ListRoomFeedsRequest 查询 Mine 页 visited/friend/following/followed 房间流。 // 它和公共房间发现列表分离,避免把用户关系流误建模成房间全集过滤。 type ListRoomFeedsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` - Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` - Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` - Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ViewerUserId int64 `protobuf:"varint,2,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + VisibleRegionId int64 `protobuf:"varint,3,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + Tab string `protobuf:"bytes,4,opt,name=tab,proto3" json:"tab,omitempty"` + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` + Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` + Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` // related_users 只用于 friend/following;关系事实由 gateway 从 user-service 读取后传入。 - RelatedUsers []*RoomFeedRelatedUser `protobuf:"bytes,8,rep,name=related_users,json=relatedUsers,proto3" json:"related_users,omitempty"` + RelatedUsers []*RoomFeedRelatedUser `protobuf:"bytes,8,rep,name=related_users,json=relatedUsers,proto3" json:"related_users,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRoomFeedsRequest) Reset() { @@ -10610,14 +10480,13 @@ func (x *ListRoomFeedsRequest) GetRelatedUsers() []*RoomFeedRelatedUser { // ListRoomGiftLeaderboardRequest 查询当前 UTC 周期内的房间金币消耗榜。 type ListRoomGiftLeaderboardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Period string `protobuf:"bytes,2,opt,name=period,proto3" json:"period,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Period string `protobuf:"bytes,2,opt,name=period,proto3" json:"period,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomGiftLeaderboardRequest) Reset() { @@ -10680,12 +10549,11 @@ func (x *ListRoomGiftLeaderboardRequest) GetPageSize() int32 { // RoomFeedRelatedUser 是 Mine 关系房间流的排序输入,不让 room-service 持有好友/关注事实。 type RoomFeedRelatedUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RelationUpdatedAtMs int64 `protobuf:"varint,2,opt,name=relation_updated_at_ms,json=relationUpdatedAtMs,proto3" json:"relation_updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RelationUpdatedAtMs int64 `protobuf:"varint,2,opt,name=relation_updated_at_ms,json=relationUpdatedAtMs,proto3" json:"relation_updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomFeedRelatedUser) Reset() { @@ -10734,25 +10602,24 @@ func (x *RoomFeedRelatedUser) GetRelationUpdatedAtMs() int64 { // RoomListItem 是房间发现页卡片读模型,不承载完整 Room Cell 状态。 type RoomListItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` - CoverUrl string `protobuf:"bytes,5,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` - Mode string `protobuf:"bytes,6,opt,name=mode,proto3" json:"mode,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Heat int64 `protobuf:"varint,8,opt,name=heat,proto3" json:"heat,omitempty"` - OnlineCount int32 `protobuf:"varint,9,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` - SeatCount int32 `protobuf:"varint,10,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` - OccupiedSeatCount int32 `protobuf:"varint,11,opt,name=occupied_seat_count,json=occupiedSeatCount,proto3" json:"occupied_seat_count,omitempty"` - VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` - AppCode string `protobuf:"bytes,13,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RoomShortId string `protobuf:"bytes,14,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` - Locked bool `protobuf:"varint,15,opt,name=locked,proto3" json:"locked,omitempty"` - CountryCode string `protobuf:"bytes,16,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + CoverUrl string `protobuf:"bytes,5,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` + Mode string `protobuf:"bytes,6,opt,name=mode,proto3" json:"mode,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Heat int64 `protobuf:"varint,8,opt,name=heat,proto3" json:"heat,omitempty"` + OnlineCount int32 `protobuf:"varint,9,opt,name=online_count,json=onlineCount,proto3" json:"online_count,omitempty"` + SeatCount int32 `protobuf:"varint,10,opt,name=seat_count,json=seatCount,proto3" json:"seat_count,omitempty"` + OccupiedSeatCount int32 `protobuf:"varint,11,opt,name=occupied_seat_count,json=occupiedSeatCount,proto3" json:"occupied_seat_count,omitempty"` + VisibleRegionId int64 `protobuf:"varint,12,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + AppCode string `protobuf:"bytes,13,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RoomShortId string `protobuf:"bytes,14,opt,name=room_short_id,json=roomShortId,proto3" json:"room_short_id,omitempty"` + Locked bool `protobuf:"varint,15,opt,name=locked,proto3" json:"locked,omitempty"` + CountryCode string `protobuf:"bytes,16,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomListItem) Reset() { @@ -10892,12 +10759,11 @@ func (x *RoomListItem) GetCountryCode() string { // ListRoomsResponse 返回一页房间卡片和下一页不透明 cursor。 type ListRoomsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rooms []*RoomListItem `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` unknownFields protoimpl.UnknownFields - - Rooms []*RoomListItem `protobuf:"bytes,1,rep,name=rooms,proto3" json:"rooms,omitempty"` - NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomsResponse) Reset() { @@ -10946,14 +10812,13 @@ func (x *ListRoomsResponse) GetNextCursor() string { // RoomGiftLeaderboardItem 是跨房间金币消耗榜卡片;score 只表达该周期房间礼物金币消耗。 type RoomGiftLeaderboardItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + CoinSpent int64 `protobuf:"varint,3,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + Room *RoomListItem `protobuf:"bytes,4,opt,name=room,proto3" json:"room,omitempty"` unknownFields protoimpl.UnknownFields - - Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - CoinSpent int64 `protobuf:"varint,3,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - Room *RoomListItem `protobuf:"bytes,4,opt,name=room,proto3" json:"room,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoomGiftLeaderboardItem) Reset() { @@ -11016,16 +10881,15 @@ func (x *RoomGiftLeaderboardItem) GetRoom() *RoomListItem { // ListRoomGiftLeaderboardResponse 返回当前 UTC 周期房间金币榜。 type ListRoomGiftLeaderboardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*RoomGiftLeaderboardItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + Period string `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"` + StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,6,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*RoomGiftLeaderboardItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - Period string `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"` - StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,6,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomGiftLeaderboardResponse) Reset() { @@ -11102,15 +10966,14 @@ func (x *ListRoomGiftLeaderboardResponse) GetServerTimeMs() int64 { // ListRoomContributionRankRequest 查询单房间内用户送礼贡献周期榜。 type ListRoomContributionRankRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Period string `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"` + Limit int32 `protobuf:"varint,4,opt,name=limit,proto3" json:"limit,omitempty"` + ViewerUserId int64 `protobuf:"varint,5,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Period string `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"` - Limit int32 `protobuf:"varint,4,opt,name=limit,proto3" json:"limit,omitempty"` - ViewerUserId int64 `protobuf:"varint,5,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomContributionRankRequest) Reset() { @@ -11180,17 +11043,16 @@ func (x *ListRoomContributionRankRequest) GetViewerUserId() int64 { // ListRoomContributionRankResponse 返回单房间内用户送礼贡献周期榜。 type ListRoomContributionRankResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Period string `protobuf:"bytes,2,opt,name=period,proto3" json:"period,omitempty"` + StartAtMs int64 `protobuf:"varint,3,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,4,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + Items []*RoomContributionRankItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` + Total int64 `protobuf:"varint,6,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,7,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Period string `protobuf:"bytes,2,opt,name=period,proto3" json:"period,omitempty"` - StartAtMs int64 `protobuf:"varint,3,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,4,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` - Items []*RoomContributionRankItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` - Total int64 `protobuf:"varint,6,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,7,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomContributionRankResponse) Reset() { @@ -11275,12 +11137,11 @@ func (x *ListRoomContributionRankResponse) GetServerTimeMs() int64 { // GetMyRoomRequest 查询当前用户自己创建的房间。 // 该查询必须由 gateway 写入鉴权后的 owner_user_id,不能从客户端接收用户 ID。 type GetMyRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyRoomRequest) Reset() { @@ -11330,13 +11191,12 @@ func (x *GetMyRoomRequest) GetOwnerUserId() int64 { // GetMyRoomResponse 返回 Mine 顶部“我的房间”权威卡片。 // 它直接读取 rooms 元数据并用 Room Cell 快照补充实时卡片字段,不依赖发现页投影是否已经写入。 type GetMyRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + HasRoom bool `protobuf:"varint,1,opt,name=has_room,json=hasRoom,proto3" json:"has_room,omitempty"` + Room *RoomListItem `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - HasRoom bool `protobuf:"varint,1,opt,name=has_room,json=hasRoom,proto3" json:"has_room,omitempty"` - Room *RoomListItem `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyRoomResponse) Reset() { @@ -11393,12 +11253,11 @@ func (x *GetMyRoomResponse) GetServerTimeMs() int64 { // GetCurrentRoomRequest 查询当前用户是否仍有可恢复的房间 presence。 // 该查询必须由 gateway 写入鉴权后的 user_id,客户端不能提交 user_id。 type GetCurrentRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCurrentRoomRequest) Reset() { @@ -11448,19 +11307,18 @@ func (x *GetCurrentRoomRequest) GetUserId() int64 { // GetCurrentRoomResponse 是 App 启动、回前台和网络恢复时的房间恢复探测结果。 // 它只表达是否需要恢复,不会隐式 JoinRoom 或刷新 presence。 type GetCurrentRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HasCurrentRoom bool `protobuf:"varint,1,opt,name=has_current_room,json=hasCurrentRoom,proto3" json:"has_current_room,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` - Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - MicSessionId string `protobuf:"bytes,5,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` - PublishState string `protobuf:"bytes,6,opt,name=publish_state,json=publishState,proto3" json:"publish_state,omitempty"` - NeedJoinImGroup bool `protobuf:"varint,7,opt,name=need_join_im_group,json=needJoinImGroup,proto3" json:"need_join_im_group,omitempty"` - NeedRtcToken bool `protobuf:"varint,8,opt,name=need_rtc_token,json=needRtcToken,proto3" json:"need_rtc_token,omitempty"` - ServerTimeMs int64 `protobuf:"varint,9,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + HasCurrentRoom bool `protobuf:"varint,1,opt,name=has_current_room,json=hasCurrentRoom,proto3" json:"has_current_room,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RoomVersion int64 `protobuf:"varint,3,opt,name=room_version,json=roomVersion,proto3" json:"room_version,omitempty"` + Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + MicSessionId string `protobuf:"bytes,5,opt,name=mic_session_id,json=micSessionId,proto3" json:"mic_session_id,omitempty"` + PublishState string `protobuf:"bytes,6,opt,name=publish_state,json=publishState,proto3" json:"publish_state,omitempty"` + NeedJoinImGroup bool `protobuf:"varint,7,opt,name=need_join_im_group,json=needJoinImGroup,proto3" json:"need_join_im_group,omitempty"` + NeedRtcToken bool `protobuf:"varint,8,opt,name=need_rtc_token,json=needRtcToken,proto3" json:"need_rtc_token,omitempty"` + ServerTimeMs int64 `protobuf:"varint,9,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetCurrentRoomResponse) Reset() { @@ -11559,13 +11417,12 @@ func (x *GetCurrentRoomResponse) GetServerTimeMs() int64 { // GetRoomSnapshotRequest 主动读取当前房间完整快照。 // 该查询必须由 gateway 写入鉴权后的 viewer_user_id,客户端不能提交 viewer_user_id。 type GetRoomSnapshotRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomSnapshotRequest) Reset() { @@ -11621,14 +11478,13 @@ func (x *GetRoomSnapshotRequest) GetViewerUserId() int64 { // GetRoomSnapshotResponse 返回 Room Cell 当前快照;只读,不刷新 presence。 type GetRoomSnapshotResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Room *RoomSnapshot `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Room *RoomSnapshot `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` // is_followed 表达 viewer 是否已经关注该房间;它来自 room_follows 关系表,不属于 Room Cell 核心快照。 - IsFollowed bool `protobuf:"varint,3,opt,name=is_followed,json=isFollowed,proto3" json:"is_followed,omitempty"` + IsFollowed bool `protobuf:"varint,3,opt,name=is_followed,json=isFollowed,proto3" json:"is_followed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetRoomSnapshotResponse) Reset() { @@ -11685,13 +11541,12 @@ func (x *GetRoomSnapshotResponse) GetIsFollowed() bool { // GetRoomRocketRequest 主动读取当前房间火箭配置物料和进度状态。 // 该查询必须由 gateway 写入鉴权后的 viewer_user_id,客户端不能提交 viewer_user_id。 type GetRoomRocketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomRocketRequest) Reset() { @@ -11746,12 +11601,11 @@ func (x *GetRoomRocketRequest) GetViewerUserId() int64 { } type GetRoomRocketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rocket *RoomRocketInfo `protobuf:"bytes,1,opt,name=rocket,proto3" json:"rocket,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rocket *RoomRocketInfo `protobuf:"bytes,1,opt,name=rocket,proto3" json:"rocket,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoomRocketResponse) Reset() { @@ -11800,16 +11654,15 @@ func (x *GetRoomRocketResponse) GetServerTimeMs() int64 { // ListRoomOnlineUsersRequest 分页查询房间在线用户,不让客户端拉完整 RoomSnapshot 做列表分页。 type ListRoomOnlineUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Sort string `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - Sort string `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomOnlineUsersRequest) Reset() { @@ -11885,16 +11738,15 @@ func (x *ListRoomOnlineUsersRequest) GetSort() string { } type ListRoomOnlineUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Users []*RoomUser `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + Items []*RoomOnlineUser `protobuf:"bytes,6,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Users []*RoomUser `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - Items []*RoomOnlineUser `protobuf:"bytes,6,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomOnlineUsersResponse) Reset() { @@ -11971,17 +11823,16 @@ func (x *ListRoomOnlineUsersResponse) GetItems() []*RoomOnlineUser { // RoomBannedUser 是房间黑名单列表的轻量治理读模型;用户展示资料由 gateway 批量补齐。 type RoomBannedUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,3,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,3,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` // unban_at_ms 为 0 表示永久 ban;非 0 表示该 UTC 毫秒后自动允许重新进房。 - UnbanAtMs int64 `protobuf:"varint,4,opt,name=unban_at_ms,json=unbanAtMs,proto3" json:"unban_at_ms,omitempty"` - RemainingMs int64 `protobuf:"varint,5,opt,name=remaining_ms,json=remainingMs,proto3" json:"remaining_ms,omitempty"` - Permanent bool `protobuf:"varint,6,opt,name=permanent,proto3" json:"permanent,omitempty"` + UnbanAtMs int64 `protobuf:"varint,4,opt,name=unban_at_ms,json=unbanAtMs,proto3" json:"unban_at_ms,omitempty"` + RemainingMs int64 `protobuf:"varint,5,opt,name=remaining_ms,json=remainingMs,proto3" json:"remaining_ms,omitempty"` + Permanent bool `protobuf:"varint,6,opt,name=permanent,proto3" json:"permanent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoomBannedUser) Reset() { @@ -12058,15 +11909,14 @@ func (x *RoomBannedUser) GetPermanent() bool { // ListRoomBannedUsersRequest 分页查询房间当前仍有效的黑名单。 type ListRoomBannedUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,3,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomBannedUsersRequest) Reset() { @@ -12135,15 +11985,14 @@ func (x *ListRoomBannedUsersRequest) GetPageSize() int32 { } type ListRoomBannedUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*RoomBannedUser `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*RoomBannedUser `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoomBannedUsersResponse) Reset() { @@ -12214,13 +12063,12 @@ func (x *ListRoomBannedUsersResponse) GetServerTimeMs() int64 { // FollowRoomRequest 建立当前用户对房间的关注关系。 // 该关系是 room-service 的用户-房间低频关系事实,不进入 Room Cell command log。 type FollowRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FollowRoomRequest) Reset() { @@ -12275,14 +12123,13 @@ func (x *FollowRoomRequest) GetUserId() int64 { } type FollowRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Followed bool `protobuf:"varint,2,opt,name=followed,proto3" json:"followed,omitempty"` + FollowedAtMs int64 `protobuf:"varint,3,opt,name=followed_at_ms,json=followedAtMs,proto3" json:"followed_at_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Followed bool `protobuf:"varint,2,opt,name=followed,proto3" json:"followed,omitempty"` - FollowedAtMs int64 `protobuf:"varint,3,opt,name=followed_at_ms,json=followedAtMs,proto3" json:"followed_at_ms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FollowRoomResponse) Reset() { @@ -12345,13 +12192,12 @@ func (x *FollowRoomResponse) GetServerTimeMs() int64 { // UnfollowRoomRequest 取消当前用户对房间的关注关系;未关注时按幂等成功处理。 type UnfollowRoomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnfollowRoomRequest) Reset() { @@ -12406,13 +12252,12 @@ func (x *UnfollowRoomRequest) GetUserId() int64 { } type UnfollowRoomResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + Followed bool `protobuf:"varint,2,opt,name=followed,proto3" json:"followed,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - Followed bool `protobuf:"varint,2,opt,name=followed,proto3" json:"followed,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnfollowRoomResponse) Reset() { @@ -12469,16 +12314,15 @@ func (x *UnfollowRoomResponse) GetServerTimeMs() int64 { // SendGiftLuckyHit 是 V2 微批中需要逐次播放的精简中奖命中。 // 声明追加在文件尾以保持既有 protobuf message index 稳定;字段可在前面的消息中正常引用。 type SendGiftLuckyHit struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftIndex int32 `protobuf:"varint,1,opt,name=gift_index,json=giftIndex,proto3" json:"gift_index,omitempty"` - DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - SelectedTierId string `protobuf:"bytes,4,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - MultiplierPpm int64 `protobuf:"varint,5,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` - RewardCoins int64 `protobuf:"varint,6,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftIndex int32 `protobuf:"varint,1,opt,name=gift_index,json=giftIndex,proto3" json:"gift_index,omitempty"` + DrawId string `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + SelectedTierId string `protobuf:"bytes,4,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + MultiplierPpm int64 `protobuf:"varint,5,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"` + RewardCoins int64 `protobuf:"varint,6,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftLuckyHit) Reset() { @@ -12557,21 +12401,18 @@ func (x *SendGiftLuckyHit) GetRewardCoins() int64 { // 旧客户端继续读取 SendGiftResponse 顶层 V1 字段;V2 客户端只以该对象判断幂等、 // 提交顺序和实际结算数量,避免网络重试时拿“当前房间快照”冒充原始结算结果。 type SendGiftResultV2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ApiVersion int32 `protobuf:"varint,1,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ComboSessionId string `protobuf:"bytes,3,opt,name=combo_session_id,json=comboSessionId,proto3" json:"combo_session_id,omitempty"` - BatchSeq int64 `protobuf:"varint,4,opt,name=batch_seq,json=batchSeq,proto3" json:"batch_seq,omitempty"` - IdempotentReplay bool `protobuf:"varint,5,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` - CommittedRoomVersion int64 `protobuf:"varint,6,opt,name=committed_room_version,json=committedRoomVersion,proto3" json:"committed_room_version,omitempty"` - BillingReceiptId string `protobuf:"bytes,7,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,8,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - GiftIncomeBalanceAfter int64 `protobuf:"varint,9,opt,name=gift_income_balance_after,json=giftIncomeBalanceAfter,proto3" json:"gift_income_balance_after,omitempty"` - SettledGiftCount int32 `protobuf:"varint,10,opt,name=settled_gift_count,json=settledGiftCount,proto3" json:"settled_gift_count,omitempty"` - SettledTargetUserIds []int64 `protobuf:"varint,11,rep,packed,name=settled_target_user_ids,json=settledTargetUserIds,proto3" json:"settled_target_user_ids,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ApiVersion int32 `protobuf:"varint,1,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ComboSessionId string `protobuf:"bytes,3,opt,name=combo_session_id,json=comboSessionId,proto3" json:"combo_session_id,omitempty"` + BatchSeq int64 `protobuf:"varint,4,opt,name=batch_seq,json=batchSeq,proto3" json:"batch_seq,omitempty"` + IdempotentReplay bool `protobuf:"varint,5,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` + CommittedRoomVersion int64 `protobuf:"varint,6,opt,name=committed_room_version,json=committedRoomVersion,proto3" json:"committed_room_version,omitempty"` + BillingReceiptId string `protobuf:"bytes,7,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,8,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + GiftIncomeBalanceAfter int64 `protobuf:"varint,9,opt,name=gift_income_balance_after,json=giftIncomeBalanceAfter,proto3" json:"gift_income_balance_after,omitempty"` + SettledGiftCount int32 `protobuf:"varint,10,opt,name=settled_gift_count,json=settledGiftCount,proto3" json:"settled_gift_count,omitempty"` + SettledTargetUserIds []int64 `protobuf:"varint,11,rep,packed,name=settled_target_user_ids,json=settledTargetUserIds,proto3" json:"settled_target_user_ids,omitempty"` // balance_version 是 sender 被扣费资产在该批次完成后的 wallet 账户版本;幂等重放保持首次值。 BalanceVersion int64 `protobuf:"varint,12,opt,name=balance_version,json=balanceVersion,proto3" json:"balance_version,omitempty"` LuckyGift *LuckyGiftDrawResult `protobuf:"bytes,13,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"` @@ -12582,6 +12423,8 @@ type SendGiftResultV2 struct { GiftRank []*RankItem `protobuf:"bytes,18,rep,name=gift_rank,json=giftRank,proto3" json:"gift_rank,omitempty"` // operation_status 当前成功响应固定为 committed;该字段让 V2 契约可以明确区分未来的异步受理态。 OperationStatus string `protobuf:"bytes,19,opt,name=operation_status,json=operationStatus,proto3" json:"operation_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SendGiftResultV2) Reset() { @@ -12749,2719 +12592,1184 @@ func (x *SendGiftResultV2) GetOperationStatus() string { var File_proto_room_v1_room_proto protoreflect.FileDescriptor -var file_proto_room_v1_room_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x6f, 0x6f, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x22, 0x88, 0x02, 0x0a, 0x0b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x73, - 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x22, 0x72, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x08, 0x52, 0x6f, 0x6f, - 0x6d, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x25, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, - 0x6e, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, - 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x0e, 0x52, - 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, - 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x25, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0xd1, 0x03, 0x0a, 0x09, 0x53, - 0x65, 0x61, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, - 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, - 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x63, 0x5f, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x4d, 0x73, 0x12, 0x37, 0x0a, - 0x18, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x15, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x1a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x6c, 0x61, 0x73, 0x74, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x63, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x69, 0x63, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x69, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, - 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7c, - 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, - 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa0, 0x01, 0x0a, - 0x18, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xee, 0x05, 0x0a, 0x13, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, - 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, - 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, - 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, - 0x70, 0x70, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, - 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x67, 0x65, 0x46, 0x65, - 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x68, 0x69, 0x67, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x68, - 0x69, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, - 0x66, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x48, 0x69, 0x74, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, - 0x22, 0xda, 0x01, 0x0a, 0x14, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0xd3, 0x03, - 0x0a, 0x0f, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x75, 0x65, 0x6c, 0x5f, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x66, 0x75, 0x65, 0x6c, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, - 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, - 0x72, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, - 0x12, 0x4b, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0d, - 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x46, 0x0a, - 0x0c, 0x74, 0x6f, 0x70, 0x31, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x74, 0x6f, 0x70, 0x31, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, - 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x0e, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x22, 0x94, 0x02, 0x0a, 0x15, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x69, 0x0a, 0x16, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x75, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x75, 0x65, - 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe7, 0x02, 0x0a, 0x17, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x75, 0x65, 0x6c, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x66, 0x75, - 0x65, 0x6c, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, - 0x67, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, 0x65, 0x74, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x31, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x31, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x67, - 0x6e, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x22, - 0xaa, 0x05, 0x0a, 0x0f, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x75, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x75, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, - 0x75, 0x65, 0x6c, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x66, 0x75, 0x65, 0x6c, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x67, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x20, - 0x0a, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x31, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, - 0x70, 0x31, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x69, - 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x51, 0x0a, - 0x10, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, - 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, - 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, - 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xed, 0x02, 0x0a, - 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x12, 0x34, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x2c, - 0x0a, 0x12, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, - 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x2e, 0x0a, 0x13, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0xd2, 0x01, 0x0a, - 0x16, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x46, - 0x75, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x70, 0x70, - 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, - 0x66, 0x75, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x46, 0x75, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x64, 0x22, 0xee, 0x04, 0x0a, 0x15, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x65, 0x6c, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, - 0x65, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, - 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x27, 0x0a, - 0x0f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, - 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x4d, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x11, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x36, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x0f, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x66, 0x75, 0x65, 0x6c, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x47, 0x69, 0x66, 0x74, 0x46, 0x75, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x67, 0x69, - 0x66, 0x74, 0x46, 0x75, 0x65, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0x51, 0x0a, 0x1f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x86, 0x01, 0x0a, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xad, - 0x01, 0x0a, 0x22, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x89, - 0x01, 0x0a, 0x23, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x13, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x13, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x61, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x65, 0x61, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x4f, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x82, 0x01, 0x0a, 0x1e, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb0, - 0x01, 0x0a, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, - 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, - 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x85, 0x01, 0x0a, 0x21, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x69, 0x0a, 0x1e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, - 0x0a, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x48, 0x75, - 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, - 0x78, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xd8, 0x0a, 0x0a, - 0x19, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x39, 0x0a, 0x19, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x16, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x4d, 0x61, 0x78, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x6d, 0x46, - 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x6f, 0x70, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x29, 0x0a, - 0x11, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x53, - 0x74, 0x61, 0x79, 0x4d, 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x5f, 0x73, 0x74, 0x61, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x79, 0x4d, 0x61, - 0x78, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x11, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4d, - 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x4d, 0x61, 0x78, 0x4d, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x47, 0x69, - 0x66, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0c, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, - 0x14, 0x73, 0x75, 0x70, 0x65, 0x72, 0x5f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, - 0x65, 0x72, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x73, 0x12, 0x26, - 0x0a, 0x0f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x6d, 0x69, - 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x43, 0x6f, - 0x6d, 0x62, 0x6f, 0x4d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, - 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x4d, 0x61, 0x78, 0x12, 0x2b, - 0x0a, 0x12, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x69, - 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, - 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x47, 0x69, 0x66, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x73, 0x12, 0x52, 0x0a, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x48, - 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x3c, 0x0a, - 0x1b, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x17, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x6e, - 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x17, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x4d, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x6d, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x33, - 0x0a, 0x16, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x61, - 0x78, 0x5f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, - 0x72, 0x6f, 0x6f, 0x6d, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, - 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x55, 0x0a, 0x23, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x47, 0x65, 0x74, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x8e, - 0x01, 0x0a, 0x24, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x48, 0x75, 0x6d, 0x61, 0x6e, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x48, 0x75, 0x6d, - 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, - 0xb5, 0x01, 0x0a, 0x26, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x27, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xea, 0x01, 0x0a, 0x10, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xfb, 0x03, 0x0a, 0x0c, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, - 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, - 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, - 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, - 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x18, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x88, 0x01, - 0x0a, 0x19, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x70, - 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9d, 0x02, 0x0a, 0x19, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, - 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x70, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x71, 0x0a, 0x1a, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x70, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, - 0x52, 0x03, 0x70, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7d, 0x0a, 0x19, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x1a, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x70, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x69, 0x6e, 0x52, 0x03, 0x70, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9c, 0x04, - 0x0a, 0x16, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x69, 0x66, 0x74, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x67, 0x69, 0x66, 0x74, - 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, - 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x4d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x75, 0x63, 0x6b, - 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x43, 0x6f, 0x6d, 0x62, 0x6f, 0x4d, 0x61, 0x78, - 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, - 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x2b, 0x0a, - 0x12, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x61, 0x78, - 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x50, 0x61, 0x75, 0x73, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x79, - 0x4d, 0x69, 0x6e, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x73, - 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4d, 0x69, 0x6e, 0x4d, - 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x11, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4d, 0x61, 0x78, - 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, - 0x78, 0x47, 0x69, 0x66, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x22, 0xbc, 0x04, 0x0a, - 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, - 0x0a, 0x13, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x67, - 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2c, - 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x1a, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9b, 0x04, 0x0a, 0x1b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x13, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x10, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x15, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, - 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, - 0x61, 0x78, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x6f, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, - 0x75, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x1c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x1e, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x22, 0x7a, 0x0a, 0x1f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x62, - 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xc3, 0x01, - 0x0a, 0x22, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x49, 0x64, 0x22, 0x9e, 0x01, 0x0a, 0x23, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x72, 0x0a, 0x25, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x26, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x63, - 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xf8, 0x06, 0x0a, 0x0c, 0x52, 0x6f, - 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x09, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, - 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x08, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x73, 0x12, 0x3a, 0x0a, - 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x6f, 0x6e, - 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, - 0x20, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x0a, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x75, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, 0x61, - 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x43, 0x0a, 0x08, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x45, - 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x45, 0x78, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x68, 0x65, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, - 0x6b, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x62, 0x61, 0x6e, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, - 0x45, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x81, 0x01, 0x0a, - 0x19, 0x53, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, - 0x22, 0x86, 0x01, 0x0a, 0x1a, 0x53, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x42, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x1a, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x36, 0x0a, - 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x6f, 0x0a, 0x18, 0x53, - 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, - 0x19, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, - 0x6d, 0x12, 0x42, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xa2, 0x03, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, - 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x7b, 0x0a, 0x12, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0xa8, 0x02, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, - 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x72, - 0x6f, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x6d, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, - 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x48, 0x03, 0x52, 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x42, 0x13, - 0x0a, 0x11, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0xc7, 0x02, 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x6d, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, - 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x33, 0x0a, 0x16, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xe4, 0x03, 0x0a, 0x0f, 0x4a, 0x6f, 0x69, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x0d, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x56, 0x65, 0x68, 0x69, 0x63, - 0x6c, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, - 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x73, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x12, 0x59, 0x0a, 0x15, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x13, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x22, 0xa2, 0x01, - 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, - 0x69, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x6f, 0x6f, 0x6d, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0xf4, 0x01, 0x0a, 0x10, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2b, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, - 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x4c, 0x0a, 0x0d, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x56, 0x69, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x0c, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x69, 0x70, 0x22, 0x46, 0x0a, 0x14, 0x52, 0x6f, 0x6f, - 0x6d, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x22, 0xab, 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x2f, - 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, - 0x42, 0x0a, 0x10, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, - 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, - 0x5a, 0x0a, 0x10, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x7a, 0x0a, 0x11, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x8f, 0x05, 0x0a, 0x11, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, - 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x6f, 0x6f, 0x6d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x6f, - 0x73, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x12, - 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, - 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x63, 0x6c, 0x6f, - 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x42, - 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6c, - 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x65, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x68, 0x65, 0x61, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x5f, 0x73, - 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xba, 0x02, 0x0a, 0x15, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x5e, 0x0a, 0x13, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x14, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, - 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x8c, 0x04, 0x0a, 0x16, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, - 0x20, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x88, 0x01, - 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, - 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x05, 0x52, 0x0f, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x12, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x10, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x14, 0x0a, 0x12, 0x5f, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x17, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, - 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x82, 0x01, 0x0a, 0x16, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x80, 0x01, 0x0a, 0x17, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x22, 0xb4, 0x01, 0x0a, 0x0c, 0x4d, 0x69, 0x63, 0x55, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x5b, 0x0a, - 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x0d, 0x4d, - 0x69, 0x63, 0x55, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x2f, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, - 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x65, - 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, - 0x4d, 0x73, 0x22, 0xdb, 0x01, 0x0a, 0x0e, 0x4d, 0x69, 0x63, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x22, 0x91, 0x01, 0x0a, 0x0f, 0x4d, 0x69, 0x63, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, - 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, - 0x74, 0x4e, 0x6f, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0xe2, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, - 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x5b, 0x0a, 0x16, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x7e, 0x0a, 0x15, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0xd5, 0x02, 0x0a, 0x1b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4d, 0x69, 0x63, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x6f, 0x6f, - 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x14, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4d, 0x69, 0x63, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, - 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, - 0x6f, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, - 0x6f, 0x6d, 0x22, 0x91, 0x01, 0x0a, 0x13, 0x4d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x14, 0x4d, 0x69, 0x63, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x2f, - 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, - 0x2d, 0x0a, 0x13, 0x6d, 0x69, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, 0x69, - 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xdc, - 0x01, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, - 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, - 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x94, 0x01, - 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, - 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, - 0x74, 0x4e, 0x6f, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x8b, 0x02, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x54, - 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x54, 0x43, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x2f, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x78, 0x0a, 0x15, - 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x6e, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x61, 0x74, 0x4e, 0x6f, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x22, 0x7f, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, - 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x61, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7f, 0x0a, 0x16, 0x53, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, - 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x7c, 0x0a, 0x16, 0x53, - 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x17, 0x53, 0x65, - 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x85, 0x01, 0x0a, - 0x13, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x22, 0x7d, 0x0a, 0x0f, 0x4d, 0x75, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, - 0x65, 0x64, 0x22, 0x79, 0x0a, 0x10, 0x4d, 0x75, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0x88, 0x01, - 0x0a, 0x0f, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x10, 0x4b, 0x69, 0x63, - 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x74, 0x63, 0x5f, 0x6b, 0x69, 0x63, 0x6b, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x74, 0x63, 0x4b, 0x69, 0x63, - 0x6b, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x74, 0x63, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x74, 0x63, - 0x4b, 0x69, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x68, 0x0a, 0x10, 0x55, 0x6e, 0x62, - 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x11, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, - 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, - 0xd4, 0x01, 0x0a, 0x16, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x76, 0x69, 0x63, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x61, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x52, 0x6f, 0x6f, 0x6d, 0x22, 0x88, 0x02, 0x0a, 0x17, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x76, 0x69, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, 0x64, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, - 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x34, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x74, 0x63, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x72, 0x74, 0x63, 0x4b, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x72, - 0x74, 0x63, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x74, 0x63, 0x4b, 0x69, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0xd6, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x73, - 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x49, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x53, - 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x70, 0x72, - 0x65, 0x74, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x65, 0x74, - 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, - 0x8a, 0x04, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, - 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x41, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x1f, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x67, 0x69, 0x66, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x0a, 0x6c, 0x75, 0x63, - 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x22, 0xf4, 0x06, 0x0a, - 0x14, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x33, 0x0a, 0x16, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, - 0x74, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x12, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, - 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x69, 0x66, 0x74, 0x49, 0x63, 0x6f, - 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x61, 0x6e, 0x69, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x67, 0x69, 0x66, 0x74, 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, - 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x67, - 0x69, 0x66, 0x74, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x26, - 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x3c, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x22, 0xa9, 0x07, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x17, - 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, - 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, - 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, - 0x73, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, - 0x6f, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x16, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, - 0x66, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x14, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x5d, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, - 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x15, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x62, - 0x6f, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x65, 0x71, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x22, - 0x9e, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x68, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x6f, 0x6f, - 0x6d, 0x48, 0x65, 0x61, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, 0x61, - 0x6e, 0x6b, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x2f, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x36, 0x0a, 0x06, - 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, - 0x66, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x6c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x5f, 0x67, 0x69, 0x66, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, - 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x0a, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x19, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x67, - 0x69, 0x66, 0x74, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x52, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, - 0x2f, 0x0a, 0x02, 0x76, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x56, 0x32, 0x52, 0x02, 0x76, 0x32, - 0x22, 0x6a, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x73, 0x0a, 0x1c, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x19, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f, 0x6f, 0x6d, - 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x71, 0x0a, 0x1a, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, - 0x19, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x22, 0x37, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x97, 0x03, 0x0a, 0x10, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x74, 0x61, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, - 0x6c, 0x6c, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x73, 0x42, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x74, 0x61, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x62, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x22, 0xb7, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x46, 0x65, 0x65, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, - 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x74, 0x61, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, - 0x62, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x47, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x99, - 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x63, 0x0a, 0x13, 0x52, 0x6f, - 0x6f, 0x6d, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xd6, 0x03, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x65, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x68, 0x65, 0x61, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x5f, 0x73, - 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, - 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x67, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, - 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x22, 0x96, 0x01, 0x0a, 0x17, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, - 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, - 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x22, 0xef, 0x01, 0x0a, 0x1f, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, - 0x6e, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xbe, 0x01, 0x0a, - 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8a, 0x02, - 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x3d, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x66, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x4d, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x22, - 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, - 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x52, - 0x6f, 0x6f, 0x6d, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x60, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xd6, 0x02, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, 0x73, 0x5f, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x69, 0x63, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x12, - 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x69, 0x6d, 0x5f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x4a, 0x6f, - 0x69, 0x6e, 0x49, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x65, - 0x64, 0x5f, 0x72, 0x74, 0x63, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x74, 0x63, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, - 0x91, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x72, - 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, - 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x73, 0x6f, 0x72, 0x74, 0x22, 0xee, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x6e, 0x62, - 0x61, 0x6e, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0xbc, 0x01, 0x0a, 0x1a, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x75, 0x0a, 0x11, 0x46, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x77, 0x0a, 0x13, 0x55, 0x6e, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x14, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x47, - 0x69, 0x66, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x48, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x67, 0x69, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, - 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, - 0x77, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, - 0x72, 0x5f, 0x70, 0x70, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x50, 0x70, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x22, 0xb1, 0x07, - 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x56, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x5f, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x62, 0x6f, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x64, 0x65, - 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, - 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x19, 0x67, 0x69, 0x66, 0x74, - 0x5f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x67, 0x69, 0x66, - 0x74, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, - 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x14, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x41, 0x0a, 0x0a, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x44, - 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b, 0x79, - 0x47, 0x69, 0x66, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x5f, 0x67, 0x69, - 0x66, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, - 0x69, 0x66, 0x74, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0a, 0x6c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x6c, 0x75, 0x63, - 0x6b, 0x79, 0x5f, 0x68, 0x69, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x48, 0x69, 0x74, 0x52, 0x09, - 0x6c, 0x75, 0x63, 0x6b, 0x79, 0x48, 0x69, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x74, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x74, - 0x12, 0x34, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x18, 0x12, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x67, 0x69, - 0x66, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x32, 0xb2, 0x1b, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x11, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x53, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x42, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, - 0x0a, 0x11, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4e, 0x0a, 0x09, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1f, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4e, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1f, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x6f, 0x73, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x60, 0x0a, 0x0f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, 0x0a, 0x19, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x1f, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x12, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x50, 0x69, 0x6e, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x12, 0x28, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x14, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x2a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x17, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x74, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, - 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x77, - 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x31, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x4d, 0x69, 0x63, 0x55, 0x70, 0x12, 0x1b, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x69, 0x63, 0x55, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x63, 0x55, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x07, 0x4d, 0x69, 0x63, - 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x63, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x63, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x63, - 0x53, 0x65, 0x61, 0x74, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x63, 0x53, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x4d, 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6f, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4d, 0x69, 0x63, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4d, - 0x69, 0x63, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4d, 0x69, 0x63, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x57, 0x0a, 0x0c, 0x4d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x53, 0x65, 0x74, - 0x4d, 0x69, 0x63, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x4d, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, - 0x4d, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x54, 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x52, 0x54, 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x54, 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x4d, - 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, - 0x63, 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x53, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x4d, 0x75, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, - 0x0a, 0x08, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x55, - 0x6e, 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x76, 0x69, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x25, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x76, 0x69, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x76, 0x69, 0x63, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, - 0x08, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, 0x66, 0x74, 0x12, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x46, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, - 0x0c, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x22, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd9, 0x02, 0x0a, 0x10, 0x52, 0x6f, 0x6f, 0x6d, 0x47, - 0x75, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x14, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x32, 0xe4, 0x10, 0x0a, 0x10, 0x52, 0x6f, 0x6f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x7b, 0x0a, 0x18, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x16, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x53, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x1c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, 0x74, 0x48, 0x75, 0x6d, - 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x65, - 0x74, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, - 0x11, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, - 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, - 0x50, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x29, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, - 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, - 0x42, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x73, 0x42, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, - 0x65, 0x65, 0x64, 0x73, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x65, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, - 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x17, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, - 0x69, 0x66, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x69, - 0x66, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, - 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, - 0x6b, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x12, - 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4d, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, - 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, - 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x26, 0x5a, 0x24, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x72, 0x6f, 0x6f, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x6f, 0x6f, 0x6d, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_proto_room_v1_room_proto_rawDesc = "" + + "\n" + + "\x18proto/room/v1/room.proto\x12\rhyapp.room.v1\"\x88\x02\n" + + "\vRequestMeta\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\ractor_user_id\x18\x03 \x01(\x03R\vactorUserId\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12&\n" + + "\x0fgateway_node_id\x18\x05 \x01(\tR\rgatewayNodeId\x12\x1d\n" + + "\n" + + "session_id\x18\x06 \x01(\tR\tsessionId\x12\x1c\n" + + "\n" + + "sent_at_ms\x18\a \x01(\x03R\bsentAtMs\x12\x19\n" + + "\bapp_code\x18\b \x01(\tR\aappCode\"r\n" + + "\rCommandResult\x12\x18\n" + + "\aapplied\x18\x01 \x01(\bR\aapplied\x12!\n" + + "\froom_version\x18\x02 \x01(\x03R\vroomVersion\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x9f\x01\n" + + "\bRoomUser\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x12\n" + + "\x04role\x18\x02 \x01(\tR\x04role\x12 \n" + + "\fjoined_at_ms\x18\x03 \x01(\x03R\n" + + "joinedAtMs\x12%\n" + + "\x0flast_seen_at_ms\x18\x04 \x01(\x03R\flastSeenAtMs\x12\x1d\n" + + "\n" + + "gift_value\x18\x05 \x01(\x03R\tgiftValue\"\xdd\x01\n" + + "\x0eRoomOnlineUser\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x12\n" + + "\x04role\x18\x02 \x01(\tR\x04role\x12\x1b\n" + + "\troom_role\x18\x03 \x01(\tR\broomRole\x12\x1d\n" + + "\n" + + "gift_value\x18\x04 \x01(\x03R\tgiftValue\x12 \n" + + "\fjoined_at_ms\x18\x05 \x01(\x03R\n" + + "joinedAtMs\x12%\n" + + "\x0flast_seen_at_ms\x18\x06 \x01(\x03R\flastSeenAtMs\x12\x19\n" + + "\bis_owner\x18\a \x01(\bR\aisOwner\"\xd1\x03\n" + + "\tSeatState\x12\x17\n" + + "\aseat_no\x18\x01 \x01(\x05R\x06seatNo\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x16\n" + + "\x06locked\x18\x03 \x01(\bR\x06locked\x12#\n" + + "\rpublish_state\x18\x04 \x01(\tR\fpublishState\x12$\n" + + "\x0emic_session_id\x18\x05 \x01(\tR\fmicSessionId\x12.\n" + + "\x13publish_deadline_ms\x18\x06 \x01(\x03R\x11publishDeadlineMs\x127\n" + + "\x18mic_session_room_version\x18\a \x01(\x03R\x15micSessionRoomVersion\x12:\n" + + "\x1alast_publish_event_time_ms\x18\b \x01(\x03R\x16lastPublishEventTimeMs\x12\x1b\n" + + "\tmic_muted\x18\t \x01(\bR\bmicMuted\x12\x1f\n" + + "\vseat_status\x18\n" + + " \x01(\tR\n" + + "seatStatus\x12-\n" + + "\x13mic_heartbeat_at_ms\x18\v \x01(\x03R\x10micHeartbeatAtMs\x12\x1d\n" + + "\n" + + "gift_value\x18\f \x01(\x03R\tgiftValue\"|\n" + + "\bRankItem\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x02 \x01(\x03R\x05score\x12\x1d\n" + + "\n" + + "gift_value\x18\x03 \x01(\x03R\tgiftValue\x12\"\n" + + "\rupdated_at_ms\x18\x04 \x01(\x03R\vupdatedAtMs\"\xa0\x01\n" + + "\x18RoomContributionRankItem\x12\x12\n" + + "\x04rank\x18\x01 \x01(\x03R\x04rank\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x14\n" + + "\x05score\x18\x03 \x01(\x03R\x05score\x12\x1d\n" + + "\n" + + "gift_value\x18\x04 \x01(\x03R\tgiftValue\x12\"\n" + + "\rupdated_at_ms\x18\x05 \x01(\x03R\vupdatedAtMs\"\xee\x05\n" + + "\x13LuckyGiftDrawResult\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x17\n" + + "\adraw_id\x18\x02 \x01(\tR\x06drawId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x17\n" + + "\apool_id\x18\x04 \x01(\tR\x06poolId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12!\n" + + "\frule_version\x18\x06 \x01(\x03R\vruleVersion\x12'\n" + + "\x0fexperience_pool\x18\a \x01(\tR\x0eexperiencePool\x12(\n" + + "\x10selected_tier_id\x18\b \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\t \x01(\x03R\rmultiplierPpm\x12*\n" + + "\x11base_reward_coins\x18\n" + + " \x01(\x03R\x0fbaseRewardCoins\x124\n" + + "\x16effective_reward_coins\x18\v \x01(\x03R\x14effectiveRewardCoins\x12#\n" + + "\rreward_status\x18\f \x01(\tR\frewardStatus\x12%\n" + + "\x0estage_feedback\x18\r \x01(\bR\rstageFeedback\x12'\n" + + "\x0fhigh_multiplier\x18\x0e \x01(\bR\x0ehighMultiplier\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x122\n" + + "\x15wallet_transaction_id\x18\x10 \x01(\tR\x13walletTransactionId\x12,\n" + + "\x12coin_balance_after\x18\x11 \x01(\x03R\x10coinBalanceAfter\x12$\n" + + "\x0etarget_user_id\x18\x12 \x01(\x03R\ftargetUserId\x123\n" + + "\x04hits\x18\x13 \x03(\v2\x1f.hyapp.room.v1.SendGiftLuckyHitR\x04hits\"\xda\x01\n" + + "\x14RoomRocketRewardItem\x12$\n" + + "\x0ereward_item_id\x18\x01 \x01(\tR\frewardItemId\x12*\n" + + "\x11resource_group_id\x18\x02 \x01(\x03R\x0fresourceGroupId\x12\x16\n" + + "\x06weight\x18\x03 \x01(\x03R\x06weight\x12!\n" + + "\fdisplay_name\x18\x04 \x01(\tR\vdisplayName\x12\x19\n" + + "\bicon_url\x18\x05 \x01(\tR\aiconUrl\x12\x1a\n" + + "\bquantity\x18\x06 \x01(\x03R\bquantity\"\xd3\x03\n" + + "\x0fRoomRocketLevel\x12\x14\n" + + "\x05level\x18\x01 \x01(\x05R\x05level\x12%\n" + + "\x0efuel_threshold\x18\x02 \x01(\x03R\rfuelThreshold\x12\x1b\n" + + "\tcover_url\x18\x03 \x01(\tR\bcoverUrl\x12#\n" + + "\ranimation_url\x18\x04 \x01(\tR\fanimationUrl\x120\n" + + "\x14launch_animation_url\x18\x05 \x01(\tR\x12launchAnimationUrl\x12,\n" + + "\x12launched_image_url\x18\x06 \x01(\tR\x10launchedImageUrl\x12K\n" + + "\x0fin_room_rewards\x18\a \x03(\v2#.hyapp.room.v1.RoomRocketRewardItemR\rinRoomRewards\x12F\n" + + "\ftop1_rewards\x18\b \x03(\v2#.hyapp.room.v1.RoomRocketRewardItemR\vtop1Rewards\x12L\n" + + "\x0figniter_rewards\x18\t \x03(\v2#.hyapp.room.v1.RoomRocketRewardItemR\x0eigniterRewards\"\x94\x02\n" + + "\x15RoomRocketRewardGrant\x12\x1f\n" + + "\vreward_role\x18\x01 \x01(\tR\n" + + "rewardRole\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12$\n" + + "\x0ereward_item_id\x18\x03 \x01(\tR\frewardItemId\x12*\n" + + "\x11resource_group_id\x18\x04 \x01(\x03R\x0fresourceGroupId\x12!\n" + + "\fdisplay_name\x18\x05 \x01(\tR\vdisplayName\x12\x19\n" + + "\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x19\n" + + "\bgrant_id\x18\a \x01(\tR\agrantId\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\"i\n" + + "\x16RoomRocketContribution\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x12\n" + + "\x04fuel\x18\x02 \x01(\x03R\x04fuel\x12\"\n" + + "\rupdated_at_ms\x18\x03 \x01(\x03R\vupdatedAtMs\"\xe7\x02\n" + + "\x17RoomRocketPendingLaunch\x12\x1b\n" + + "\trocket_id\x18\x01 \x01(\tR\brocketId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12%\n" + + "\x0efuel_threshold\x18\x03 \x01(\x03R\rfuelThreshold\x12\"\n" + + "\rignited_at_ms\x18\x04 \x01(\x03R\vignitedAtMs\x12 \n" + + "\flaunch_at_ms\x18\x05 \x01(\x03R\n" + + "launchAtMs\x12\x1e\n" + + "\vreset_at_ms\x18\x06 \x01(\x03R\tresetAtMs\x12 \n" + + "\ftop1_user_id\x18\a \x01(\x03R\n" + + "top1UserId\x12&\n" + + "\x0figniter_user_id\x18\b \x01(\x03R\rigniterUserId\x12%\n" + + "\x0econfig_version\x18\t \x01(\x03R\rconfigVersion\x12\x1b\n" + + "\tcover_url\x18\n" + + " \x01(\tR\bcoverUrl\"\xaa\x05\n" + + "\x0fRoomRocketState\x12#\n" + + "\rcurrent_level\x18\x01 \x01(\x05R\fcurrentLevel\x12!\n" + + "\fcurrent_fuel\x18\x02 \x01(\x03R\vcurrentFuel\x12%\n" + + "\x0efuel_threshold\x18\x03 \x01(\x03R\rfuelThreshold\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\"\n" + + "\rignited_at_ms\x18\x05 \x01(\x03R\vignitedAtMs\x12 \n" + + "\flaunch_at_ms\x18\x06 \x01(\x03R\n" + + "launchAtMs\x12$\n" + + "\x0elaunched_at_ms\x18\a \x01(\x03R\flaunchedAtMs\x12\x1e\n" + + "\vreset_at_ms\x18\b \x01(\x03R\tresetAtMs\x12 \n" + + "\ftop1_user_id\x18\t \x01(\x03R\n" + + "top1UserId\x12&\n" + + "\x0figniter_user_id\x18\n" + + " \x01(\x03R\rigniterUserId\x12\x1b\n" + + "\trocket_id\x18\v \x01(\tR\brocketId\x12%\n" + + "\x0econfig_version\x18\f \x01(\x03R\rconfigVersion\x12G\n" + + "\flast_rewards\x18\r \x03(\v2$.hyapp.room.v1.RoomRocketRewardGrantR\vlastRewards\x12Q\n" + + "\x10pending_launches\x18\x0e \x03(\v2&.hyapp.room.v1.RoomRocketPendingLaunchR\x0fpendingLaunches\x12Z\n" + + "\x15current_contributions\x18\x0f \x03(\v2%.hyapp.room.v1.RoomRocketContributionR\x14currentContributions\"\xed\x02\n" + + "\x0eRoomRocketInfo\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x126\n" + + "\x06levels\x18\x02 \x03(\v2\x1e.hyapp.room.v1.RoomRocketLevelR\x06levels\x124\n" + + "\x05state\x18\x03 \x01(\v2\x1e.hyapp.room.v1.RoomRocketStateR\x05state\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\x12'\n" + + "\x0fbroadcast_scope\x18\x05 \x01(\tR\x0ebroadcastScope\x12&\n" + + "\x0flaunch_delay_ms\x18\x06 \x01(\x03R\rlaunchDelayMs\x12,\n" + + "\x12broadcast_delay_ms\x18\a \x01(\x03R\x10broadcastDelayMs\x12.\n" + + "\x13reward_stack_policy\x18\b \x01(\tR\x11rewardStackPolicy\"\xd2\x01\n" + + "\x16RoomRocketGiftFuelRule\x12\x17\n" + + "\arule_id\x18\x01 \x01(\tR\x06ruleId\x12\x17\n" + + "\agift_id\x18\x02 \x01(\tR\x06giftId\x12$\n" + + "\x0egift_type_code\x18\x03 \x01(\tR\fgiftTypeCode\x12%\n" + + "\x0emultiplier_ppm\x18\x04 \x01(\x03R\rmultiplierPpm\x12\x1d\n" + + "\n" + + "fixed_fuel\x18\x05 \x01(\x03R\tfixedFuel\x12\x1a\n" + + "\bexcluded\x18\x06 \x01(\bR\bexcluded\"\xee\x04\n" + + "\x15AdminRoomRocketConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12%\n" + + "\x0econfig_version\x18\x03 \x01(\x03R\rconfigVersion\x12\x1f\n" + + "\vfuel_source\x18\x04 \x01(\tR\n" + + "fuelSource\x12&\n" + + "\x0flaunch_delay_ms\x18\x05 \x01(\x03R\rlaunchDelayMs\x12+\n" + + "\x11broadcast_enabled\x18\x06 \x01(\bR\x10broadcastEnabled\x12'\n" + + "\x0fbroadcast_scope\x18\a \x01(\tR\x0ebroadcastScope\x12,\n" + + "\x12broadcast_delay_ms\x18\b \x01(\x03R\x10broadcastDelayMs\x12.\n" + + "\x13reward_stack_policy\x18\t \x01(\tR\x11rewardStackPolicy\x126\n" + + "\x06levels\x18\n" + + " \x03(\v2\x1e.hyapp.room.v1.RoomRocketLevelR\x06levels\x12M\n" + + "\x0fgift_fuel_rules\x18\v \x03(\v2%.hyapp.room.v1.RoomRocketGiftFuelRuleR\rgiftFuelRules\x12-\n" + + "\x13updated_by_admin_id\x18\f \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"Q\n" + + "\x1fAdminGetRoomRocketConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\"\x86\x01\n" + + " AdminGetRoomRocketConfigResponse\x12<\n" + + "\x06config\x18\x01 \x01(\v2$.hyapp.room.v1.AdminRoomRocketConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xad\x01\n" + + "\"AdminUpdateRoomRocketConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12<\n" + + "\x06config\x18\x02 \x01(\v2$.hyapp.room.v1.AdminRoomRocketConfigR\x06config\x12\x19\n" + + "\badmin_id\x18\x03 \x01(\x03R\aadminId\"\x89\x01\n" + + "#AdminUpdateRoomRocketConfigResponse\x12<\n" + + "\x06config\x18\x01 \x01(\v2$.hyapp.room.v1.AdminRoomRocketConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xcb\x01\n" + + "\x13AdminRoomSeatConfig\x122\n" + + "\x15candidate_seat_counts\x18\x01 \x03(\x05R\x13candidateSeatCounts\x12.\n" + + "\x13allowed_seat_counts\x18\x02 \x03(\x05R\x11allowedSeatCounts\x12,\n" + + "\x12default_seat_count\x18\x03 \x01(\x05R\x10defaultSeatCount\x12\"\n" + + "\rupdated_at_ms\x18\x04 \x01(\x03R\vupdatedAtMs\"O\n" + + "\x1dAdminGetRoomSeatConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\"\x82\x01\n" + + "\x1eAdminGetRoomSeatConfigResponse\x12:\n" + + "\x06config\x18\x01 \x01(\v2\".hyapp.room.v1.AdminRoomSeatConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb0\x01\n" + + " AdminUpdateRoomSeatConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12.\n" + + "\x13allowed_seat_counts\x18\x02 \x03(\x05R\x11allowedSeatCounts\x12,\n" + + "\x12default_seat_count\x18\x03 \x01(\x05R\x10defaultSeatCount\"\x85\x01\n" + + "!AdminUpdateRoomSeatConfigResponse\x12:\n" + + "\x06config\x18\x01 \x01(\v2\".hyapp.room.v1.AdminRoomSeatConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"i\n" + + "\x1eAdminHumanRoomRobotCountryPool\x12!\n" + + "\fcountry_code\x18\x01 \x01(\tR\vcountryCode\x12$\n" + + "\x0erobot_user_ids\x18\x02 \x03(\x03R\frobotUserIds\"\x95\x01\n" + + "\x1eAdminHumanRoomRobotCountryRule\x12!\n" + + "\fcountry_code\x18\x01 \x01(\tR\vcountryCode\x12$\n" + + "\x0emax_room_count\x18\x02 \x01(\x05R\fmaxRoomCount\x12*\n" + + "\x11allowed_owner_ids\x18\x03 \x03(\tR\x0fallowedOwnerIds\"\xd8\n" + + "\n" + + "\x19AdminHumanRoomRobotConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x129\n" + + "\x19candidate_room_max_online\x18\x03 \x01(\x05R\x16candidateRoomMaxOnline\x121\n" + + "\x15room_full_stop_online\x18\x04 \x01(\x05R\x12roomFullStopOnline\x12)\n" + + "\x11robot_stay_min_ms\x18\x05 \x01(\x03R\x0erobotStayMinMs\x12)\n" + + "\x11robot_stay_max_ms\x18\x06 \x01(\x03R\x0erobotStayMaxMs\x12/\n" + + "\x14robot_replace_min_ms\x18\a \x01(\x03R\x11robotReplaceMinMs\x12/\n" + + "\x14robot_replace_max_ms\x18\b \x01(\x03R\x11robotReplaceMaxMs\x125\n" + + "\x17normal_gift_interval_ms\x18\t \x01(\x03R\x14normalGiftIntervalMs\x12\x19\n" + + "\bgift_ids\x18\n" + + " \x03(\tR\agiftIds\x12$\n" + + "\x0elucky_gift_ids\x18\v \x03(\tR\fluckyGiftIds\x12/\n" + + "\x14super_lucky_gift_ids\x18\f \x03(\tR\x11superLuckyGiftIds\x12&\n" + + "\x0flucky_combo_min\x18\r \x01(\x03R\rluckyComboMin\x12&\n" + + "\x0flucky_combo_max\x18\x0e \x01(\x03R\rluckyComboMax\x12+\n" + + "\x12lucky_pause_min_ms\x18\x0f \x01(\x03R\x0fluckyPauseMinMs\x12+\n" + + "\x12lucky_pause_max_ms\x18\x10 \x01(\x03R\x0fluckyPauseMaxMs\x12(\n" + + "\x10max_gift_senders\x18\x11 \x01(\x03R\x0emaxGiftSenders\x12R\n" + + "\rcountry_pools\x18\x12 \x03(\v2-.hyapp.room.v1.AdminHumanRoomRobotCountryPoolR\fcountryPools\x12-\n" + + "\x13updated_by_admin_id\x18\x13 \x01(\x04R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\x14 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x15 \x01(\x03R\vupdatedAtMs\x12<\n" + + "\x1bnormal_gift_interval_min_ms\x18\x16 \x01(\x03R\x17normalGiftIntervalMinMs\x12<\n" + + "\x1bnormal_gift_interval_max_ms\x18\x17 \x01(\x03R\x17normalGiftIntervalMaxMs\x123\n" + + "\x16room_target_min_online\x18\x18 \x01(\x05R\x13roomTargetMinOnline\x123\n" + + "\x16room_target_max_online\x18\x19 \x01(\x05R\x13roomTargetMaxOnline\x12*\n" + + "\x11allowed_owner_ids\x18\x1a \x03(\tR\x0fallowedOwnerIds\x122\n" + + "\x15country_limit_enabled\x18\x1b \x01(\bR\x13countryLimitEnabled\x12R\n" + + "\rcountry_rules\x18\x1c \x03(\v2-.hyapp.room.v1.AdminHumanRoomRobotCountryRuleR\fcountryRules\"U\n" + + "#AdminGetHumanRoomRobotConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\"\x8e\x01\n" + + "$AdminGetHumanRoomRobotConfigResponse\x12@\n" + + "\x06config\x18\x01 \x01(\v2(.hyapp.room.v1.AdminHumanRoomRobotConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb5\x01\n" + + "&AdminUpdateHumanRoomRobotConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12@\n" + + "\x06config\x18\x02 \x01(\v2(.hyapp.room.v1.AdminHumanRoomRobotConfigR\x06config\x12\x19\n" + + "\badmin_id\x18\x03 \x01(\x04R\aadminId\"\x91\x01\n" + + "'AdminUpdateHumanRoomRobotConfigResponse\x12@\n" + + "\x06config\x18\x01 \x01(\v2(.hyapp.room.v1.AdminHumanRoomRobotConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xea\x01\n" + + "\x10AdminRoomPinRoom\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\"\n" + + "\rroom_short_id\x18\x02 \x01(\tR\vroomShortId\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x12\x1b\n" + + "\tcover_url\x18\x06 \x01(\tR\bcoverUrl\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\"\xfb\x03\n" + + "\fAdminRoomPin\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12*\n" + + "\x11visible_region_id\x18\x02 \x01(\x03R\x0fvisibleRegionId\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x16\n" + + "\x06weight\x18\x04 \x01(\x03R\x06weight\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12 \n" + + "\fpinned_at_ms\x18\x06 \x01(\x03R\n" + + "pinnedAtMs\x12\"\n" + + "\rexpires_at_ms\x18\a \x01(\x03R\vexpiresAtMs\x12&\n" + + "\x0fcancelled_at_ms\x18\b \x01(\x03R\rcancelledAtMs\x12-\n" + + "\x13created_by_admin_id\x18\t \x01(\x04R\x10createdByAdminId\x121\n" + + "\x15cancelled_by_admin_id\x18\n" + + " \x01(\x04R\x12cancelledByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\f \x01(\x03R\vupdatedAtMs\x123\n" + + "\x04room\x18\r \x01(\v2\x1f.hyapp.room.v1.AdminRoomPinRoomR\x04room\x12\x19\n" + + "\bpin_type\x18\x0e \x01(\tR\apinType\"\xf4\x01\n" + + "\x18AdminListRoomPinsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x12\n" + + "\x04page\x18\x02 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\x12\x18\n" + + "\akeyword\x18\x04 \x01(\tR\akeyword\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12*\n" + + "\x11visible_region_id\x18\x06 \x01(\x03R\x0fvisibleRegionId\x12\x19\n" + + "\bpin_type\x18\a \x01(\tR\apinType\"\x88\x01\n" + + "\x19AdminListRoomPinsResponse\x12/\n" + + "\x04pins\x18\x01 \x03(\v2\x1b.hyapp.room.v1.AdminRoomPinR\x04pins\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x9d\x02\n" + + "\x19AdminCreateRoomPinRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x16\n" + + "\x06weight\x18\x03 \x01(\x03R\x06weight\x12#\n" + + "\rduration_days\x18\x04 \x01(\x03R\fdurationDays\x12\x19\n" + + "\badmin_id\x18\x05 \x01(\x04R\aadminId\x12 \n" + + "\fpinned_at_ms\x18\x06 \x01(\x03R\n" + + "pinnedAtMs\x12\"\n" + + "\rexpires_at_ms\x18\a \x01(\x03R\vexpiresAtMs\x12\x19\n" + + "\bpin_type\x18\b \x01(\tR\apinType\"q\n" + + "\x1aAdminCreateRoomPinResponse\x12-\n" + + "\x03pin\x18\x01 \x01(\v2\x1b.hyapp.room.v1.AdminRoomPinR\x03pin\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"}\n" + + "\x19AdminCancelRoomPinRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x15\n" + + "\x06pin_id\x18\x02 \x01(\x03R\x05pinId\x12\x19\n" + + "\badmin_id\x18\x03 \x01(\x04R\aadminId\"q\n" + + "\x1aAdminCancelRoomPinResponse\x12-\n" + + "\x03pin\x18\x01 \x01(\v2\x1b.hyapp.room.v1.AdminRoomPinR\x03pin\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x9c\x04\n" + + "\x16AdminRobotRoomGiftRule\x12\x19\n" + + "\bgift_ids\x18\x01 \x03(\tR\agiftIds\x12$\n" + + "\x0elucky_gift_ids\x18\x02 \x03(\tR\fluckyGiftIds\x125\n" + + "\x17normal_gift_interval_ms\x18\x03 \x01(\x03R\x14normalGiftIntervalMs\x12&\n" + + "\x0flucky_combo_min\x18\x04 \x01(\x03R\rluckyComboMin\x12&\n" + + "\x0flucky_combo_max\x18\x05 \x01(\x03R\rluckyComboMax\x12+\n" + + "\x12lucky_pause_min_ms\x18\x06 \x01(\x03R\x0fluckyPauseMinMs\x12+\n" + + "\x12lucky_pause_max_ms\x18\a \x01(\x03R\x0fluckyPauseMaxMs\x12)\n" + + "\x11robot_stay_min_ms\x18\b \x01(\x03R\x0erobotStayMinMs\x12)\n" + + "\x11robot_stay_max_ms\x18\t \x01(\x03R\x0erobotStayMaxMs\x12/\n" + + "\x14robot_replace_min_ms\x18\n" + + " \x01(\x03R\x11robotReplaceMinMs\x12/\n" + + "\x14robot_replace_max_ms\x18\v \x01(\x03R\x11robotReplaceMaxMs\x12(\n" + + "\x10max_gift_senders\x18\f \x01(\x03R\x0emaxGiftSenders\"\xbc\x04\n" + + "\x0eAdminRobotRoom\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\"\n" + + "\rroom_short_id\x18\x03 \x01(\tR\vroomShortId\x12\x14\n" + + "\x05title\x18\x04 \x01(\tR\x05title\x12\x1b\n" + + "\tcover_url\x18\x05 \x01(\tR\bcoverUrl\x12*\n" + + "\x11visible_region_id\x18\x06 \x01(\x03R\x0fvisibleRegionId\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12-\n" + + "\x13owner_robot_user_id\x18\b \x01(\x03R\x10ownerRobotUserId\x12$\n" + + "\x0erobot_user_ids\x18\t \x03(\x03R\frobotUserIds\x12B\n" + + "\tgift_rule\x18\n" + + " \x01(\v2%.hyapp.room.v1.AdminRobotRoomGiftRuleR\bgiftRule\x12-\n" + + "\x13created_by_admin_id\x18\v \x01(\x04R\x10createdByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMs\x12,\n" + + "\x12active_robot_count\x18\x0e \x01(\x05R\x10activeRobotCount\x12\x1d\n" + + "\n" + + "seat_count\x18\x0f \x01(\x05R\tseatCount\"\x95\x01\n" + + "\x1aAdminListRobotRoomsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x12\n" + + "\x04page\x18\x02 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\"\x8e\x01\n" + + "\x1bAdminListRobotRoomsResponse\x123\n" + + "\x05rooms\x18\x01 \x03(\v2\x1d.hyapp.room.v1.AdminRobotRoomR\x05rooms\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x9b\x04\n" + + "\x1bAdminCreateRobotRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12-\n" + + "\x13owner_robot_user_id\x18\x02 \x01(\x03R\x10ownerRobotUserId\x127\n" + + "\x18candidate_robot_user_ids\x18\x03 \x03(\x03R\x15candidateRobotUserIds\x12&\n" + + "\x0fmin_robot_count\x18\x04 \x01(\x05R\rminRobotCount\x12&\n" + + "\x0fmax_robot_count\x18\x05 \x01(\x05R\rmaxRobotCount\x12\x1b\n" + + "\troom_name\x18\x06 \x01(\tR\broomName\x12\x1f\n" + + "\vroom_avatar\x18\a \x01(\tR\n" + + "roomAvatar\x12*\n" + + "\x11visible_region_id\x18\b \x01(\x03R\x0fvisibleRegionId\x12B\n" + + "\tgift_rule\x18\t \x01(\v2%.hyapp.room.v1.AdminRobotRoomGiftRuleR\bgiftRule\x12\x19\n" + + "\badmin_id\x18\n" + + " \x01(\x04R\aadminId\x12,\n" + + "\x12owner_country_code\x18\v \x01(\tR\x10ownerCountryCode\x12\x1d\n" + + "\n" + + "seat_count\x18\f \x01(\x05R\tseatCount\"w\n" + + "\x1cAdminCreateRobotRoomResponse\x121\n" + + "\x04room\x18\x01 \x01(\v2\x1d.hyapp.room.v1.AdminRobotRoomR\x04room\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x83\x01\n" + + "\x1eAdminSetRobotRoomStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x19\n" + + "\badmin_id\x18\x03 \x01(\x04R\aadminId\"z\n" + + "\x1fAdminSetRobotRoomStatusResponse\x121\n" + + "\x04room\x18\x01 \x01(\v2\x1d.hyapp.room.v1.AdminRobotRoomR\x04room\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xc3\x01\n" + + "\"AdminRenameOwnerCountryCodeRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12(\n" + + "\x10old_country_code\x18\x02 \x01(\tR\x0eoldCountryCode\x12(\n" + + "\x10new_country_code\x18\x03 \x01(\tR\x0enewCountryCode\x12\x19\n" + + "\badmin_id\x18\x04 \x01(\x04R\aadminId\"\x9e\x01\n" + + "#AdminRenameOwnerCountryCodeResponse\x12*\n" + + "\x11room_list_entries\x18\x01 \x01(\x03R\x0froomListEntries\x12%\n" + + "\x0eroom_snapshots\x18\x02 \x01(\x03R\rroomSnapshots\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"r\n" + + "%AdminFilterAvailableRoomRobotsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x19\n" + + "\buser_ids\x18\x02 \x03(\x03R\auserIds\"\xa8\x01\n" + + "&AdminFilterAvailableRoomRobotsResponse\x12,\n" + + "\x12available_user_ids\x18\x01 \x03(\x03R\x10availableUserIds\x12*\n" + + "\x11occupied_user_ids\x18\x02 \x03(\x03R\x0foccupiedUserIds\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x93\x01\n" + + "\fRoomBanState\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\"\n" + + "\ractor_user_id\x18\x02 \x01(\x03R\vactorUserId\x12\"\n" + + "\rcreated_at_ms\x18\x03 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rexpires_at_ms\x18\x04 \x01(\x03R\vexpiresAtMs\"\xf8\x06\n" + + "\fRoomSnapshot\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\x12\x12\n" + + "\x04mode\x18\x04 \x01(\tR\x04mode\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12!\n" + + "\fchat_enabled\x18\x06 \x01(\bR\vchatEnabled\x125\n" + + "\tmic_seats\x18\a \x03(\v2\x18.hyapp.room.v1.SeatStateR\bmicSeats\x12:\n" + + "\fonline_users\x18\b \x03(\v2\x17.hyapp.room.v1.RoomUserR\vonlineUsers\x12$\n" + + "\x0eadmin_user_ids\x18\t \x03(\x03R\fadminUserIds\x12 \n" + + "\fban_user_ids\x18\n" + + " \x03(\x03R\n" + + "banUserIds\x12\"\n" + + "\rmute_user_ids\x18\v \x03(\x03R\vmuteUserIds\x124\n" + + "\tgift_rank\x18\f \x03(\v2\x17.hyapp.room.v1.RankItemR\bgiftRank\x12C\n" + + "\broom_ext\x18\r \x03(\v2(.hyapp.room.v1.RoomSnapshot.RoomExtEntryR\aroomExt\x12\x12\n" + + "\x04heat\x18\x0e \x01(\x03R\x04heat\x12\x18\n" + + "\aversion\x18\x0f \x01(\x03R\aversion\x12\x19\n" + + "\bapp_code\x18\x10 \x01(\tR\aappCode\x12\"\n" + + "\rroom_short_id\x18\x11 \x01(\tR\vroomShortId\x12*\n" + + "\x11visible_region_id\x18\x12 \x01(\x03R\x0fvisibleRegionId\x12\x16\n" + + "\x06locked\x18\x13 \x01(\bR\x06locked\x126\n" + + "\x06rocket\x18\x14 \x01(\v2\x1e.hyapp.room.v1.RoomRocketStateR\x06rocket\x12:\n" + + "\n" + + "ban_states\x18\x15 \x03(\v2\x1b.hyapp.room.v1.RoomBanStateR\tbanStates\x12!\n" + + "\fonline_count\x18\x16 \x01(\x05R\vonlineCount\x1a:\n" + + "\fRoomExtEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe5\x01\n" + + "\x13RoomBackgroundImage\x12#\n" + + "\rbackground_id\x18\x01 \x01(\x03R\fbackgroundId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x1b\n" + + "\timage_url\x18\x03 \x01(\tR\bimageUrl\x12+\n" + + "\x12created_by_user_id\x18\x04 \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\x81\x01\n" + + "\x19SaveRoomBackgroundRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x1b\n" + + "\timage_url\x18\x03 \x01(\tR\bimageUrl\"\x86\x01\n" + + "\x1aSaveRoomBackgroundResponse\x12B\n" + + "\n" + + "background\x18\x01 \x01(\v2\".hyapp.room.v1.RoomBackgroundImageR\n" + + "background\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x8b\x01\n" + + "\x1aListRoomBackgroundsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\"\xc1\x01\n" + + "\x1bListRoomBackgroundsResponse\x12D\n" + + "\vbackgrounds\x18\x01 \x03(\v2\".hyapp.room.v1.RoomBackgroundImageR\vbackgrounds\x126\n" + + "\x17selected_background_url\x18\x02 \x01(\tR\x15selectedBackgroundUrl\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"o\n" + + "\x18SetRoomBackgroundRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12#\n" + + "\rbackground_id\x18\x02 \x01(\x03R\fbackgroundId\"\xc6\x01\n" + + "\x19SetRoomBackgroundResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12B\n" + + "\n" + + "background\x18\x03 \x01(\v2\".hyapp.room.v1.RoomBackgroundImageR\n" + + "background\"\xa2\x03\n" + + "\x11CreateRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "seat_count\x18\x02 \x01(\x05R\tseatCount\x12\x12\n" + + "\x04mode\x18\x03 \x01(\tR\x04mode\x12*\n" + + "\x11visible_region_id\x18\x04 \x01(\x03R\x0fvisibleRegionId\x12\x1b\n" + + "\troom_name\x18\x05 \x01(\tR\broomName\x12\x1f\n" + + "\vroom_avatar\x18\x06 \x01(\tR\n" + + "roomAvatar\x12)\n" + + "\x10room_description\x18\a \x01(\tR\x0froomDescription\x12\"\n" + + "\rroom_short_id\x18\b \x01(\tR\vroomShortId\x12,\n" + + "\x12owner_country_code\x18\t \x01(\tR\x10ownerCountryCode\x12\x1d\n" + + "\n" + + "robot_room\x18\n" + + " \x01(\bR\trobotRoom\x12$\n" + + "\x0erobot_user_ids\x18\v \x03(\x03R\frobotUserIds\"{\n" + + "\x12CreateRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xa8\x02\n" + + "\x18UpdateRoomProfileRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12 \n" + + "\troom_name\x18\x02 \x01(\tH\x00R\broomName\x88\x01\x01\x12$\n" + + "\vroom_avatar\x18\x03 \x01(\tH\x01R\n" + + "roomAvatar\x88\x01\x01\x12.\n" + + "\x10room_description\x18\x04 \x01(\tH\x02R\x0froomDescription\x88\x01\x01\x12\"\n" + + "\n" + + "seat_count\x18\x05 \x01(\x05H\x03R\tseatCount\x88\x01\x01B\f\n" + + "\n" + + "_room_nameB\x0e\n" + + "\f_room_avatarB\x13\n" + + "\x11_room_descriptionB\r\n" + + "\v_seat_count\"\x82\x01\n" + + "\x19UpdateRoomProfileResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xc7\x02\n" + + "\x18RoomEntryVehicleSnapshot\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_code\x18\x02 \x01(\tR\fresourceCode\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x1b\n" + + "\tasset_url\x18\x04 \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\x05 \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\x06 \x01(\tR\fanimationUrl\x12#\n" + + "\rmetadata_json\x18\a \x01(\tR\fmetadataJson\x12%\n" + + "\x0eentitlement_id\x18\b \x01(\tR\rentitlementId\x12\"\n" + + "\rexpires_at_ms\x18\t \x01(\x03R\vexpiresAtMs\"\xc2\x01\n" + + "\x16RoomUserDisplayProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x1a\n" + + "\bnickname\x18\x02 \x01(\tR\bnickname\x12\x16\n" + + "\x06avatar\x18\x03 \x01(\tR\x06avatar\x12&\n" + + "\x0fdisplay_user_id\x18\x04 \x01(\tR\rdisplayUserId\x123\n" + + "\x16pretty_display_user_id\x18\x05 \x01(\tR\x13prettyDisplayUserId\"\xe4\x03\n" + + "\x0fJoinRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x12\n" + + "\x04role\x18\x02 \x01(\tR\x04role\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\x12L\n" + + "\rentry_vehicle\x18\x04 \x01(\v2'.hyapp.room.v1.RoomEntryVehicleSnapshotR\fentryVehicle\x12(\n" + + "\x10actor_country_id\x18\x05 \x01(\x03R\x0eactorCountryId\x12&\n" + + "\x0factor_region_id\x18\x06 \x01(\x03R\ractorRegionId\x12$\n" + + "\x0eactor_is_robot\x18\a \x01(\bR\factorIsRobot\x12Y\n" + + "\x15actor_display_profile\x18\b \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x13actorDisplayProfile\x12#\n" + + "\rresponse_mode\x18\t \x01(\tR\fresponseMode\x12+\n" + + "\x11presence_recovery\x18\n" + + " \x01(\bR\x10presenceRecovery\"\xa2\x01\n" + + "\x18RoomEffectiveVipSnapshot\x12!\n" + + "\fprogram_type\x18\x01 \x01(\tR\vprogramType\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x129\n" + + "\x19room_entry_notice_enabled\x18\x04 \x01(\bR\x16roomEntryNoticeEnabled\"\xf4\x01\n" + + "\x10JoinRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12+\n" + + "\x04user\x18\x02 \x01(\v2\x17.hyapp.room.v1.RoomUserR\x04user\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12L\n" + + "\reffective_vip\x18\x04 \x01(\v2'.hyapp.room.v1.RoomEffectiveVipSnapshotR\feffectiveVip\"F\n" + + "\x14RoomHeartbeatRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\"\xab\x01\n" + + "\x15RoomHeartbeatResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12+\n" + + "\x04user\x18\x02 \x01(\v2\x17.hyapp.room.v1.RoomUserR\x04user\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"B\n" + + "\x10LeaveRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\"z\n" + + "\x11LeaveRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"Z\n" + + "\x10CloseRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"z\n" + + "\x11CloseRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x8f\x05\n" + + "\x11AdminRoomListItem\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\"\n" + + "\rroom_short_id\x18\x02 \x01(\tR\vroomShortId\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x12\x1b\n" + + "\tcover_url\x18\x06 \x01(\tR\bcoverUrl\x12\x12\n" + + "\x04mode\x18\a \x01(\tR\x04mode\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12!\n" + + "\fclose_reason\x18\t \x01(\tR\vcloseReason\x12+\n" + + "\x12closed_by_admin_id\x18\n" + + " \x01(\x04R\x0fclosedByAdminId\x12/\n" + + "\x14closed_by_admin_name\x18\v \x01(\tR\x11closedByAdminName\x12 \n" + + "\fclosed_at_ms\x18\f \x01(\x03R\n" + + "closedAtMs\x12\x12\n" + + "\x04heat\x18\r \x01(\x03R\x04heat\x12!\n" + + "\fonline_count\x18\x0e \x01(\x05R\vonlineCount\x12\x1d\n" + + "\n" + + "seat_count\x18\x0f \x01(\x05R\tseatCount\x12.\n" + + "\x13occupied_seat_count\x18\x10 \x01(\x05R\x11occupiedSeatCount\x12\x1d\n" + + "\n" + + "sort_score\x18\x11 \x01(\x03R\tsortScore\x12\"\n" + + "\rcreated_at_ms\x18\x12 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x13 \x01(\x03R\vupdatedAtMs\"\xba\x02\n" + + "\x15AdminListRoomsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x12\n" + + "\x04page\x18\x02 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\x12\x18\n" + + "\akeyword\x18\x04 \x01(\tR\akeyword\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12*\n" + + "\x11visible_region_id\x18\x06 \x01(\x03R\x0fvisibleRegionId\x12\x17\n" + + "\asort_by\x18\a \x01(\tR\x06sortBy\x12%\n" + + "\x0esort_direction\x18\b \x01(\tR\rsortDirection\x12\"\n" + + "\rowner_user_id\x18\t \x01(\x03R\vownerUserId\"\x8c\x01\n" + + "\x16AdminListRoomsResponse\x126\n" + + "\x05rooms\x18\x01 \x03(\v2 .hyapp.room.v1.AdminRoomListItemR\x05rooms\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"^\n" + + "\x13AdminGetRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\"r\n" + + "\x14AdminGetRoomResponse\x124\n" + + "\x04room\x18\x01 \x01(\v2 .hyapp.room.v1.AdminRoomListItemR\x04room\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\x8c\x04\n" + + "\x16AdminUpdateRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x19\n" + + "\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12 \n" + + "\tcover_url\x18\x03 \x01(\tH\x01R\bcoverUrl\x88\x01\x01\x12%\n" + + "\vdescription\x18\x04 \x01(\tH\x02R\vdescription\x88\x01\x01\x12\x17\n" + + "\x04mode\x18\x05 \x01(\tH\x03R\x04mode\x88\x01\x01\x12\x1b\n" + + "\x06status\x18\x06 \x01(\tH\x04R\x06status\x88\x01\x01\x12/\n" + + "\x11visible_region_id\x18\a \x01(\x03H\x05R\x0fvisibleRegionId\x88\x01\x01\x12!\n" + + "\fclose_reason\x18\b \x01(\tR\vcloseReason\x12\x19\n" + + "\badmin_id\x18\t \x01(\x04R\aadminId\x12\x1d\n" + + "\n" + + "admin_name\x18\n" + + " \x01(\tR\tadminName\x121\n" + + "\x12owner_country_code\x18\v \x01(\tH\x06R\x10ownerCountryCode\x88\x01\x01B\b\n" + + "\x06_titleB\f\n" + + "\n" + + "_cover_urlB\x0e\n" + + "\f_descriptionB\a\n" + + "\x05_modeB\t\n" + + "\a_statusB\x14\n" + + "\x12_visible_region_idB\x15\n" + + "\x13_owner_country_code\"\x80\x01\n" + + "\x17AdminUpdateRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x82\x01\n" + + "\x16AdminDeleteRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x19\n" + + "\badmin_id\x18\x02 \x01(\x04R\aadminId\x12\x1d\n" + + "\n" + + "admin_name\x18\x03 \x01(\tR\tadminName\"\x80\x01\n" + + "\x17AdminDeleteRoomResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xb4\x01\n" + + "\fMicUpRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12[\n" + + "\x16target_display_profile\x18\x03 \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x14targetDisplayProfile\"\xe5\x01\n" + + "\rMicUpResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12$\n" + + "\x0emic_session_id\x18\x04 \x01(\tR\fmicSessionId\x12.\n" + + "\x13publish_deadline_ms\x18\x05 \x01(\x03R\x11publishDeadlineMs\"\xdb\x01\n" + + "\x0eMicDownRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06reason\x18\x03 \x01(\tR\x06reason\x12[\n" + + "\x16target_display_profile\x18\x04 \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x14targetDisplayProfile\"\x91\x01\n" + + "\x0fMicDownResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xe2\x01\n" + + "\x14ChangeMicSeatRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\aseat_no\x18\x03 \x01(\x05R\x06seatNo\x12[\n" + + "\x16target_display_profile\x18\x04 \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x14targetDisplayProfile\"~\n" + + "\x15ChangeMicSeatResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xd5\x02\n" + + "\x1bConfirmMicPublishingRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12$\n" + + "\x0emic_session_id\x18\x03 \x01(\tR\fmicSessionId\x12!\n" + + "\froom_version\x18\x04 \x01(\x03R\vroomVersion\x12\"\n" + + "\revent_time_ms\x18\x05 \x01(\x03R\veventTimeMs\x12\x16\n" + + "\x06source\x18\x06 \x01(\tR\x06source\x12[\n" + + "\x16target_display_profile\x18\a \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x14targetDisplayProfile\"\x9e\x01\n" + + "\x1cConfirmMicPublishingResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x91\x01\n" + + "\x13MicHeartbeatRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12$\n" + + "\x0emic_session_id\x18\x03 \x01(\tR\fmicSessionId\"\xc5\x01\n" + + "\x14MicHeartbeatResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12-\n" + + "\x13mic_heartbeat_at_ms\x18\x04 \x01(\x03R\x10micHeartbeatAtMs\"\xdc\x01\n" + + "\x11SetMicMuteRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x14\n" + + "\x05muted\x18\x03 \x01(\bR\x05muted\x12[\n" + + "\x16target_display_profile\x18\x04 \x01(\v2%.hyapp.room.v1.RoomUserDisplayProfileR\x14targetDisplayProfile\"\x94\x01\n" + + "\x12SetMicMuteResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x8b\x02\n" + + "\x14ApplyRTCEventRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x1d\n" + + "\n" + + "event_type\x18\x03 \x01(\tR\teventType\x12\"\n" + + "\revent_time_ms\x18\x04 \x01(\x03R\veventTimeMs\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x16\n" + + "\x06source\x18\x06 \x01(\tR\x06source\x12*\n" + + "\x11external_event_id\x18\a \x01(\tR\x0fexternalEventId\"\x97\x01\n" + + "\x15ApplyRTCEventResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"x\n" + + "\x15SetMicSeatLockRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aseat_no\x18\x02 \x01(\x05R\x06seatNo\x12\x16\n" + + "\x06locked\x18\x03 \x01(\bR\x06locked\"\x7f\n" + + "\x16SetMicSeatLockResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"a\n" + + "\x15SetChatEnabledRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\"\x7f\n" + + "\x16SetChatEnabledResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"|\n" + + "\x16SetRoomPasswordRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06locked\x18\x02 \x01(\bR\x06locked\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\"\x80\x01\n" + + "\x17SetRoomPasswordResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x85\x01\n" + + "\x13SetRoomAdminRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\"}\n" + + "\x14SetRoomAdminResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"}\n" + + "\x0fMuteUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x14\n" + + "\x05muted\x18\x03 \x01(\bR\x05muted\"y\n" + + "\x10MuteUserResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\x88\x01\n" + + "\x0fKickUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vduration_ms\x18\x03 \x01(\x03R\n" + + "durationMs\"\xbe\x01\n" + + "\x10KickUserResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12\x1d\n" + + "\n" + + "rtc_kicked\x18\x03 \x01(\bR\trtcKicked\x12$\n" + + "\x0ertc_kick_error\x18\x04 \x01(\tR\frtcKickError\"h\n" + + "\x10UnbanUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\"z\n" + + "\x11UnbanUserResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\"\xd4\x01\n" + + "\x16SystemEvictUserRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12(\n" + + "\x10operator_user_id\x18\x03 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\x04 \x01(\tR\x06reason\x12\"\n" + + "\rban_from_room\x18\x05 \x01(\bR\vbanFromRoom\"\x88\x02\n" + + "\x17SystemEvictUserResponse\x12(\n" + + "\x10had_current_room\x18\x01 \x01(\bR\x0ehadCurrentRoom\x124\n" + + "\x06result\x18\x02 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12/\n" + + "\x04room\x18\x03 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12\x17\n" + + "\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x1d\n" + + "\n" + + "rtc_kicked\x18\x05 \x01(\bR\trtcKicked\x12$\n" + + "\x0ertc_kick_error\x18\x06 \x01(\tR\frtcKickError\"\xd6\x01\n" + + "\x17SendGiftTargetHostScope\x12$\n" + + "\x0etarget_user_id\x18\x01 \x01(\x03R\ftargetUserId\x12$\n" + + "\x0etarget_is_host\x18\x02 \x01(\bR\ftargetIsHost\x121\n" + + "\x15target_host_region_id\x18\x03 \x01(\x03R\x12targetHostRegionId\x12<\n" + + "\x1btarget_agency_owner_user_id\x18\x04 \x01(\x03R\x17targetAgencyOwnerUserId\"\xc2\x01\n" + + "\x16SendGiftDisplayProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x1a\n" + + "\busername\x18\x02 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x03 \x01(\tR\x06avatar\x12&\n" + + "\x0fdisplay_user_id\x18\x04 \x01(\tR\rdisplayUserId\x123\n" + + "\x16pretty_display_user_id\x18\x05 \x01(\tR\x13prettyDisplayUserId\"\x8a\x04\n" + + "\x13SendGiftBatchTarget\x12$\n" + + "\x0etarget_user_id\x18\x01 \x01(\x03R\ftargetUserId\x12+\n" + + "\x11receiver_nickname\x18\x02 \x01(\tR\x10receiverNickname\x12'\n" + + "\x0freceiver_avatar\x18\x03 \x01(\tR\x0ereceiverAvatar\x127\n" + + "\x18receiver_display_user_id\x18\x04 \x01(\tR\x15receiverDisplayUserId\x12D\n" + + "\x1freceiver_pretty_display_user_id\x18\x05 \x01(\tR\x1breceiverPrettyDisplayUserId\x12\x1d\n" + + "\n" + + "gift_value\x18\x06 \x01(\x03R\tgiftValue\x12*\n" + + "\x11target_gift_value\x18\a \x01(\x03R\x0ftargetGiftValue\x12\x1d\n" + + "\n" + + "coin_spent\x18\b \x01(\x03R\tcoinSpent\x12,\n" + + "\x12billing_receipt_id\x18\t \x01(\tR\x10billingReceiptId\x12\x1d\n" + + "\n" + + "command_id\x18\n" + + " \x01(\tR\tcommandId\x12A\n" + + "\n" + + "lucky_gift\x18\v \x01(\v2\".hyapp.room.v1.LuckyGiftDrawResultR\tluckyGift\"\xf4\x06\n" + + "\x14SendGiftBatchDisplay\x12\x19\n" + + "\bevent_id\x18\x01 \x01(\tR\aeventId\x12$\n" + + "\x0esender_user_id\x18\x02 \x01(\x03R\fsenderUserId\x12\x1f\n" + + "\vsender_name\x18\x03 \x01(\tR\n" + + "senderName\x12#\n" + + "\rsender_avatar\x18\x04 \x01(\tR\fsenderAvatar\x123\n" + + "\x16sender_display_user_id\x18\x05 \x01(\tR\x13senderDisplayUserId\x12@\n" + + "\x1dsender_pretty_display_user_id\x18\x06 \x01(\tR\x19senderPrettyDisplayUserId\x12\x17\n" + + "\agift_id\x18\a \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\b \x01(\x05R\tgiftCount\x12(\n" + + "\x10total_gift_value\x18\t \x01(\x03R\x0etotalGiftValue\x12(\n" + + "\x10total_coin_spent\x18\n" + + " \x01(\x03R\x0etotalCoinSpent\x12,\n" + + "\x12billing_receipt_id\x18\v \x01(\tR\x10billingReceiptId\x12\x1b\n" + + "\troom_heat\x18\f \x01(\x03R\broomHeat\x12\x17\n" + + "\apool_id\x18\r \x01(\tR\x06poolId\x12$\n" + + "\x0egift_type_code\x18\x0e \x01(\tR\fgiftTypeCode\x12(\n" + + "\x10cp_relation_type\x18\x0f \x01(\tR\x0ecpRelationType\x12\x1b\n" + + "\tgift_name\x18\x10 \x01(\tR\bgiftName\x12\"\n" + + "\rgift_icon_url\x18\x11 \x01(\tR\vgiftIconUrl\x12,\n" + + "\x12gift_animation_url\x18\x12 \x01(\tR\x10giftAnimationUrl\x12*\n" + + "\x11gift_effect_types\x18\x13 \x03(\tR\x0fgiftEffectTypes\x12&\n" + + "\x0ftarget_user_ids\x18\x14 \x03(\x03R\rtargetUserIds\x12<\n" + + "\atargets\x18\x15 \x03(\v2\".hyapp.room.v1.SendGiftBatchTargetR\atargets\x12\x1d\n" + + "\n" + + "command_id\x18\x16 \x01(\tR\tcommandId\"\xa9\a\n" + + "\x0fSendGiftRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x04 \x01(\x05R\tgiftCount\x12\x1f\n" + + "\vtarget_type\x18\x05 \x01(\tR\n" + + "targetType\x12&\n" + + "\x0ftarget_user_ids\x18\x06 \x03(\x03R\rtargetUserIds\x12\x17\n" + + "\apool_id\x18\a \x01(\tR\x06poolId\x12$\n" + + "\x0etarget_is_host\x18\b \x01(\bR\ftargetIsHost\x121\n" + + "\x15target_host_region_id\x18\t \x01(\x03R\x12targetHostRegionId\x12<\n" + + "\x1btarget_agency_owner_user_id\x18\n" + + " \x01(\x03R\x17targetAgencyOwnerUserId\x12(\n" + + "\x10sender_region_id\x18\v \x01(\x03R\x0esenderRegionId\x12*\n" + + "\x11sender_country_id\x18\f \x01(\x03R\x0fsenderCountryId\x12%\n" + + "\x0eentitlement_id\x18\r \x01(\tR\rentitlementId\x12\x16\n" + + "\x06source\x18\x0e \x01(\tR\x06source\x12T\n" + + "\x12target_host_scopes\x18\x0f \x03(\v2&.hyapp.room.v1.SendGiftTargetHostScopeR\x10targetHostScopes\x12[\n" + + "\x16sender_display_profile\x18\x10 \x01(\v2%.hyapp.room.v1.SendGiftDisplayProfileR\x14senderDisplayProfile\x12]\n" + + "\x17target_display_profiles\x18\x11 \x03(\v2%.hyapp.room.v1.SendGiftDisplayProfileR\x15targetDisplayProfiles\x12!\n" + + "\fdisplay_mode\x18\x12 \x01(\tR\vdisplayMode\x12(\n" + + "\x10combo_session_id\x18\x13 \x01(\tR\x0ecomboSessionId\x12\x1b\n" + + "\tbatch_seq\x18\x14 \x01(\x03R\bbatchSeq\"\x9e\x05\n" + + "\x10SendGiftResponse\x124\n" + + "\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x12,\n" + + "\x12billing_receipt_id\x18\x02 \x01(\tR\x10billingReceiptId\x12\x1b\n" + + "\troom_heat\x18\x03 \x01(\x03R\broomHeat\x124\n" + + "\tgift_rank\x18\x04 \x03(\v2\x17.hyapp.room.v1.RankItemR\bgiftRank\x12/\n" + + "\x04room\x18\x05 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x126\n" + + "\x06rocket\x18\x06 \x01(\v2\x1e.hyapp.room.v1.RoomRocketStateR\x06rocket\x12A\n" + + "\n" + + "lucky_gift\x18\a \x01(\v2\".hyapp.room.v1.LuckyGiftDrawResultR\tluckyGift\x12C\n" + + "\vlucky_gifts\x18\b \x03(\v2\".hyapp.room.v1.LuckyGiftDrawResultR\n" + + "luckyGifts\x12,\n" + + "\x12coin_balance_after\x18\t \x01(\x03R\x10coinBalanceAfter\x129\n" + + "\x19gift_income_balance_after\x18\n" + + " \x01(\x03R\x16giftIncomeBalanceAfter\x12H\n" + + "\rbatch_display\x18\v \x01(\v2#.hyapp.room.v1.SendGiftBatchDisplayR\fbatchDisplay\x12/\n" + + "\x02v2\x18\f \x01(\v2\x1f.hyapp.room.v1.SendGiftResultV2R\x02v2\"j\n" + + "\x1bCheckSpeakPermissionRequest\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\bapp_code\x18\x03 \x01(\tR\aappCode\"s\n" + + "\x1cCheckSpeakPermissionResponse\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\x12!\n" + + "\froom_version\x18\x03 \x01(\x03R\vroomVersion\"\xa6\x01\n" + + "\x19VerifyRoomPresenceRequest\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "session_id\x18\x03 \x01(\tR\tsessionId\x12\x1d\n" + + "\n" + + "request_id\x18\x04 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x05 \x01(\tR\aappCode\"q\n" + + "\x1aVerifyRoomPresenceResponse\x12\x18\n" + + "\apresent\x18\x01 \x01(\bR\apresent\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\x12!\n" + + "\froom_version\x18\x03 \x01(\x03R\vroomVersion\"S\n" + + "\x19ResolveRoomAppCodeRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\"7\n" + + "\x1aResolveRoomAppCodeResponse\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\"\x97\x03\n" + + "\x10ListRoomsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eviewer_user_id\x18\x02 \x01(\x03R\fviewerUserId\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\x12\x10\n" + + "\x03tab\x18\x04 \x01(\tR\x03tab\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\x12\x14\n" + + "\x05limit\x18\x06 \x01(\x05R\x05limit\x12\x14\n" + + "\x05query\x18\a \x01(\tR\x05query\x12!\n" + + "\fcountry_code\x18\b \x01(\tR\vcountryCode\x12.\n" + + "\x13viewer_country_code\x18\t \x01(\tR\x11viewerCountryCode\x12.\n" + + "\x13all_visible_regions\x18\n" + + " \x01(\bR\x11allVisibleRegions\x12(\n" + + "\x10filter_region_id\x18\v \x01(\x03R\x0efilterRegionId\"\xec\x01\n" + + "\x18ListRoomsByOwnersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eviewer_user_id\x18\x02 \x01(\x03R\fviewerUserId\x12$\n" + + "\x0eowner_user_ids\x18\x03 \x03(\x03R\fownerUserIds\x12\x10\n" + + "\x03tab\x18\x04 \x01(\tR\x03tab\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\x12\x14\n" + + "\x05limit\x18\x06 \x01(\x05R\x05limit\x12\x14\n" + + "\x05query\x18\a \x01(\tR\x05query\"\xb7\x02\n" + + "\x14ListRoomFeedsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eviewer_user_id\x18\x02 \x01(\x03R\fviewerUserId\x12*\n" + + "\x11visible_region_id\x18\x03 \x01(\x03R\x0fvisibleRegionId\x12\x10\n" + + "\x03tab\x18\x04 \x01(\tR\x03tab\x12\x16\n" + + "\x06cursor\x18\x05 \x01(\tR\x06cursor\x12\x14\n" + + "\x05limit\x18\x06 \x01(\x05R\x05limit\x12\x14\n" + + "\x05query\x18\a \x01(\tR\x05query\x12G\n" + + "\rrelated_users\x18\b \x03(\v2\".hyapp.room.v1.RoomFeedRelatedUserR\frelatedUsers\"\x99\x01\n" + + "\x1eListRoomGiftLeaderboardRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x16\n" + + "\x06period\x18\x02 \x01(\tR\x06period\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"c\n" + + "\x13RoomFeedRelatedUser\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x123\n" + + "\x16relation_updated_at_ms\x18\x02 \x01(\x03R\x13relationUpdatedAtMs\"\xd6\x03\n" + + "\fRoomListItem\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\x12\x14\n" + + "\x05title\x18\x04 \x01(\tR\x05title\x12\x1b\n" + + "\tcover_url\x18\x05 \x01(\tR\bcoverUrl\x12\x12\n" + + "\x04mode\x18\x06 \x01(\tR\x04mode\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x12\n" + + "\x04heat\x18\b \x01(\x03R\x04heat\x12!\n" + + "\fonline_count\x18\t \x01(\x05R\vonlineCount\x12\x1d\n" + + "\n" + + "seat_count\x18\n" + + " \x01(\x05R\tseatCount\x12.\n" + + "\x13occupied_seat_count\x18\v \x01(\x05R\x11occupiedSeatCount\x12*\n" + + "\x11visible_region_id\x18\f \x01(\x03R\x0fvisibleRegionId\x12\x19\n" + + "\bapp_code\x18\r \x01(\tR\aappCode\x12\"\n" + + "\rroom_short_id\x18\x0e \x01(\tR\vroomShortId\x12\x16\n" + + "\x06locked\x18\x0f \x01(\bR\x06locked\x12!\n" + + "\fcountry_code\x18\x10 \x01(\tR\vcountryCode\"g\n" + + "\x11ListRoomsResponse\x121\n" + + "\x05rooms\x18\x01 \x03(\v2\x1b.hyapp.room.v1.RoomListItemR\x05rooms\x12\x1f\n" + + "\vnext_cursor\x18\x02 \x01(\tR\n" + + "nextCursor\"\x96\x01\n" + + "\x17RoomGiftLeaderboardItem\x12\x12\n" + + "\x04rank\x18\x01 \x01(\x03R\x04rank\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x03 \x01(\x03R\tcoinSpent\x12/\n" + + "\x04room\x18\x04 \x01(\v2\x1b.hyapp.room.v1.RoomListItemR\x04room\"\xef\x01\n" + + "\x1fListRoomGiftLeaderboardResponse\x12<\n" + + "\x05items\x18\x01 \x03(\v2&.hyapp.room.v1.RoomGiftLeaderboardItemR\x05items\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12\x16\n" + + "\x06period\x18\x03 \x01(\tR\x06period\x12\x1e\n" + + "\vstart_at_ms\x18\x04 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x05 \x01(\x03R\aendAtMs\x12$\n" + + "\x0eserver_time_ms\x18\x06 \x01(\x03R\fserverTimeMs\"\xbe\x01\n" + + "\x1fListRoomContributionRankRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x16\n" + + "\x06period\x18\x03 \x01(\tR\x06period\x12\x14\n" + + "\x05limit\x18\x04 \x01(\x05R\x05limit\x12$\n" + + "\x0eviewer_user_id\x18\x05 \x01(\x03R\fviewerUserId\"\x8a\x02\n" + + " ListRoomContributionRankResponse\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\x16\n" + + "\x06period\x18\x02 \x01(\tR\x06period\x12\x1e\n" + + "\vstart_at_ms\x18\x03 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x04 \x01(\x03R\aendAtMs\x12=\n" + + "\x05items\x18\x05 \x03(\v2'.hyapp.room.v1.RoomContributionRankItemR\x05items\x12\x14\n" + + "\x05total\x18\x06 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\a \x01(\x03R\fserverTimeMs\"f\n" + + "\x10GetMyRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\"\x85\x01\n" + + "\x11GetMyRoomResponse\x12\x19\n" + + "\bhas_room\x18\x01 \x01(\bR\ahasRoom\x12/\n" + + "\x04room\x18\x02 \x01(\v2\x1b.hyapp.room.v1.RoomListItemR\x04room\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"`\n" + + "\x15GetCurrentRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"\xd6\x02\n" + + "\x16GetCurrentRoomResponse\x12(\n" + + "\x10has_current_room\x18\x01 \x01(\bR\x0ehasCurrentRoom\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12!\n" + + "\froom_version\x18\x03 \x01(\x03R\vroomVersion\x12\x12\n" + + "\x04role\x18\x04 \x01(\tR\x04role\x12$\n" + + "\x0emic_session_id\x18\x05 \x01(\tR\fmicSessionId\x12#\n" + + "\rpublish_state\x18\x06 \x01(\tR\fpublishState\x12+\n" + + "\x12need_join_im_group\x18\a \x01(\bR\x0fneedJoinImGroup\x12$\n" + + "\x0eneed_rtc_token\x18\b \x01(\bR\fneedRtcToken\x12$\n" + + "\x0eserver_time_ms\x18\t \x01(\x03R\fserverTimeMs\"\x87\x01\n" + + "\x16GetRoomSnapshotRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\"\x91\x01\n" + + "\x17GetRoomSnapshotResponse\x12/\n" + + "\x04room\x18\x01 \x01(\v2\x1b.hyapp.room.v1.RoomSnapshotR\x04room\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\x12\x1f\n" + + "\vis_followed\x18\x03 \x01(\bR\n" + + "isFollowed\"\x85\x01\n" + + "\x14GetRoomRocketRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\"t\n" + + "\x15GetRoomRocketResponse\x125\n" + + "\x06rocket\x18\x01 \x01(\v2\x1d.hyapp.room.v1.RoomRocketInfoR\x06rocket\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xd0\x01\n" + + "\x1aListRoomOnlineUsersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\x12\x12\n" + + "\x04sort\x18\x06 \x01(\tR\x04sort\"\xee\x01\n" + + "\x1bListRoomOnlineUsersResponse\x12-\n" + + "\x05users\x18\x01 \x03(\v2\x17.hyapp.room.v1.RoomUserR\x05users\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\x123\n" + + "\x05items\x18\x06 \x03(\v2\x1d.hyapp.room.v1.RoomOnlineUserR\x05items\"\xd2\x01\n" + + "\x0eRoomBannedUser\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\"\n" + + "\ractor_user_id\x18\x02 \x01(\x03R\vactorUserId\x12\"\n" + + "\rcreated_at_ms\x18\x03 \x01(\x03R\vcreatedAtMs\x12\x1e\n" + + "\vunban_at_ms\x18\x04 \x01(\x03R\tunbanAtMs\x12!\n" + + "\fremaining_ms\x18\x05 \x01(\x03R\vremainingMs\x12\x1c\n" + + "\tpermanent\x18\x06 \x01(\bR\tpermanent\"\xbc\x01\n" + + "\x1aListRoomBannedUsersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\"\xbf\x01\n" + + "\x1bListRoomBannedUsersResponse\x123\n" + + "\x05items\x18\x01 \x03(\v2\x1d.hyapp.room.v1.RoomBannedUserR\x05items\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\"u\n" + + "\x11FollowRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\x95\x01\n" + + "\x12FollowRoomResponse\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\x1a\n" + + "\bfollowed\x18\x02 \x01(\bR\bfollowed\x12$\n" + + "\x0efollowed_at_ms\x18\x03 \x01(\x03R\ffollowedAtMs\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"w\n" + + "\x13UnfollowRoomRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"q\n" + + "\x14UnfollowRoomResponse\x12\x17\n" + + "\aroom_id\x18\x01 \x01(\tR\x06roomId\x12\x1a\n" + + "\bfollowed\x18\x02 \x01(\bR\bfollowed\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xe4\x01\n" + + "\x10SendGiftLuckyHit\x12\x1d\n" + + "\n" + + "gift_index\x18\x01 \x01(\x05R\tgiftIndex\x12\x17\n" + + "\adraw_id\x18\x02 \x01(\tR\x06drawId\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12(\n" + + "\x10selected_tier_id\x18\x04 \x01(\tR\x0eselectedTierId\x12%\n" + + "\x0emultiplier_ppm\x18\x05 \x01(\x03R\rmultiplierPpm\x12!\n" + + "\freward_coins\x18\x06 \x01(\x03R\vrewardCoins\"\xb1\a\n" + + "\x10SendGiftResultV2\x12\x1f\n" + + "\vapi_version\x18\x01 \x01(\x05R\n" + + "apiVersion\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12(\n" + + "\x10combo_session_id\x18\x03 \x01(\tR\x0ecomboSessionId\x12\x1b\n" + + "\tbatch_seq\x18\x04 \x01(\x03R\bbatchSeq\x12+\n" + + "\x11idempotent_replay\x18\x05 \x01(\bR\x10idempotentReplay\x124\n" + + "\x16committed_room_version\x18\x06 \x01(\x03R\x14committedRoomVersion\x12,\n" + + "\x12billing_receipt_id\x18\a \x01(\tR\x10billingReceiptId\x12,\n" + + "\x12coin_balance_after\x18\b \x01(\x03R\x10coinBalanceAfter\x129\n" + + "\x19gift_income_balance_after\x18\t \x01(\x03R\x16giftIncomeBalanceAfter\x12,\n" + + "\x12settled_gift_count\x18\n" + + " \x01(\x05R\x10settledGiftCount\x125\n" + + "\x17settled_target_user_ids\x18\v \x03(\x03R\x14settledTargetUserIds\x12'\n" + + "\x0fbalance_version\x18\f \x01(\x03R\x0ebalanceVersion\x12A\n" + + "\n" + + "lucky_gift\x18\r \x01(\v2\".hyapp.room.v1.LuckyGiftDrawResultR\tluckyGift\x12C\n" + + "\vlucky_gifts\x18\x0e \x03(\v2\".hyapp.room.v1.LuckyGiftDrawResultR\n" + + "luckyGifts\x12>\n" + + "\n" + + "lucky_hits\x18\x0f \x03(\v2\x1f.hyapp.room.v1.SendGiftLuckyHitR\tluckyHits\x12H\n" + + "\rbatch_display\x18\x10 \x01(\v2#.hyapp.room.v1.SendGiftBatchDisplayR\fbatchDisplay\x12\x1b\n" + + "\troom_heat\x18\x11 \x01(\x03R\broomHeat\x124\n" + + "\tgift_rank\x18\x12 \x03(\v2\x17.hyapp.room.v1.RankItemR\bgiftRank\x12)\n" + + "\x10operation_status\x18\x13 \x01(\tR\x0foperationStatus2\xb2\x1b\n" + + "\x12RoomCommandService\x12Q\n" + + "\n" + + "CreateRoom\x12 .hyapp.room.v1.CreateRoomRequest\x1a!.hyapp.room.v1.CreateRoomResponse\x12f\n" + + "\x11UpdateRoomProfile\x12'.hyapp.room.v1.UpdateRoomProfileRequest\x1a(.hyapp.room.v1.UpdateRoomProfileResponse\x12i\n" + + "\x12SaveRoomBackground\x12(.hyapp.room.v1.SaveRoomBackgroundRequest\x1a).hyapp.room.v1.SaveRoomBackgroundResponse\x12f\n" + + "\x11SetRoomBackground\x12'.hyapp.room.v1.SetRoomBackgroundRequest\x1a(.hyapp.room.v1.SetRoomBackgroundResponse\x12K\n" + + "\bJoinRoom\x12\x1e.hyapp.room.v1.JoinRoomRequest\x1a\x1f.hyapp.room.v1.JoinRoomResponse\x12Z\n" + + "\rRoomHeartbeat\x12#.hyapp.room.v1.RoomHeartbeatRequest\x1a$.hyapp.room.v1.RoomHeartbeatResponse\x12N\n" + + "\tLeaveRoom\x12\x1f.hyapp.room.v1.LeaveRoomRequest\x1a .hyapp.room.v1.LeaveRoomResponse\x12N\n" + + "\tCloseRoom\x12\x1f.hyapp.room.v1.CloseRoomRequest\x1a .hyapp.room.v1.CloseRoomResponse\x12`\n" + + "\x0fAdminUpdateRoom\x12%.hyapp.room.v1.AdminUpdateRoomRequest\x1a&.hyapp.room.v1.AdminUpdateRoomResponse\x12`\n" + + "\x0fAdminDeleteRoom\x12%.hyapp.room.v1.AdminDeleteRoomRequest\x1a&.hyapp.room.v1.AdminDeleteRoomResponse\x12\x84\x01\n" + + "\x1bAdminUpdateRoomRocketConfig\x121.hyapp.room.v1.AdminUpdateRoomRocketConfigRequest\x1a2.hyapp.room.v1.AdminUpdateRoomRocketConfigResponse\x12~\n" + + "\x19AdminUpdateRoomSeatConfig\x12/.hyapp.room.v1.AdminUpdateRoomSeatConfigRequest\x1a0.hyapp.room.v1.AdminUpdateRoomSeatConfigResponse\x12\x90\x01\n" + + "\x1fAdminUpdateHumanRoomRobotConfig\x125.hyapp.room.v1.AdminUpdateHumanRoomRobotConfigRequest\x1a6.hyapp.room.v1.AdminUpdateHumanRoomRobotConfigResponse\x12i\n" + + "\x12AdminCreateRoomPin\x12(.hyapp.room.v1.AdminCreateRoomPinRequest\x1a).hyapp.room.v1.AdminCreateRoomPinResponse\x12i\n" + + "\x12AdminCancelRoomPin\x12(.hyapp.room.v1.AdminCancelRoomPinRequest\x1a).hyapp.room.v1.AdminCancelRoomPinResponse\x12o\n" + + "\x14AdminCreateRobotRoom\x12*.hyapp.room.v1.AdminCreateRobotRoomRequest\x1a+.hyapp.room.v1.AdminCreateRobotRoomResponse\x12x\n" + + "\x17AdminSetRobotRoomStatus\x12-.hyapp.room.v1.AdminSetRobotRoomStatusRequest\x1a..hyapp.room.v1.AdminSetRobotRoomStatusResponse\x12\x84\x01\n" + + "\x1bAdminRenameOwnerCountryCode\x121.hyapp.room.v1.AdminRenameOwnerCountryCodeRequest\x1a2.hyapp.room.v1.AdminRenameOwnerCountryCodeResponse\x12B\n" + + "\x05MicUp\x12\x1b.hyapp.room.v1.MicUpRequest\x1a\x1c.hyapp.room.v1.MicUpResponse\x12H\n" + + "\aMicDown\x12\x1d.hyapp.room.v1.MicDownRequest\x1a\x1e.hyapp.room.v1.MicDownResponse\x12Z\n" + + "\rChangeMicSeat\x12#.hyapp.room.v1.ChangeMicSeatRequest\x1a$.hyapp.room.v1.ChangeMicSeatResponse\x12o\n" + + "\x14ConfirmMicPublishing\x12*.hyapp.room.v1.ConfirmMicPublishingRequest\x1a+.hyapp.room.v1.ConfirmMicPublishingResponse\x12W\n" + + "\fMicHeartbeat\x12\".hyapp.room.v1.MicHeartbeatRequest\x1a#.hyapp.room.v1.MicHeartbeatResponse\x12Q\n" + + "\n" + + "SetMicMute\x12 .hyapp.room.v1.SetMicMuteRequest\x1a!.hyapp.room.v1.SetMicMuteResponse\x12Z\n" + + "\rApplyRTCEvent\x12#.hyapp.room.v1.ApplyRTCEventRequest\x1a$.hyapp.room.v1.ApplyRTCEventResponse\x12]\n" + + "\x0eSetMicSeatLock\x12$.hyapp.room.v1.SetMicSeatLockRequest\x1a%.hyapp.room.v1.SetMicSeatLockResponse\x12]\n" + + "\x0eSetChatEnabled\x12$.hyapp.room.v1.SetChatEnabledRequest\x1a%.hyapp.room.v1.SetChatEnabledResponse\x12`\n" + + "\x0fSetRoomPassword\x12%.hyapp.room.v1.SetRoomPasswordRequest\x1a&.hyapp.room.v1.SetRoomPasswordResponse\x12W\n" + + "\fSetRoomAdmin\x12\".hyapp.room.v1.SetRoomAdminRequest\x1a#.hyapp.room.v1.SetRoomAdminResponse\x12K\n" + + "\bMuteUser\x12\x1e.hyapp.room.v1.MuteUserRequest\x1a\x1f.hyapp.room.v1.MuteUserResponse\x12K\n" + + "\bKickUser\x12\x1e.hyapp.room.v1.KickUserRequest\x1a\x1f.hyapp.room.v1.KickUserResponse\x12N\n" + + "\tUnbanUser\x12\x1f.hyapp.room.v1.UnbanUserRequest\x1a .hyapp.room.v1.UnbanUserResponse\x12`\n" + + "\x0fSystemEvictUser\x12%.hyapp.room.v1.SystemEvictUserRequest\x1a&.hyapp.room.v1.SystemEvictUserResponse\x12K\n" + + "\bSendGift\x12\x1e.hyapp.room.v1.SendGiftRequest\x1a\x1f.hyapp.room.v1.SendGiftResponse\x12Q\n" + + "\n" + + "FollowRoom\x12 .hyapp.room.v1.FollowRoomRequest\x1a!.hyapp.room.v1.FollowRoomResponse\x12W\n" + + "\fUnfollowRoom\x12\".hyapp.room.v1.UnfollowRoomRequest\x1a#.hyapp.room.v1.UnfollowRoomResponse2\xd9\x02\n" + + "\x10RoomGuardService\x12o\n" + + "\x14CheckSpeakPermission\x12*.hyapp.room.v1.CheckSpeakPermissionRequest\x1a+.hyapp.room.v1.CheckSpeakPermissionResponse\x12i\n" + + "\x12VerifyRoomPresence\x12(.hyapp.room.v1.VerifyRoomPresenceRequest\x1a).hyapp.room.v1.VerifyRoomPresenceResponse\x12i\n" + + "\x12ResolveRoomAppCode\x12(.hyapp.room.v1.ResolveRoomAppCodeRequest\x1a).hyapp.room.v1.ResolveRoomAppCodeResponse2\xe4\x10\n" + + "\x10RoomQueryService\x12]\n" + + "\x0eAdminListRooms\x12$.hyapp.room.v1.AdminListRoomsRequest\x1a%.hyapp.room.v1.AdminListRoomsResponse\x12W\n" + + "\fAdminGetRoom\x12\".hyapp.room.v1.AdminGetRoomRequest\x1a#.hyapp.room.v1.AdminGetRoomResponse\x12{\n" + + "\x18AdminGetRoomRocketConfig\x12..hyapp.room.v1.AdminGetRoomRocketConfigRequest\x1a/.hyapp.room.v1.AdminGetRoomRocketConfigResponse\x12u\n" + + "\x16AdminGetRoomSeatConfig\x12,.hyapp.room.v1.AdminGetRoomSeatConfigRequest\x1a-.hyapp.room.v1.AdminGetRoomSeatConfigResponse\x12\x87\x01\n" + + "\x1cAdminGetHumanRoomRobotConfig\x122.hyapp.room.v1.AdminGetHumanRoomRobotConfigRequest\x1a3.hyapp.room.v1.AdminGetHumanRoomRobotConfigResponse\x12f\n" + + "\x11AdminListRoomPins\x12'.hyapp.room.v1.AdminListRoomPinsRequest\x1a(.hyapp.room.v1.AdminListRoomPinsResponse\x12l\n" + + "\x13AdminListRobotRooms\x12).hyapp.room.v1.AdminListRobotRoomsRequest\x1a*.hyapp.room.v1.AdminListRobotRoomsResponse\x12\x8d\x01\n" + + "\x1eAdminFilterAvailableRoomRobots\x124.hyapp.room.v1.AdminFilterAvailableRoomRobotsRequest\x1a5.hyapp.room.v1.AdminFilterAvailableRoomRobotsResponse\x12N\n" + + "\tListRooms\x12\x1f.hyapp.room.v1.ListRoomsRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12^\n" + + "\x11ListRoomsByOwners\x12'.hyapp.room.v1.ListRoomsByOwnersRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12V\n" + + "\rListRoomFeeds\x12#.hyapp.room.v1.ListRoomFeedsRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12x\n" + + "\x17ListRoomGiftLeaderboard\x12-.hyapp.room.v1.ListRoomGiftLeaderboardRequest\x1a..hyapp.room.v1.ListRoomGiftLeaderboardResponse\x12{\n" + + "\x18ListRoomContributionRank\x12..hyapp.room.v1.ListRoomContributionRankRequest\x1a/.hyapp.room.v1.ListRoomContributionRankResponse\x12N\n" + + "\tGetMyRoom\x12\x1f.hyapp.room.v1.GetMyRoomRequest\x1a .hyapp.room.v1.GetMyRoomResponse\x12]\n" + + "\x0eGetCurrentRoom\x12$.hyapp.room.v1.GetCurrentRoomRequest\x1a%.hyapp.room.v1.GetCurrentRoomResponse\x12`\n" + + "\x0fGetRoomSnapshot\x12%.hyapp.room.v1.GetRoomSnapshotRequest\x1a&.hyapp.room.v1.GetRoomSnapshotResponse\x12l\n" + + "\x13ListRoomBackgrounds\x12).hyapp.room.v1.ListRoomBackgroundsRequest\x1a*.hyapp.room.v1.ListRoomBackgroundsResponse\x12Z\n" + + "\rGetRoomRocket\x12#.hyapp.room.v1.GetRoomRocketRequest\x1a$.hyapp.room.v1.GetRoomRocketResponse\x12l\n" + + "\x13ListRoomOnlineUsers\x12).hyapp.room.v1.ListRoomOnlineUsersRequest\x1a*.hyapp.room.v1.ListRoomOnlineUsersResponse\x12l\n" + + "\x13ListRoomBannedUsers\x12).hyapp.room.v1.ListRoomBannedUsersRequest\x1a*.hyapp.room.v1.ListRoomBannedUsersResponseB&Z$hyapp.local/api/proto/room/v1;roomv1b\x06proto3" var ( file_proto_room_v1_room_proto_rawDescOnce sync.Once - file_proto_room_v1_room_proto_rawDescData = file_proto_room_v1_room_proto_rawDesc + file_proto_room_v1_room_proto_rawDescData []byte ) func file_proto_room_v1_room_proto_rawDescGZIP() []byte { file_proto_room_v1_room_proto_rawDescOnce.Do(func() { - file_proto_room_v1_room_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_room_v1_room_proto_rawDescData) + file_proto_room_v1_room_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_room_v1_room_proto_rawDesc), len(file_proto_room_v1_room_proto_rawDesc))) }) return file_proto_room_v1_room_proto_rawDescData } @@ -15949,7 +14257,7 @@ func file_proto_room_v1_room_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_room_v1_room_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_room_v1_room_proto_rawDesc), len(file_proto_room_v1_room_proto_rawDesc)), NumEnums: 0, NumMessages: 159, NumExtensions: 0, @@ -15960,7 +14268,6 @@ func file_proto_room_v1_room_proto_init() { MessageInfos: file_proto_room_v1_room_proto_msgTypes, }.Build() File_proto_room_v1_room_proto = out.File - file_proto_room_v1_room_proto_rawDesc = nil file_proto_room_v1_room_proto_goTypes = nil file_proto_room_v1_room_proto_depIdxs = nil } diff --git a/api/proto/room/v1/room_grpc.pb.go b/api/proto/room/v1/room_grpc.pb.go index 653e7f90..b647f921 100644 --- a/api/proto/room/v1/room_grpc.pb.go +++ b/api/proto/room/v1/room_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/room/v1/room.proto package roomv1 @@ -522,112 +522,112 @@ type RoomCommandServiceServer interface { type UnimplementedRoomCommandServiceServer struct{} func (UnimplementedRoomCommandServiceServer) CreateRoom(context.Context, *CreateRoomRequest) (*CreateRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateRoom not implemented") } func (UnimplementedRoomCommandServiceServer) UpdateRoomProfile(context.Context, *UpdateRoomProfileRequest) (*UpdateRoomProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRoomProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRoomProfile not implemented") } func (UnimplementedRoomCommandServiceServer) SaveRoomBackground(context.Context, *SaveRoomBackgroundRequest) (*SaveRoomBackgroundResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SaveRoomBackground not implemented") + return nil, status.Error(codes.Unimplemented, "method SaveRoomBackground not implemented") } func (UnimplementedRoomCommandServiceServer) SetRoomBackground(context.Context, *SetRoomBackgroundRequest) (*SetRoomBackgroundResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetRoomBackground not implemented") + return nil, status.Error(codes.Unimplemented, "method SetRoomBackground not implemented") } func (UnimplementedRoomCommandServiceServer) JoinRoom(context.Context, *JoinRoomRequest) (*JoinRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method JoinRoom not implemented") } func (UnimplementedRoomCommandServiceServer) RoomHeartbeat(context.Context, *RoomHeartbeatRequest) (*RoomHeartbeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RoomHeartbeat not implemented") + return nil, status.Error(codes.Unimplemented, "method RoomHeartbeat not implemented") } func (UnimplementedRoomCommandServiceServer) LeaveRoom(context.Context, *LeaveRoomRequest) (*LeaveRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LeaveRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method LeaveRoom not implemented") } func (UnimplementedRoomCommandServiceServer) CloseRoom(context.Context, *CloseRoomRequest) (*CloseRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CloseRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method CloseRoom not implemented") } func (UnimplementedRoomCommandServiceServer) AdminUpdateRoom(context.Context, *AdminUpdateRoomRequest) (*AdminUpdateRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminUpdateRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminUpdateRoom not implemented") } func (UnimplementedRoomCommandServiceServer) AdminDeleteRoom(context.Context, *AdminDeleteRoomRequest) (*AdminDeleteRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminDeleteRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminDeleteRoom not implemented") } func (UnimplementedRoomCommandServiceServer) AdminUpdateRoomRocketConfig(context.Context, *AdminUpdateRoomRocketConfigRequest) (*AdminUpdateRoomRocketConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminUpdateRoomRocketConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminUpdateRoomRocketConfig not implemented") } func (UnimplementedRoomCommandServiceServer) AdminUpdateRoomSeatConfig(context.Context, *AdminUpdateRoomSeatConfigRequest) (*AdminUpdateRoomSeatConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminUpdateRoomSeatConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminUpdateRoomSeatConfig not implemented") } func (UnimplementedRoomCommandServiceServer) AdminUpdateHumanRoomRobotConfig(context.Context, *AdminUpdateHumanRoomRobotConfigRequest) (*AdminUpdateHumanRoomRobotConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminUpdateHumanRoomRobotConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminUpdateHumanRoomRobotConfig not implemented") } func (UnimplementedRoomCommandServiceServer) AdminCreateRoomPin(context.Context, *AdminCreateRoomPinRequest) (*AdminCreateRoomPinResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminCreateRoomPin not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminCreateRoomPin not implemented") } func (UnimplementedRoomCommandServiceServer) AdminCancelRoomPin(context.Context, *AdminCancelRoomPinRequest) (*AdminCancelRoomPinResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminCancelRoomPin not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminCancelRoomPin not implemented") } func (UnimplementedRoomCommandServiceServer) AdminCreateRobotRoom(context.Context, *AdminCreateRobotRoomRequest) (*AdminCreateRobotRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminCreateRobotRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminCreateRobotRoom not implemented") } func (UnimplementedRoomCommandServiceServer) AdminSetRobotRoomStatus(context.Context, *AdminSetRobotRoomStatusRequest) (*AdminSetRobotRoomStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminSetRobotRoomStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminSetRobotRoomStatus not implemented") } func (UnimplementedRoomCommandServiceServer) AdminRenameOwnerCountryCode(context.Context, *AdminRenameOwnerCountryCodeRequest) (*AdminRenameOwnerCountryCodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminRenameOwnerCountryCode not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminRenameOwnerCountryCode not implemented") } func (UnimplementedRoomCommandServiceServer) MicUp(context.Context, *MicUpRequest) (*MicUpResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MicUp not implemented") + return nil, status.Error(codes.Unimplemented, "method MicUp not implemented") } func (UnimplementedRoomCommandServiceServer) MicDown(context.Context, *MicDownRequest) (*MicDownResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MicDown not implemented") + return nil, status.Error(codes.Unimplemented, "method MicDown not implemented") } func (UnimplementedRoomCommandServiceServer) ChangeMicSeat(context.Context, *ChangeMicSeatRequest) (*ChangeMicSeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChangeMicSeat not implemented") + return nil, status.Error(codes.Unimplemented, "method ChangeMicSeat not implemented") } func (UnimplementedRoomCommandServiceServer) ConfirmMicPublishing(context.Context, *ConfirmMicPublishingRequest) (*ConfirmMicPublishingResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConfirmMicPublishing not implemented") + return nil, status.Error(codes.Unimplemented, "method ConfirmMicPublishing not implemented") } func (UnimplementedRoomCommandServiceServer) MicHeartbeat(context.Context, *MicHeartbeatRequest) (*MicHeartbeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MicHeartbeat not implemented") + return nil, status.Error(codes.Unimplemented, "method MicHeartbeat not implemented") } func (UnimplementedRoomCommandServiceServer) SetMicMute(context.Context, *SetMicMuteRequest) (*SetMicMuteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetMicMute not implemented") + return nil, status.Error(codes.Unimplemented, "method SetMicMute not implemented") } func (UnimplementedRoomCommandServiceServer) ApplyRTCEvent(context.Context, *ApplyRTCEventRequest) (*ApplyRTCEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyRTCEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyRTCEvent not implemented") } func (UnimplementedRoomCommandServiceServer) SetMicSeatLock(context.Context, *SetMicSeatLockRequest) (*SetMicSeatLockResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetMicSeatLock not implemented") + return nil, status.Error(codes.Unimplemented, "method SetMicSeatLock not implemented") } func (UnimplementedRoomCommandServiceServer) SetChatEnabled(context.Context, *SetChatEnabledRequest) (*SetChatEnabledResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetChatEnabled not implemented") + return nil, status.Error(codes.Unimplemented, "method SetChatEnabled not implemented") } func (UnimplementedRoomCommandServiceServer) SetRoomPassword(context.Context, *SetRoomPasswordRequest) (*SetRoomPasswordResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetRoomPassword not implemented") + return nil, status.Error(codes.Unimplemented, "method SetRoomPassword not implemented") } func (UnimplementedRoomCommandServiceServer) SetRoomAdmin(context.Context, *SetRoomAdminRequest) (*SetRoomAdminResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetRoomAdmin not implemented") + return nil, status.Error(codes.Unimplemented, "method SetRoomAdmin not implemented") } func (UnimplementedRoomCommandServiceServer) MuteUser(context.Context, *MuteUserRequest) (*MuteUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MuteUser not implemented") + return nil, status.Error(codes.Unimplemented, "method MuteUser not implemented") } func (UnimplementedRoomCommandServiceServer) KickUser(context.Context, *KickUserRequest) (*KickUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method KickUser not implemented") + return nil, status.Error(codes.Unimplemented, "method KickUser not implemented") } func (UnimplementedRoomCommandServiceServer) UnbanUser(context.Context, *UnbanUserRequest) (*UnbanUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnbanUser not implemented") + return nil, status.Error(codes.Unimplemented, "method UnbanUser not implemented") } func (UnimplementedRoomCommandServiceServer) SystemEvictUser(context.Context, *SystemEvictUserRequest) (*SystemEvictUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SystemEvictUser not implemented") + return nil, status.Error(codes.Unimplemented, "method SystemEvictUser not implemented") } func (UnimplementedRoomCommandServiceServer) SendGift(context.Context, *SendGiftRequest) (*SendGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendGift not implemented") + return nil, status.Error(codes.Unimplemented, "method SendGift not implemented") } func (UnimplementedRoomCommandServiceServer) FollowRoom(context.Context, *FollowRoomRequest) (*FollowRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FollowRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method FollowRoom not implemented") } func (UnimplementedRoomCommandServiceServer) UnfollowRoom(context.Context, *UnfollowRoomRequest) (*UnfollowRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnfollowRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method UnfollowRoom not implemented") } func (UnimplementedRoomCommandServiceServer) mustEmbedUnimplementedRoomCommandServiceServer() {} func (UnimplementedRoomCommandServiceServer) testEmbeddedByValue() {} @@ -640,7 +640,7 @@ type UnsafeRoomCommandServiceServer interface { } func RegisterRoomCommandServiceServer(s grpc.ServiceRegistrar, srv RoomCommandServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomCommandServiceServer was + // If the following call panics, it indicates UnimplementedRoomCommandServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1529,13 +1529,13 @@ type RoomGuardServiceServer interface { type UnimplementedRoomGuardServiceServer struct{} func (UnimplementedRoomGuardServiceServer) CheckSpeakPermission(context.Context, *CheckSpeakPermissionRequest) (*CheckSpeakPermissionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckSpeakPermission not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckSpeakPermission not implemented") } func (UnimplementedRoomGuardServiceServer) VerifyRoomPresence(context.Context, *VerifyRoomPresenceRequest) (*VerifyRoomPresenceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerifyRoomPresence not implemented") + return nil, status.Error(codes.Unimplemented, "method VerifyRoomPresence not implemented") } func (UnimplementedRoomGuardServiceServer) ResolveRoomAppCode(context.Context, *ResolveRoomAppCodeRequest) (*ResolveRoomAppCodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveRoomAppCode not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveRoomAppCode not implemented") } func (UnimplementedRoomGuardServiceServer) mustEmbedUnimplementedRoomGuardServiceServer() {} func (UnimplementedRoomGuardServiceServer) testEmbeddedByValue() {} @@ -1548,7 +1548,7 @@ type UnsafeRoomGuardServiceServer interface { } func RegisterRoomGuardServiceServer(s grpc.ServiceRegistrar, srv RoomGuardServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomGuardServiceServer was + // If the following call panics, it indicates UnimplementedRoomGuardServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1932,64 +1932,64 @@ type RoomQueryServiceServer interface { type UnimplementedRoomQueryServiceServer struct{} func (UnimplementedRoomQueryServiceServer) AdminListRooms(context.Context, *AdminListRoomsRequest) (*AdminListRoomsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminListRooms not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminListRooms not implemented") } func (UnimplementedRoomQueryServiceServer) AdminGetRoom(context.Context, *AdminGetRoomRequest) (*AdminGetRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminGetRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminGetRoom not implemented") } func (UnimplementedRoomQueryServiceServer) AdminGetRoomRocketConfig(context.Context, *AdminGetRoomRocketConfigRequest) (*AdminGetRoomRocketConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminGetRoomRocketConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminGetRoomRocketConfig not implemented") } func (UnimplementedRoomQueryServiceServer) AdminGetRoomSeatConfig(context.Context, *AdminGetRoomSeatConfigRequest) (*AdminGetRoomSeatConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminGetRoomSeatConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminGetRoomSeatConfig not implemented") } func (UnimplementedRoomQueryServiceServer) AdminGetHumanRoomRobotConfig(context.Context, *AdminGetHumanRoomRobotConfigRequest) (*AdminGetHumanRoomRobotConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminGetHumanRoomRobotConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminGetHumanRoomRobotConfig not implemented") } func (UnimplementedRoomQueryServiceServer) AdminListRoomPins(context.Context, *AdminListRoomPinsRequest) (*AdminListRoomPinsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminListRoomPins not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminListRoomPins not implemented") } func (UnimplementedRoomQueryServiceServer) AdminListRobotRooms(context.Context, *AdminListRobotRoomsRequest) (*AdminListRobotRoomsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminListRobotRooms not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminListRobotRooms not implemented") } func (UnimplementedRoomQueryServiceServer) AdminFilterAvailableRoomRobots(context.Context, *AdminFilterAvailableRoomRobotsRequest) (*AdminFilterAvailableRoomRobotsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminFilterAvailableRoomRobots not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminFilterAvailableRoomRobots not implemented") } func (UnimplementedRoomQueryServiceServer) ListRooms(context.Context, *ListRoomsRequest) (*ListRoomsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRooms not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRooms not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomsByOwners(context.Context, *ListRoomsByOwnersRequest) (*ListRoomsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomsByOwners not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomsByOwners not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomFeeds(context.Context, *ListRoomFeedsRequest) (*ListRoomsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomFeeds not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomFeeds not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomGiftLeaderboard(context.Context, *ListRoomGiftLeaderboardRequest) (*ListRoomGiftLeaderboardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomGiftLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomGiftLeaderboard not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomContributionRank(context.Context, *ListRoomContributionRankRequest) (*ListRoomContributionRankResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomContributionRank not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomContributionRank not implemented") } func (UnimplementedRoomQueryServiceServer) GetMyRoom(context.Context, *GetMyRoomRequest) (*GetMyRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMyRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method GetMyRoom not implemented") } func (UnimplementedRoomQueryServiceServer) GetCurrentRoom(context.Context, *GetCurrentRoomRequest) (*GetCurrentRoomResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCurrentRoom not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCurrentRoom not implemented") } func (UnimplementedRoomQueryServiceServer) GetRoomSnapshot(context.Context, *GetRoomSnapshotRequest) (*GetRoomSnapshotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomSnapshot not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomSnapshot not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomBackgrounds(context.Context, *ListRoomBackgroundsRequest) (*ListRoomBackgroundsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomBackgrounds not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomBackgrounds not implemented") } func (UnimplementedRoomQueryServiceServer) GetRoomRocket(context.Context, *GetRoomRocketRequest) (*GetRoomRocketResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoomRocket not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoomRocket not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomOnlineUsers(context.Context, *ListRoomOnlineUsersRequest) (*ListRoomOnlineUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomOnlineUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomOnlineUsers not implemented") } func (UnimplementedRoomQueryServiceServer) ListRoomBannedUsers(context.Context, *ListRoomBannedUsersRequest) (*ListRoomBannedUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoomBannedUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoomBannedUsers not implemented") } func (UnimplementedRoomQueryServiceServer) mustEmbedUnimplementedRoomQueryServiceServer() {} func (UnimplementedRoomQueryServiceServer) testEmbeddedByValue() {} @@ -2002,7 +2002,7 @@ type UnsafeRoomQueryServiceServer interface { } func RegisterRoomQueryServiceServer(s grpc.ServiceRegistrar, srv RoomQueryServiceServer) { - // If the following call pancis, it indicates UnimplementedRoomQueryServiceServer was + // If the following call panics, it indicates UnimplementedRoomQueryServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/user/v1/auth.pb.go b/api/proto/user/v1/auth.pb.go index 07457887..6e480cdf 100644 --- a/api/proto/user/v1/auth.pb.go +++ b/api/proto/user/v1/auth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/user/v1/auth.proto package userv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,13 +23,12 @@ const ( // LoginPasswordRequest 使用当前 display_user_id 和已设置密码登录。 type LoginPasswordRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LoginPasswordRequest) Reset() { @@ -84,30 +84,29 @@ func (x *LoginPasswordRequest) GetPassword() string { // LoginThirdPartyRequest 使用三方凭证登录或注册。 type LoginThirdPartyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` - Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` - Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` - Gender string `protobuf:"bytes,5,opt,name=gender,proto3" json:"gender,omitempty"` - Country string `protobuf:"bytes,6,opt,name=country,proto3" json:"country,omitempty"` - InviteCode string `protobuf:"bytes,7,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` - DeviceId string `protobuf:"bytes,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - Device string `protobuf:"bytes,9,opt,name=device,proto3" json:"device,omitempty"` - Avatar string `protobuf:"bytes,10,opt,name=avatar,proto3" json:"avatar,omitempty"` - Birth string `protobuf:"bytes,11,opt,name=birth,proto3" json:"birth,omitempty"` - AppVersion string `protobuf:"bytes,12,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` - Source string `protobuf:"bytes,13,opt,name=source,proto3" json:"source,omitempty"` - Platform string `protobuf:"bytes,14,opt,name=platform,proto3" json:"platform,omitempty"` - Language string `protobuf:"bytes,15,opt,name=language,proto3" json:"language,omitempty"` - OsVersion string `protobuf:"bytes,16,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` - BuildNumber string `protobuf:"bytes,17,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` - Timezone string `protobuf:"bytes,18,opt,name=timezone,proto3" json:"timezone,omitempty"` - InstallChannel string `protobuf:"bytes,19,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` - Campaign string `protobuf:"bytes,20,opt,name=campaign,proto3" json:"campaign,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` + Gender string `protobuf:"bytes,5,opt,name=gender,proto3" json:"gender,omitempty"` + Country string `protobuf:"bytes,6,opt,name=country,proto3" json:"country,omitempty"` + InviteCode string `protobuf:"bytes,7,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` + DeviceId string `protobuf:"bytes,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Device string `protobuf:"bytes,9,opt,name=device,proto3" json:"device,omitempty"` + Avatar string `protobuf:"bytes,10,opt,name=avatar,proto3" json:"avatar,omitempty"` + Birth string `protobuf:"bytes,11,opt,name=birth,proto3" json:"birth,omitempty"` + AppVersion string `protobuf:"bytes,12,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + Source string `protobuf:"bytes,13,opt,name=source,proto3" json:"source,omitempty"` + Platform string `protobuf:"bytes,14,opt,name=platform,proto3" json:"platform,omitempty"` + Language string `protobuf:"bytes,15,opt,name=language,proto3" json:"language,omitempty"` + OsVersion string `protobuf:"bytes,16,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` + BuildNumber string `protobuf:"bytes,17,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` + Timezone string `protobuf:"bytes,18,opt,name=timezone,proto3" json:"timezone,omitempty"` + InstallChannel string `protobuf:"bytes,19,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` + Campaign string `protobuf:"bytes,20,opt,name=campaign,proto3" json:"campaign,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LoginThirdPartyRequest) Reset() { @@ -283,30 +282,29 @@ func (x *LoginThirdPartyRequest) GetCampaign() string { // RegisterThirdPartyRequest 是资料页完成时使用的三方注册入口。 // 它不会先返回 profile_required 登录态,而是在服务端一次性校验 credential、写用户资料并签发完整 session。 type RegisterThirdPartyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` - Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` - DeviceId string `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - Username string `protobuf:"bytes,5,opt,name=username,proto3" json:"username,omitempty"` - Avatar string `protobuf:"bytes,6,opt,name=avatar,proto3" json:"avatar,omitempty"` - Gender string `protobuf:"bytes,7,opt,name=gender,proto3" json:"gender,omitempty"` - Country string `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"` - InviteCode string `protobuf:"bytes,9,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` - Device string `protobuf:"bytes,10,opt,name=device,proto3" json:"device,omitempty"` - OsVersion string `protobuf:"bytes,11,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` - Birth string `protobuf:"bytes,12,opt,name=birth,proto3" json:"birth,omitempty"` - AppVersion string `protobuf:"bytes,13,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` - BuildNumber string `protobuf:"bytes,14,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` - Source string `protobuf:"bytes,15,opt,name=source,proto3" json:"source,omitempty"` - InstallChannel string `protobuf:"bytes,16,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` - Campaign string `protobuf:"bytes,17,opt,name=campaign,proto3" json:"campaign,omitempty"` - Platform string `protobuf:"bytes,18,opt,name=platform,proto3" json:"platform,omitempty"` - Language string `protobuf:"bytes,19,opt,name=language,proto3" json:"language,omitempty"` - Timezone string `protobuf:"bytes,20,opt,name=timezone,proto3" json:"timezone,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` + DeviceId string `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Username string `protobuf:"bytes,5,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,6,opt,name=avatar,proto3" json:"avatar,omitempty"` + Gender string `protobuf:"bytes,7,opt,name=gender,proto3" json:"gender,omitempty"` + Country string `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"` + InviteCode string `protobuf:"bytes,9,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` + Device string `protobuf:"bytes,10,opt,name=device,proto3" json:"device,omitempty"` + OsVersion string `protobuf:"bytes,11,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` + Birth string `protobuf:"bytes,12,opt,name=birth,proto3" json:"birth,omitempty"` + AppVersion string `protobuf:"bytes,13,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + BuildNumber string `protobuf:"bytes,14,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` + Source string `protobuf:"bytes,15,opt,name=source,proto3" json:"source,omitempty"` + InstallChannel string `protobuf:"bytes,16,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` + Campaign string `protobuf:"bytes,17,opt,name=campaign,proto3" json:"campaign,omitempty"` + Platform string `protobuf:"bytes,18,opt,name=platform,proto3" json:"platform,omitempty"` + Language string `protobuf:"bytes,19,opt,name=language,proto3" json:"language,omitempty"` + Timezone string `protobuf:"bytes,20,opt,name=timezone,proto3" json:"timezone,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegisterThirdPartyRequest) Reset() { @@ -481,13 +479,12 @@ func (x *RegisterThirdPartyRequest) GetTimezone() string { // CheckThirdPartyRegisteredRequest 只校验三方凭证并判断是否已有完整注册用户。 type CheckThirdPartyRegisteredRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` - Credential string `protobuf:"bytes,3,opt,name=credential,proto3" json:"credential,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckThirdPartyRegisteredRequest) Reset() { @@ -542,11 +539,10 @@ func (x *CheckThirdPartyRegisteredRequest) GetCredential() string { } type CheckThirdPartyRegisteredResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Registered bool `protobuf:"varint,1,opt,name=registered,proto3" json:"registered,omitempty"` unknownFields protoimpl.UnknownFields - - Registered bool `protobuf:"varint,1,opt,name=registered,proto3" json:"registered,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckThirdPartyRegisteredResponse) Reset() { @@ -588,14 +584,13 @@ func (x *CheckThirdPartyRegisteredResponse) GetRegistered() bool { // AuthResponse 返回标准认证令牌。 type AuthResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - IsNewUser bool `protobuf:"varint,2,opt,name=is_new_user,json=isNewUser,proto3" json:"is_new_user,omitempty"` - ProfileCompleted bool `protobuf:"varint,3,opt,name=profile_completed,json=profileCompleted,proto3" json:"profile_completed,omitempty"` - OnboardingStatus string `protobuf:"bytes,4,opt,name=onboarding_status,json=onboardingStatus,proto3" json:"onboarding_status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + IsNewUser bool `protobuf:"varint,2,opt,name=is_new_user,json=isNewUser,proto3" json:"is_new_user,omitempty"` + ProfileCompleted bool `protobuf:"varint,3,opt,name=profile_completed,json=profileCompleted,proto3" json:"profile_completed,omitempty"` + OnboardingStatus string `protobuf:"bytes,4,opt,name=onboarding_status,json=onboardingStatus,proto3" json:"onboarding_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AuthResponse) Reset() { @@ -658,13 +653,12 @@ func (x *AuthResponse) GetOnboardingStatus() string { // SetPasswordRequest 为已经三方登录的用户首次设置密码。 type SetPasswordRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetPasswordRequest) Reset() { @@ -720,11 +714,10 @@ func (x *SetPasswordRequest) GetPassword() string { // SetPasswordResponse 返回密码是否已经成功设置。 type SetPasswordResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PasswordSet bool `protobuf:"varint,1,opt,name=password_set,json=passwordSet,proto3" json:"password_set,omitempty"` unknownFields protoimpl.UnknownFields - - PasswordSet bool `protobuf:"varint,1,opt,name=password_set,json=passwordSet,proto3" json:"password_set,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetPasswordResponse) Reset() { @@ -766,29 +759,28 @@ func (x *SetPasswordResponse) GetPasswordSet() bool { // QuickCreateAccountRequest 为后台快速创建完整资料账号;source=game_robot 时账号不可登录。 type QuickCreateAccountRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` - Gender string `protobuf:"bytes,5,opt,name=gender,proto3" json:"gender,omitempty"` - Country string `protobuf:"bytes,6,opt,name=country,proto3" json:"country,omitempty"` - InviteCode string `protobuf:"bytes,7,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` - DeviceId string `protobuf:"bytes,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - Device string `protobuf:"bytes,9,opt,name=device,proto3" json:"device,omitempty"` - OsVersion string `protobuf:"bytes,10,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` - Birth string `protobuf:"bytes,11,opt,name=birth,proto3" json:"birth,omitempty"` - AppVersion string `protobuf:"bytes,12,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` - BuildNumber string `protobuf:"bytes,13,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` - Source string `protobuf:"bytes,14,opt,name=source,proto3" json:"source,omitempty"` - InstallChannel string `protobuf:"bytes,15,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` - Campaign string `protobuf:"bytes,16,opt,name=campaign,proto3" json:"campaign,omitempty"` - Platform string `protobuf:"bytes,17,opt,name=platform,proto3" json:"platform,omitempty"` - Language string `protobuf:"bytes,18,opt,name=language,proto3" json:"language,omitempty"` - Timezone string `protobuf:"bytes,19,opt,name=timezone,proto3" json:"timezone,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` + Gender string `protobuf:"bytes,5,opt,name=gender,proto3" json:"gender,omitempty"` + Country string `protobuf:"bytes,6,opt,name=country,proto3" json:"country,omitempty"` + InviteCode string `protobuf:"bytes,7,opt,name=invite_code,json=inviteCode,proto3" json:"invite_code,omitempty"` + DeviceId string `protobuf:"bytes,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Device string `protobuf:"bytes,9,opt,name=device,proto3" json:"device,omitempty"` + OsVersion string `protobuf:"bytes,10,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` + Birth string `protobuf:"bytes,11,opt,name=birth,proto3" json:"birth,omitempty"` + AppVersion string `protobuf:"bytes,12,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + BuildNumber string `protobuf:"bytes,13,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` + Source string `protobuf:"bytes,14,opt,name=source,proto3" json:"source,omitempty"` + InstallChannel string `protobuf:"bytes,15,opt,name=install_channel,json=installChannel,proto3" json:"install_channel,omitempty"` + Campaign string `protobuf:"bytes,16,opt,name=campaign,proto3" json:"campaign,omitempty"` + Platform string `protobuf:"bytes,17,opt,name=platform,proto3" json:"platform,omitempty"` + Language string `protobuf:"bytes,18,opt,name=language,proto3" json:"language,omitempty"` + Timezone string `protobuf:"bytes,19,opt,name=timezone,proto3" json:"timezone,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *QuickCreateAccountRequest) Reset() { @@ -956,12 +948,11 @@ func (x *QuickCreateAccountRequest) GetTimezone() string { // QuickCreateAccountResponse 返回新账号身份;普通账号含登录态,source=game_robot 时 token 只含 user_id/display_user_id。 type QuickCreateAccountResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + PasswordSet bool `protobuf:"varint,2,opt,name=password_set,json=passwordSet,proto3" json:"password_set,omitempty"` unknownFields protoimpl.UnknownFields - - Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - PasswordSet bool `protobuf:"varint,2,opt,name=password_set,json=passwordSet,proto3" json:"password_set,omitempty"` + sizeCache protoimpl.SizeCache } func (x *QuickCreateAccountResponse) Reset() { @@ -1010,12 +1001,11 @@ func (x *QuickCreateAccountResponse) GetPasswordSet() bool { // RefreshTokenRequest 使用 refresh token 换取新 token。 type RefreshTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + RefreshToken string `protobuf:"bytes,2,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - RefreshToken string `protobuf:"bytes,2,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RefreshTokenRequest) Reset() { @@ -1064,11 +1054,10 @@ func (x *RefreshTokenRequest) GetRefreshToken() string { // RefreshTokenResponse 返回轮换后的令牌。 type RefreshTokenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` unknownFields protoimpl.UnknownFields - - Token *AuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RefreshTokenResponse) Reset() { @@ -1110,13 +1099,12 @@ func (x *RefreshTokenResponse) GetToken() *AuthToken { // LogoutRequest 失效指定会话或 refresh token。 type LogoutRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + RefreshToken string `protobuf:"bytes,3,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - RefreshToken string `protobuf:"bytes,3,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LogoutRequest) Reset() { @@ -1172,11 +1160,10 @@ func (x *LogoutRequest) GetRefreshToken() string { // LogoutResponse 返回会话是否被失效。 type LogoutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Revoked bool `protobuf:"varint,1,opt,name=revoked,proto3" json:"revoked,omitempty"` unknownFields protoimpl.UnknownFields - - Revoked bool `protobuf:"varint,1,opt,name=revoked,proto3" json:"revoked,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LogoutResponse) Reset() { @@ -1218,16 +1205,15 @@ func (x *LogoutResponse) GetRevoked() bool { // RecordLoginBlockedRequest 记录 gateway 入口快拦拒绝的登录审计。 type RecordLoginBlockedRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Channel string `protobuf:"bytes,2,opt,name=channel,proto3" json:"channel,omitempty"` + Platform string `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"` + Language string `protobuf:"bytes,4,opt,name=language,proto3" json:"language,omitempty"` + Timezone string `protobuf:"bytes,5,opt,name=timezone,proto3" json:"timezone,omitempty"` + BlockReason string `protobuf:"bytes,6,opt,name=block_reason,json=blockReason,proto3" json:"block_reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Channel string `protobuf:"bytes,2,opt,name=channel,proto3" json:"channel,omitempty"` - Platform string `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"` - Language string `protobuf:"bytes,4,opt,name=language,proto3" json:"language,omitempty"` - Timezone string `protobuf:"bytes,5,opt,name=timezone,proto3" json:"timezone,omitempty"` - BlockReason string `protobuf:"bytes,6,opt,name=block_reason,json=blockReason,proto3" json:"block_reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RecordLoginBlockedRequest) Reset() { @@ -1304,11 +1290,10 @@ func (x *RecordLoginBlockedRequest) GetBlockReason() string { // RecordLoginBlockedResponse 返回审计写入是否成功。 type RecordLoginBlockedResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Recorded bool `protobuf:"varint,1,opt,name=recorded,proto3" json:"recorded,omitempty"` unknownFields protoimpl.UnknownFields - - Recorded bool `protobuf:"varint,1,opt,name=recorded,proto3" json:"recorded,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RecordLoginBlockedResponse) Reset() { @@ -1350,12 +1335,11 @@ func (x *RecordLoginBlockedResponse) GetRecorded() bool { // CheckLoginRiskIPWhitelistRequest 查询入口 IP 是否命中后台白名单。 type CheckLoginRiskIPWhitelistRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ClientIp string `protobuf:"bytes,2,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ClientIp string `protobuf:"bytes,2,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckLoginRiskIPWhitelistRequest) Reset() { @@ -1404,11 +1388,10 @@ func (x *CheckLoginRiskIPWhitelistRequest) GetClientIp() string { // CheckLoginRiskIPWhitelistResponse 返回入口 IP 是否跳过登录地区屏蔽。 type CheckLoginRiskIPWhitelistResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Whitelisted bool `protobuf:"varint,1,opt,name=whitelisted,proto3" json:"whitelisted,omitempty"` unknownFields protoimpl.UnknownFields - - Whitelisted bool `protobuf:"varint,1,opt,name=whitelisted,proto3" json:"whitelisted,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckLoginRiskIPWhitelistResponse) Reset() { @@ -1450,11 +1433,10 @@ func (x *CheckLoginRiskIPWhitelistResponse) GetWhitelisted() bool { // RefreshLoginRiskWhitelistCacheRequest 要求 user-service 从 MySQL 重建登录风控白名单缓存。 type RefreshLoginRiskWhitelistCacheRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RefreshLoginRiskWhitelistCacheRequest) Reset() { @@ -1496,14 +1478,13 @@ func (x *RefreshLoginRiskWhitelistCacheRequest) GetMeta() *RequestMeta { // RefreshLoginRiskWhitelistCacheResponse 返回本次刷新后的白名单规模,便于后台保存后确认缓存已更新。 type RefreshLoginRiskWhitelistCacheResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Refreshed bool `protobuf:"varint,1,opt,name=refreshed,proto3" json:"refreshed,omitempty"` - IpWhitelistCount int32 `protobuf:"varint,2,opt,name=ip_whitelist_count,json=ipWhitelistCount,proto3" json:"ip_whitelist_count,omitempty"` - UserWhitelistCount int32 `protobuf:"varint,3,opt,name=user_whitelist_count,json=userWhitelistCount,proto3" json:"user_whitelist_count,omitempty"` - UserCacheExpiresAtMs int64 `protobuf:"varint,4,opt,name=user_cache_expires_at_ms,json=userCacheExpiresAtMs,proto3" json:"user_cache_expires_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Refreshed bool `protobuf:"varint,1,opt,name=refreshed,proto3" json:"refreshed,omitempty"` + IpWhitelistCount int32 `protobuf:"varint,2,opt,name=ip_whitelist_count,json=ipWhitelistCount,proto3" json:"ip_whitelist_count,omitempty"` + UserWhitelistCount int32 `protobuf:"varint,3,opt,name=user_whitelist_count,json=userWhitelistCount,proto3" json:"user_whitelist_count,omitempty"` + UserCacheExpiresAtMs int64 `protobuf:"varint,4,opt,name=user_cache_expires_at_ms,json=userCacheExpiresAtMs,proto3" json:"user_cache_expires_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RefreshLoginRiskWhitelistCacheResponse) Reset() { @@ -1566,14 +1547,13 @@ func (x *RefreshLoginRiskWhitelistCacheResponse) GetUserCacheExpiresAtMs() int64 // RegisterRiskConfig 是注册链路读取的风控配置。 type RegisterRiskConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - MaxAccountsPerDevice int32 `protobuf:"varint,2,opt,name=max_accounts_per_device,json=maxAccountsPerDevice,proto3" json:"max_accounts_per_device,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,4,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + MaxAccountsPerDevice int32 `protobuf:"varint,2,opt,name=max_accounts_per_device,json=maxAccountsPerDevice,proto3" json:"max_accounts_per_device,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,4,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegisterRiskConfig) Reset() { @@ -1636,11 +1616,10 @@ func (x *RegisterRiskConfig) GetUpdatedByAdminId() int64 { // GetRegisterRiskConfigRequest 查询当前 App 的注册风控配置。 type GetRegisterRiskConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegisterRiskConfigRequest) Reset() { @@ -1681,11 +1660,10 @@ func (x *GetRegisterRiskConfigRequest) GetMeta() *RequestMeta { } type GetRegisterRiskConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RegisterRiskConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RegisterRiskConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRegisterRiskConfigResponse) Reset() { @@ -1727,13 +1705,12 @@ func (x *GetRegisterRiskConfigResponse) GetConfig() *RegisterRiskConfig { // UpdateRegisterRiskConfigRequest 由后台保存当前 App 的注册风控配置。 type UpdateRegisterRiskConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - MaxAccountsPerDevice int32 `protobuf:"varint,2,opt,name=max_accounts_per_device,json=maxAccountsPerDevice,proto3" json:"max_accounts_per_device,omitempty"` - OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + MaxAccountsPerDevice int32 `protobuf:"varint,2,opt,name=max_accounts_per_device,json=maxAccountsPerDevice,proto3" json:"max_accounts_per_device,omitempty"` + OperatorAdminId int64 `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRegisterRiskConfigRequest) Reset() { @@ -1788,11 +1765,10 @@ func (x *UpdateRegisterRiskConfigRequest) GetOperatorAdminId() int64 { } type UpdateRegisterRiskConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RegisterRiskConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RegisterRiskConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRegisterRiskConfigResponse) Reset() { @@ -1834,13 +1810,12 @@ func (x *UpdateRegisterRiskConfigResponse) GetConfig() *RegisterRiskConfig { // AppHeartbeatRequest 刷新当前登录会话的 App 在线心跳。 type AppHeartbeatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SessionId string `protobuf:"bytes,3,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SessionId string `protobuf:"bytes,3,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppHeartbeatRequest) Reset() { @@ -1896,14 +1871,13 @@ func (x *AppHeartbeatRequest) GetSessionId() string { // AppHeartbeatResponse 返回本次会话心跳写入时间,并在当前会话仍有效时顺手重签 access token。 type AppHeartbeatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` + HeartbeatAtMs int64 `protobuf:"varint,2,opt,name=heartbeat_at_ms,json=heartbeatAtMs,proto3" json:"heartbeat_at_ms,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + Token *AuthToken `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` unknownFields protoimpl.UnknownFields - - Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` - HeartbeatAtMs int64 `protobuf:"varint,2,opt,name=heartbeat_at_ms,json=heartbeatAtMs,proto3" json:"heartbeat_at_ms,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - Token *AuthToken `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppHeartbeatResponse) Reset() { @@ -1966,414 +1940,197 @@ func (x *AppHeartbeatResponse) GetToken() *AuthToken { var File_proto_user_v1_auth_proto protoreflect.FileDescriptor -var file_proto_user_v1_auth_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x22, 0xea, 0x04, 0x0a, 0x16, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x69, 0x72, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x62, 0x69, 0x72, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x73, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x22, 0xed, 0x04, - 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x69, 0x72, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x62, 0x69, 0x72, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, - 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x8e, 0x01, - 0x0a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x43, - 0x0a, 0x21, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4e, 0x65, 0x77, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x79, - 0x0a, 0x12, 0x53, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x13, 0x53, 0x65, 0x74, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x53, 0x65, 0x74, 0x22, 0xcd, 0x04, 0x0a, 0x19, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x73, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, - 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x69, 0x72, 0x74, - 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x69, 0x72, 0x74, 0x68, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, - 0x6f, 0x6e, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, - 0x6f, 0x6e, 0x65, 0x22, 0x6f, 0x0a, 0x1a, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x53, 0x65, 0x74, 0x22, 0x6a, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x46, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, - 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x2a, - 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x19, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x69, - 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, - 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x1a, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x65, 0x64, 0x22, 0x6f, 0x0a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x49, 0x50, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x70, 0x22, 0x45, 0x0a, 0x21, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x49, 0x50, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x77, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x22, 0x57, 0x0a, 0x25, 0x52, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x22, 0xde, 0x01, 0x0a, 0x26, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, - 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, 0x12, 0x2c, 0x0a, - 0x12, 0x69, 0x70, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x69, 0x70, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, - 0x18, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x14, 0x75, 0x73, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, - 0x64, 0x22, 0x4e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x22, 0x5a, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb4, 0x01, - 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x50, - 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x7d, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0xb0, 0x01, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0xba, 0x0b, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x12, 0x25, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x61, 0x72, 0x74, 0x79, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, 0x0a, 0x19, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0b, - 0x53, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, - 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, - 0x12, 0x1c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x12, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x65, 0x64, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, 0x0a, 0x19, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x49, 0x50, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x69, 0x73, 0x6b, 0x49, 0x50, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x49, 0x50, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x34, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x69, - 0x73, 0x6b, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, - 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x18, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, - 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x41, 0x70, 0x70, - 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x48, 0x65, 0x61, - 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x26, 0x5a, 0x24, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_proto_user_v1_auth_proto_rawDesc = "" + + "\n" + + "\x18proto/user/v1/auth.proto\x12\rhyapp.user.v1\x1a\x18proto/user/v1/user.proto\"\x8a\x01\n" + + "\x14LoginPasswordRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12&\n" + + "\x0fdisplay_user_id\x18\x02 \x01(\tR\rdisplayUserId\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\"\xea\x04\n" + + "\x16LoginThirdPartyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\x12\x1e\n" + + "\n" + + "credential\x18\x03 \x01(\tR\n" + + "credential\x12\x1a\n" + + "\busername\x18\x04 \x01(\tR\busername\x12\x16\n" + + "\x06gender\x18\x05 \x01(\tR\x06gender\x12\x18\n" + + "\acountry\x18\x06 \x01(\tR\acountry\x12\x1f\n" + + "\vinvite_code\x18\a \x01(\tR\n" + + "inviteCode\x12\x1b\n" + + "\tdevice_id\x18\b \x01(\tR\bdeviceId\x12\x16\n" + + "\x06device\x18\t \x01(\tR\x06device\x12\x16\n" + + "\x06avatar\x18\n" + + " \x01(\tR\x06avatar\x12\x14\n" + + "\x05birth\x18\v \x01(\tR\x05birth\x12\x1f\n" + + "\vapp_version\x18\f \x01(\tR\n" + + "appVersion\x12\x16\n" + + "\x06source\x18\r \x01(\tR\x06source\x12\x1a\n" + + "\bplatform\x18\x0e \x01(\tR\bplatform\x12\x1a\n" + + "\blanguage\x18\x0f \x01(\tR\blanguage\x12\x1d\n" + + "\n" + + "os_version\x18\x10 \x01(\tR\tosVersion\x12!\n" + + "\fbuild_number\x18\x11 \x01(\tR\vbuildNumber\x12\x1a\n" + + "\btimezone\x18\x12 \x01(\tR\btimezone\x12'\n" + + "\x0finstall_channel\x18\x13 \x01(\tR\x0einstallChannel\x12\x1a\n" + + "\bcampaign\x18\x14 \x01(\tR\bcampaign\"\xed\x04\n" + + "\x19RegisterThirdPartyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\x12\x1e\n" + + "\n" + + "credential\x18\x03 \x01(\tR\n" + + "credential\x12\x1b\n" + + "\tdevice_id\x18\x04 \x01(\tR\bdeviceId\x12\x1a\n" + + "\busername\x18\x05 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x06 \x01(\tR\x06avatar\x12\x16\n" + + "\x06gender\x18\a \x01(\tR\x06gender\x12\x18\n" + + "\acountry\x18\b \x01(\tR\acountry\x12\x1f\n" + + "\vinvite_code\x18\t \x01(\tR\n" + + "inviteCode\x12\x16\n" + + "\x06device\x18\n" + + " \x01(\tR\x06device\x12\x1d\n" + + "\n" + + "os_version\x18\v \x01(\tR\tosVersion\x12\x14\n" + + "\x05birth\x18\f \x01(\tR\x05birth\x12\x1f\n" + + "\vapp_version\x18\r \x01(\tR\n" + + "appVersion\x12!\n" + + "\fbuild_number\x18\x0e \x01(\tR\vbuildNumber\x12\x16\n" + + "\x06source\x18\x0f \x01(\tR\x06source\x12'\n" + + "\x0finstall_channel\x18\x10 \x01(\tR\x0einstallChannel\x12\x1a\n" + + "\bcampaign\x18\x11 \x01(\tR\bcampaign\x12\x1a\n" + + "\bplatform\x18\x12 \x01(\tR\bplatform\x12\x1a\n" + + "\blanguage\x18\x13 \x01(\tR\blanguage\x12\x1a\n" + + "\btimezone\x18\x14 \x01(\tR\btimezone\"\x8e\x01\n" + + " CheckThirdPartyRegisteredRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\x12\x1e\n" + + "\n" + + "credential\x18\x03 \x01(\tR\n" + + "credential\"C\n" + + "!CheckThirdPartyRegisteredResponse\x12\x1e\n" + + "\n" + + "registered\x18\x01 \x01(\bR\n" + + "registered\"\xb8\x01\n" + + "\fAuthResponse\x12.\n" + + "\x05token\x18\x01 \x01(\v2\x18.hyapp.user.v1.AuthTokenR\x05token\x12\x1e\n" + + "\vis_new_user\x18\x02 \x01(\bR\tisNewUser\x12+\n" + + "\x11profile_completed\x18\x03 \x01(\bR\x10profileCompleted\x12+\n" + + "\x11onboarding_status\x18\x04 \x01(\tR\x10onboardingStatus\"y\n" + + "\x12SetPasswordRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\"8\n" + + "\x13SetPasswordResponse\x12!\n" + + "\fpassword_set\x18\x01 \x01(\bR\vpasswordSet\"\xcd\x04\n" + + "\x19QuickCreateAccountRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1a\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x04 \x01(\tR\x06avatar\x12\x16\n" + + "\x06gender\x18\x05 \x01(\tR\x06gender\x12\x18\n" + + "\acountry\x18\x06 \x01(\tR\acountry\x12\x1f\n" + + "\vinvite_code\x18\a \x01(\tR\n" + + "inviteCode\x12\x1b\n" + + "\tdevice_id\x18\b \x01(\tR\bdeviceId\x12\x16\n" + + "\x06device\x18\t \x01(\tR\x06device\x12\x1d\n" + + "\n" + + "os_version\x18\n" + + " \x01(\tR\tosVersion\x12\x14\n" + + "\x05birth\x18\v \x01(\tR\x05birth\x12\x1f\n" + + "\vapp_version\x18\f \x01(\tR\n" + + "appVersion\x12!\n" + + "\fbuild_number\x18\r \x01(\tR\vbuildNumber\x12\x16\n" + + "\x06source\x18\x0e \x01(\tR\x06source\x12'\n" + + "\x0finstall_channel\x18\x0f \x01(\tR\x0einstallChannel\x12\x1a\n" + + "\bcampaign\x18\x10 \x01(\tR\bcampaign\x12\x1a\n" + + "\bplatform\x18\x11 \x01(\tR\bplatform\x12\x1a\n" + + "\blanguage\x18\x12 \x01(\tR\blanguage\x12\x1a\n" + + "\btimezone\x18\x13 \x01(\tR\btimezone\"o\n" + + "\x1aQuickCreateAccountResponse\x12.\n" + + "\x05token\x18\x01 \x01(\v2\x18.hyapp.user.v1.AuthTokenR\x05token\x12!\n" + + "\fpassword_set\x18\x02 \x01(\bR\vpasswordSet\"j\n" + + "\x13RefreshTokenRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12#\n" + + "\rrefresh_token\x18\x02 \x01(\tR\frefreshToken\"F\n" + + "\x14RefreshTokenResponse\x12.\n" + + "\x05token\x18\x01 \x01(\v2\x18.hyapp.user.v1.AuthTokenR\x05token\"\x83\x01\n" + + "\rLogoutRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "session_id\x18\x02 \x01(\tR\tsessionId\x12#\n" + + "\rrefresh_token\x18\x03 \x01(\tR\frefreshToken\"*\n" + + "\x0eLogoutResponse\x12\x18\n" + + "\arevoked\x18\x01 \x01(\bR\arevoked\"\xdc\x01\n" + + "\x19RecordLoginBlockedRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x18\n" + + "\achannel\x18\x02 \x01(\tR\achannel\x12\x1a\n" + + "\bplatform\x18\x03 \x01(\tR\bplatform\x12\x1a\n" + + "\blanguage\x18\x04 \x01(\tR\blanguage\x12\x1a\n" + + "\btimezone\x18\x05 \x01(\tR\btimezone\x12!\n" + + "\fblock_reason\x18\x06 \x01(\tR\vblockReason\"8\n" + + "\x1aRecordLoginBlockedResponse\x12\x1a\n" + + "\brecorded\x18\x01 \x01(\bR\brecorded\"o\n" + + " CheckLoginRiskIPWhitelistRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tclient_ip\x18\x02 \x01(\tR\bclientIp\"E\n" + + "!CheckLoginRiskIPWhitelistResponse\x12 \n" + + "\vwhitelisted\x18\x01 \x01(\bR\vwhitelisted\"W\n" + + "%RefreshLoginRiskWhitelistCacheRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\"\xde\x01\n" + + "&RefreshLoginRiskWhitelistCacheResponse\x12\x1c\n" + + "\trefreshed\x18\x01 \x01(\bR\trefreshed\x12,\n" + + "\x12ip_whitelist_count\x18\x02 \x01(\x05R\x10ipWhitelistCount\x120\n" + + "\x14user_whitelist_count\x18\x03 \x01(\x05R\x12userWhitelistCount\x126\n" + + "\x18user_cache_expires_at_ms\x18\x04 \x01(\x03R\x14userCacheExpiresAtMs\"\xb9\x01\n" + + "\x12RegisterRiskConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x125\n" + + "\x17max_accounts_per_device\x18\x02 \x01(\x05R\x14maxAccountsPerDevice\x12\"\n" + + "\rupdated_at_ms\x18\x03 \x01(\x03R\vupdatedAtMs\x12-\n" + + "\x13updated_by_admin_id\x18\x04 \x01(\x03R\x10updatedByAdminId\"N\n" + + "\x1cGetRegisterRiskConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\"Z\n" + + "\x1dGetRegisterRiskConfigResponse\x129\n" + + "\x06config\x18\x01 \x01(\v2!.hyapp.user.v1.RegisterRiskConfigR\x06config\"\xb4\x01\n" + + "\x1fUpdateRegisterRiskConfigRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x125\n" + + "\x17max_accounts_per_device\x18\x02 \x01(\x05R\x14maxAccountsPerDevice\x12*\n" + + "\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"]\n" + + " UpdateRegisterRiskConfigResponse\x129\n" + + "\x06config\x18\x01 \x01(\v2!.hyapp.user.v1.RegisterRiskConfigR\x06config\"}\n" + + "\x13AppHeartbeatRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "session_id\x18\x03 \x01(\tR\tsessionId\"\xb0\x01\n" + + "\x14AppHeartbeatResponse\x12\x1a\n" + + "\baccepted\x18\x01 \x01(\bR\baccepted\x12&\n" + + "\x0fheartbeat_at_ms\x18\x02 \x01(\x03R\rheartbeatAtMs\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\x12.\n" + + "\x05token\x18\x04 \x01(\v2\x18.hyapp.user.v1.AuthTokenR\x05token2\xba\v\n" + + "\vAuthService\x12Q\n" + + "\rLoginPassword\x12#.hyapp.user.v1.LoginPasswordRequest\x1a\x1b.hyapp.user.v1.AuthResponse\x12U\n" + + "\x0fLoginThirdParty\x12%.hyapp.user.v1.LoginThirdPartyRequest\x1a\x1b.hyapp.user.v1.AuthResponse\x12[\n" + + "\x12RegisterThirdParty\x12(.hyapp.user.v1.RegisterThirdPartyRequest\x1a\x1b.hyapp.user.v1.AuthResponse\x12~\n" + + "\x19CheckThirdPartyRegistered\x12/.hyapp.user.v1.CheckThirdPartyRegisteredRequest\x1a0.hyapp.user.v1.CheckThirdPartyRegisteredResponse\x12T\n" + + "\vSetPassword\x12!.hyapp.user.v1.SetPasswordRequest\x1a\".hyapp.user.v1.SetPasswordResponse\x12i\n" + + "\x12QuickCreateAccount\x12(.hyapp.user.v1.QuickCreateAccountRequest\x1a).hyapp.user.v1.QuickCreateAccountResponse\x12W\n" + + "\fRefreshToken\x12\".hyapp.user.v1.RefreshTokenRequest\x1a#.hyapp.user.v1.RefreshTokenResponse\x12E\n" + + "\x06Logout\x12\x1c.hyapp.user.v1.LogoutRequest\x1a\x1d.hyapp.user.v1.LogoutResponse\x12i\n" + + "\x12RecordLoginBlocked\x12(.hyapp.user.v1.RecordLoginBlockedRequest\x1a).hyapp.user.v1.RecordLoginBlockedResponse\x12~\n" + + "\x19CheckLoginRiskIPWhitelist\x12/.hyapp.user.v1.CheckLoginRiskIPWhitelistRequest\x1a0.hyapp.user.v1.CheckLoginRiskIPWhitelistResponse\x12\x8d\x01\n" + + "\x1eRefreshLoginRiskWhitelistCache\x124.hyapp.user.v1.RefreshLoginRiskWhitelistCacheRequest\x1a5.hyapp.user.v1.RefreshLoginRiskWhitelistCacheResponse\x12r\n" + + "\x15GetRegisterRiskConfig\x12+.hyapp.user.v1.GetRegisterRiskConfigRequest\x1a,.hyapp.user.v1.GetRegisterRiskConfigResponse\x12{\n" + + "\x18UpdateRegisterRiskConfig\x12..hyapp.user.v1.UpdateRegisterRiskConfigRequest\x1a/.hyapp.user.v1.UpdateRegisterRiskConfigResponse\x12W\n" + + "\fAppHeartbeat\x12\".hyapp.user.v1.AppHeartbeatRequest\x1a#.hyapp.user.v1.AppHeartbeatResponseB&Z$hyapp.local/api/proto/user/v1;userv1b\x06proto3" var ( file_proto_user_v1_auth_proto_rawDescOnce sync.Once - file_proto_user_v1_auth_proto_rawDescData = file_proto_user_v1_auth_proto_rawDesc + file_proto_user_v1_auth_proto_rawDescData []byte ) func file_proto_user_v1_auth_proto_rawDescGZIP() []byte { file_proto_user_v1_auth_proto_rawDescOnce.Do(func() { - file_proto_user_v1_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_user_v1_auth_proto_rawDescData) + file_proto_user_v1_auth_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_user_v1_auth_proto_rawDesc), len(file_proto_user_v1_auth_proto_rawDesc))) }) return file_proto_user_v1_auth_proto_rawDescData } @@ -2476,7 +2233,7 @@ func file_proto_user_v1_auth_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_user_v1_auth_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_user_v1_auth_proto_rawDesc), len(file_proto_user_v1_auth_proto_rawDesc)), NumEnums: 0, NumMessages: 27, NumExtensions: 0, @@ -2487,7 +2244,6 @@ func file_proto_user_v1_auth_proto_init() { MessageInfos: file_proto_user_v1_auth_proto_msgTypes, }.Build() File_proto_user_v1_auth_proto = out.File - file_proto_user_v1_auth_proto_rawDesc = nil file_proto_user_v1_auth_proto_goTypes = nil file_proto_user_v1_auth_proto_depIdxs = nil } diff --git a/api/proto/user/v1/auth_grpc.pb.go b/api/proto/user/v1/auth_grpc.pb.go index 6f7e7e85..97e929a5 100644 --- a/api/proto/user/v1/auth_grpc.pb.go +++ b/api/proto/user/v1/auth_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/user/v1/auth.proto package userv1 @@ -236,46 +236,46 @@ type AuthServiceServer interface { type UnimplementedAuthServiceServer struct{} func (UnimplementedAuthServiceServer) LoginPassword(context.Context, *LoginPasswordRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LoginPassword not implemented") + return nil, status.Error(codes.Unimplemented, "method LoginPassword not implemented") } func (UnimplementedAuthServiceServer) LoginThirdParty(context.Context, *LoginThirdPartyRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LoginThirdParty not implemented") + return nil, status.Error(codes.Unimplemented, "method LoginThirdParty not implemented") } func (UnimplementedAuthServiceServer) RegisterThirdParty(context.Context, *RegisterThirdPartyRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RegisterThirdParty not implemented") + return nil, status.Error(codes.Unimplemented, "method RegisterThirdParty not implemented") } func (UnimplementedAuthServiceServer) CheckThirdPartyRegistered(context.Context, *CheckThirdPartyRegisteredRequest) (*CheckThirdPartyRegisteredResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckThirdPartyRegistered not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckThirdPartyRegistered not implemented") } func (UnimplementedAuthServiceServer) SetPassword(context.Context, *SetPasswordRequest) (*SetPasswordResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetPassword not implemented") + return nil, status.Error(codes.Unimplemented, "method SetPassword not implemented") } func (UnimplementedAuthServiceServer) QuickCreateAccount(context.Context, *QuickCreateAccountRequest) (*QuickCreateAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method QuickCreateAccount not implemented") + return nil, status.Error(codes.Unimplemented, "method QuickCreateAccount not implemented") } func (UnimplementedAuthServiceServer) RefreshToken(context.Context, *RefreshTokenRequest) (*RefreshTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RefreshToken not implemented") + return nil, status.Error(codes.Unimplemented, "method RefreshToken not implemented") } func (UnimplementedAuthServiceServer) Logout(context.Context, *LogoutRequest) (*LogoutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") + return nil, status.Error(codes.Unimplemented, "method Logout not implemented") } func (UnimplementedAuthServiceServer) RecordLoginBlocked(context.Context, *RecordLoginBlockedRequest) (*RecordLoginBlockedResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecordLoginBlocked not implemented") + return nil, status.Error(codes.Unimplemented, "method RecordLoginBlocked not implemented") } func (UnimplementedAuthServiceServer) CheckLoginRiskIPWhitelist(context.Context, *CheckLoginRiskIPWhitelistRequest) (*CheckLoginRiskIPWhitelistResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckLoginRiskIPWhitelist not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckLoginRiskIPWhitelist not implemented") } func (UnimplementedAuthServiceServer) RefreshLoginRiskWhitelistCache(context.Context, *RefreshLoginRiskWhitelistCacheRequest) (*RefreshLoginRiskWhitelistCacheResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RefreshLoginRiskWhitelistCache not implemented") + return nil, status.Error(codes.Unimplemented, "method RefreshLoginRiskWhitelistCache not implemented") } func (UnimplementedAuthServiceServer) GetRegisterRiskConfig(context.Context, *GetRegisterRiskConfigRequest) (*GetRegisterRiskConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRegisterRiskConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRegisterRiskConfig not implemented") } func (UnimplementedAuthServiceServer) UpdateRegisterRiskConfig(context.Context, *UpdateRegisterRiskConfigRequest) (*UpdateRegisterRiskConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRegisterRiskConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRegisterRiskConfig not implemented") } func (UnimplementedAuthServiceServer) AppHeartbeat(context.Context, *AppHeartbeatRequest) (*AppHeartbeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AppHeartbeat not implemented") + return nil, status.Error(codes.Unimplemented, "method AppHeartbeat not implemented") } func (UnimplementedAuthServiceServer) mustEmbedUnimplementedAuthServiceServer() {} func (UnimplementedAuthServiceServer) testEmbeddedByValue() {} @@ -288,7 +288,7 @@ type UnsafeAuthServiceServer interface { } func RegisterAuthServiceServer(s grpc.ServiceRegistrar, srv AuthServiceServer) { - // If the following call pancis, it indicates UnimplementedAuthServiceServer was + // If the following call panics, it indicates UnimplementedAuthServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/user/v1/host.pb.go b/api/proto/user/v1/host.pb.go index ab9a80b1..0d0855a5 100644 --- a/api/proto/user/v1/host.pb.go +++ b/api/proto/user/v1/host.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/user/v1/host.proto package userv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,21 +23,20 @@ const ( // HostProfile 是用户长期主播身份,不等同于 room-service 的房间 host_user_id。 type HostProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - CurrentAgencyId int64 `protobuf:"varint,4,opt,name=current_agency_id,json=currentAgencyId,proto3" json:"current_agency_id,omitempty"` - CurrentMembershipId int64 `protobuf:"varint,5,opt,name=current_membership_id,json=currentMembershipId,proto3" json:"current_membership_id,omitempty"` - Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` - FirstBecameHostAtMs int64 `protobuf:"varint,7,opt,name=first_became_host_at_ms,json=firstBecameHostAtMs,proto3" json:"first_became_host_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + CurrentAgencyId int64 `protobuf:"varint,4,opt,name=current_agency_id,json=currentAgencyId,proto3" json:"current_agency_id,omitempty"` + CurrentMembershipId int64 `protobuf:"varint,5,opt,name=current_membership_id,json=currentMembershipId,proto3" json:"current_membership_id,omitempty"` + Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` + FirstBecameHostAtMs int64 `protobuf:"varint,7,opt,name=first_became_host_at_ms,json=firstBecameHostAtMs,proto3" json:"first_became_host_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` // current_agency_owner_user_id 是当前 Agency 的收款用户快照,wallet-service 入账时固化该值,避免月底按新归属错发代理工资。 CurrentAgencyOwnerUserId int64 `protobuf:"varint,10,opt,name=current_agency_owner_user_id,json=currentAgencyOwnerUserId,proto3" json:"current_agency_owner_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostProfile) Reset() { @@ -141,17 +141,14 @@ func (x *HostProfile) GetCurrentAgencyOwnerUserId() int64 { // Agency 是主播组织,owner 自动拥有 host 身份和 owner membership。 type Agency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - ParentBdUserId int64 `protobuf:"varint,4,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - JoinEnabled bool `protobuf:"varint,7,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + ParentBdUserId int64 `protobuf:"varint,4,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + JoinEnabled bool `protobuf:"varint,7,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` // Deprecated: Agency 不再限制主播数量,该字段仅为历史兼容保留。 MaxHosts int32 `protobuf:"varint,8,opt,name=max_hosts,json=maxHosts,proto3" json:"max_hosts,omitempty"` CreatedByUserId int64 `protobuf:"varint,9,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` @@ -159,6 +156,8 @@ type Agency struct { UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` Avatar string `protobuf:"bytes,12,opt,name=avatar,proto3" json:"avatar,omitempty"` HostCount int32 `protobuf:"varint,13,opt,name=host_count,json=hostCount,proto3" json:"host_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Agency) Reset() { @@ -284,18 +283,17 @@ func (x *Agency) GetHostCount() int32 { // BDProfile 表达 BD 或 BD Leader 拓展角色。BD 默认不是 host。 type BDProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - ParentLeaderUserId int64 `protobuf:"varint,4,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - CreatedByUserId int64 `protobuf:"varint,6,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + ParentLeaderUserId int64 `protobuf:"varint,4,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + CreatedByUserId int64 `protobuf:"varint,6,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,7,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,8,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BDProfile) Reset() { @@ -386,17 +384,16 @@ func (x *BDProfile) GetUpdatedAtMs() int64 { // CoinSellerProfile 表达币商身份;余额在 wallet-service,不在 user-service。 type CoinSellerProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - MerchantAssetType string `protobuf:"bytes,3,opt,name=merchant_asset_type,json=merchantAssetType,proto3" json:"merchant_asset_type,omitempty"` - CreatedByUserId int64 `protobuf:"varint,4,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - CanManageSubCoinSellers bool `protobuf:"varint,7,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3" json:"can_manage_sub_coin_sellers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + MerchantAssetType string `protobuf:"bytes,3,opt,name=merchant_asset_type,json=merchantAssetType,proto3" json:"merchant_asset_type,omitempty"` + CreatedByUserId int64 `protobuf:"varint,4,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + CanManageSubCoinSellers bool `protobuf:"varint,7,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3" json:"can_manage_sub_coin_sellers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoinSellerProfile) Reset() { @@ -480,26 +477,25 @@ func (x *CoinSellerProfile) GetCanManageSubCoinSellers() bool { // CoinSellerListItem 是 App 充值页展示的同区域启用币商投影。 type CoinSellerListItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` - CountryId int64 `protobuf:"varint,5,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` - CountryCode string `protobuf:"bytes,6,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - CountryName string `protobuf:"bytes,7,opt,name=country_name,json=countryName,proto3" json:"country_name,omitempty"` - CountryDisplayName string `protobuf:"bytes,8,opt,name=country_display_name,json=countryDisplayName,proto3" json:"country_display_name,omitempty"` - RegionId int64 `protobuf:"varint,9,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RegionCode string `protobuf:"bytes,10,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"` - RegionName string `protobuf:"bytes,11,opt,name=region_name,json=regionName,proto3" json:"region_name,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - MerchantAssetType string `protobuf:"bytes,13,opt,name=merchant_asset_type,json=merchantAssetType,proto3" json:"merchant_asset_type,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ContactInfo string `protobuf:"bytes,15,opt,name=contact_info,json=contactInfo,proto3" json:"contact_info,omitempty"` - CanManageSubCoinSellers bool `protobuf:"varint,16,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3" json:"can_manage_sub_coin_sellers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` + CountryId int64 `protobuf:"varint,5,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryCode string `protobuf:"bytes,6,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + CountryName string `protobuf:"bytes,7,opt,name=country_name,json=countryName,proto3" json:"country_name,omitempty"` + CountryDisplayName string `protobuf:"bytes,8,opt,name=country_display_name,json=countryDisplayName,proto3" json:"country_display_name,omitempty"` + RegionId int64 `protobuf:"varint,9,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + RegionCode string `protobuf:"bytes,10,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"` + RegionName string `protobuf:"bytes,11,opt,name=region_name,json=regionName,proto3" json:"region_name,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + MerchantAssetType string `protobuf:"bytes,13,opt,name=merchant_asset_type,json=merchantAssetType,proto3" json:"merchant_asset_type,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ContactInfo string `protobuf:"bytes,15,opt,name=contact_info,json=contactInfo,proto3" json:"contact_info,omitempty"` + CanManageSubCoinSellers bool `protobuf:"varint,16,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3" json:"can_manage_sub_coin_sellers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoinSellerListItem) Reset() { @@ -646,17 +642,16 @@ func (x *CoinSellerListItem) GetCanManageSubCoinSellers() bool { // CoinSellerSubRelation 是币商中心的直属子币商关系事实。 type CoinSellerSubRelation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RelationId int64 `protobuf:"varint,1,opt,name=relation_id,json=relationId,proto3" json:"relation_id,omitempty"` - ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - CreatedByUserId int64 `protobuf:"varint,5,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RelationId int64 `protobuf:"varint,1,opt,name=relation_id,json=relationId,proto3" json:"relation_id,omitempty"` + ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + CreatedByUserId int64 `protobuf:"varint,5,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,6,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoinSellerSubRelation) Reset() { @@ -740,21 +735,20 @@ func (x *CoinSellerSubRelation) GetUpdatedAtMs() int64 { // CoinSellerSubApplication 是父币商邀请子币商后的后台审核事实。 type CoinSellerSubApplication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ApplicationId int64 `protobuf:"varint,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - RelationId int64 `protobuf:"varint,6,opt,name=relation_id,json=relationId,proto3" json:"relation_id,omitempty"` - ReviewedByAdminId int64 `protobuf:"varint,7,opt,name=reviewed_by_admin_id,json=reviewedByAdminId,proto3" json:"reviewed_by_admin_id,omitempty"` - ReviewReason string `protobuf:"bytes,8,opt,name=review_reason,json=reviewReason,proto3" json:"review_reason,omitempty"` - ReviewedAtMs int64 `protobuf:"varint,9,opt,name=reviewed_at_ms,json=reviewedAtMs,proto3" json:"reviewed_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ApplicationId int64 `protobuf:"varint,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + RelationId int64 `protobuf:"varint,6,opt,name=relation_id,json=relationId,proto3" json:"relation_id,omitempty"` + ReviewedByAdminId int64 `protobuf:"varint,7,opt,name=reviewed_by_admin_id,json=reviewedByAdminId,proto3" json:"reviewed_by_admin_id,omitempty"` + ReviewReason string `protobuf:"bytes,8,opt,name=review_reason,json=reviewReason,proto3" json:"review_reason,omitempty"` + ReviewedAtMs int64 `protobuf:"varint,9,opt,name=reviewed_at_ms,json=reviewedAtMs,proto3" json:"reviewed_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoinSellerSubApplication) Reset() { @@ -867,25 +861,24 @@ func (x *CoinSellerSubApplication) GetUpdatedAtMs() int64 { // UserRoleSummary 是 App 我的页和入口显隐使用的轻量角色摘要。 // 它把 host、Agency、manager、BD 和币商身份收敛到一次 user-service RPC,避免 gateway 随角色扩张继续 fanout。 type UserRoleSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - IsHost bool `protobuf:"varint,2,opt,name=is_host,json=isHost,proto3" json:"is_host,omitempty"` - IsAgency bool `protobuf:"varint,3,opt,name=is_agency,json=isAgency,proto3" json:"is_agency,omitempty"` - IsBd bool `protobuf:"varint,4,opt,name=is_bd,json=isBd,proto3" json:"is_bd,omitempty"` - IsBdLeader bool `protobuf:"varint,5,opt,name=is_bd_leader,json=isBdLeader,proto3" json:"is_bd_leader,omitempty"` - IsCoinSeller bool `protobuf:"varint,6,opt,name=is_coin_seller,json=isCoinSeller,proto3" json:"is_coin_seller,omitempty"` - HostStatus string `protobuf:"bytes,7,opt,name=host_status,json=hostStatus,proto3" json:"host_status,omitempty"` - AgencyId int64 `protobuf:"varint,8,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - BdId int64 `protobuf:"varint,9,opt,name=bd_id,json=bdId,proto3" json:"bd_id,omitempty"` - BdStatus string `protobuf:"bytes,10,opt,name=bd_status,json=bdStatus,proto3" json:"bd_status,omitempty"` - CoinSellerStatus string `protobuf:"bytes,11,opt,name=coin_seller_status,json=coinSellerStatus,proto3" json:"coin_seller_status,omitempty"` - PendingRoleInvitations int64 `protobuf:"varint,12,opt,name=pending_role_invitations,json=pendingRoleInvitations,proto3" json:"pending_role_invitations,omitempty"` - IsManager bool `protobuf:"varint,13,opt,name=is_manager,json=isManager,proto3" json:"is_manager,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + IsHost bool `protobuf:"varint,2,opt,name=is_host,json=isHost,proto3" json:"is_host,omitempty"` + IsAgency bool `protobuf:"varint,3,opt,name=is_agency,json=isAgency,proto3" json:"is_agency,omitempty"` + IsBd bool `protobuf:"varint,4,opt,name=is_bd,json=isBd,proto3" json:"is_bd,omitempty"` + IsBdLeader bool `protobuf:"varint,5,opt,name=is_bd_leader,json=isBdLeader,proto3" json:"is_bd_leader,omitempty"` + IsCoinSeller bool `protobuf:"varint,6,opt,name=is_coin_seller,json=isCoinSeller,proto3" json:"is_coin_seller,omitempty"` + HostStatus string `protobuf:"bytes,7,opt,name=host_status,json=hostStatus,proto3" json:"host_status,omitempty"` + AgencyId int64 `protobuf:"varint,8,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + BdId int64 `protobuf:"varint,9,opt,name=bd_id,json=bdId,proto3" json:"bd_id,omitempty"` + BdStatus string `protobuf:"bytes,10,opt,name=bd_status,json=bdStatus,proto3" json:"bd_status,omitempty"` + CoinSellerStatus string `protobuf:"bytes,11,opt,name=coin_seller_status,json=coinSellerStatus,proto3" json:"coin_seller_status,omitempty"` + PendingRoleInvitations int64 `protobuf:"varint,12,opt,name=pending_role_invitations,json=pendingRoleInvitations,proto3" json:"pending_role_invitations,omitempty"` + IsManager bool `protobuf:"varint,13,opt,name=is_manager,json=isManager,proto3" json:"is_manager,omitempty"` // roles 给后台等需要多身份并列展示的调用方提供稳定字符串集合;原布尔字段继续兼容 App 入口显隐。 - Roles []string `protobuf:"bytes,14,rep,name=roles,proto3" json:"roles,omitempty"` + Roles []string `protobuf:"bytes,14,rep,name=roles,proto3" json:"roles,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserRoleSummary) Reset() { @@ -1018,22 +1011,21 @@ func (x *UserRoleSummary) GetRoles() []string { // AgencyMembership 是 host 与 Agency 的有时效关系事实。 type AgencyMembership struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MembershipId int64 `protobuf:"varint,1,opt,name=membership_id,json=membershipId,proto3" json:"membership_id,omitempty"` - AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - MembershipType string `protobuf:"bytes,5,opt,name=membership_type,json=membershipType,proto3" json:"membership_type,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - JoinedAtMs int64 `protobuf:"varint,7,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` - EndedAtMs int64 `protobuf:"varint,8,opt,name=ended_at_ms,json=endedAtMs,proto3" json:"ended_at_ms,omitempty"` - EndedByUserId int64 `protobuf:"varint,9,opt,name=ended_by_user_id,json=endedByUserId,proto3" json:"ended_by_user_id,omitempty"` - EndedReason string `protobuf:"bytes,10,opt,name=ended_reason,json=endedReason,proto3" json:"ended_reason,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MembershipId int64 `protobuf:"varint,1,opt,name=membership_id,json=membershipId,proto3" json:"membership_id,omitempty"` + AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + MembershipType string `protobuf:"bytes,5,opt,name=membership_type,json=membershipType,proto3" json:"membership_type,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + JoinedAtMs int64 `protobuf:"varint,7,opt,name=joined_at_ms,json=joinedAtMs,proto3" json:"joined_at_ms,omitempty"` + EndedAtMs int64 `protobuf:"varint,8,opt,name=ended_at_ms,json=endedAtMs,proto3" json:"ended_at_ms,omitempty"` + EndedByUserId int64 `protobuf:"varint,9,opt,name=ended_by_user_id,json=endedByUserId,proto3" json:"ended_by_user_id,omitempty"` + EndedReason string `protobuf:"bytes,10,opt,name=ended_reason,json=endedReason,proto3" json:"ended_reason,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyMembership) Reset() { @@ -1152,21 +1144,20 @@ func (x *AgencyMembership) GetUpdatedAtMs() int64 { // AgencyApplication 是用户主动申请加入 Agency 的 App 事实。 type AgencyApplication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ApplicationId int64 `protobuf:"varint,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ApplicantUserId int64 `protobuf:"varint,3,opt,name=applicant_user_id,json=applicantUserId,proto3" json:"applicant_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - ReviewedByUserId int64 `protobuf:"varint,7,opt,name=reviewed_by_user_id,json=reviewedByUserId,proto3" json:"reviewed_by_user_id,omitempty"` - ReviewReason string `protobuf:"bytes,8,opt,name=review_reason,json=reviewReason,proto3" json:"review_reason,omitempty"` - ReviewedAtMs int64 `protobuf:"varint,9,opt,name=reviewed_at_ms,json=reviewedAtMs,proto3" json:"reviewed_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ApplicationId int64 `protobuf:"varint,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ApplicantUserId int64 `protobuf:"varint,3,opt,name=applicant_user_id,json=applicantUserId,proto3" json:"applicant_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + ReviewedByUserId int64 `protobuf:"varint,7,opt,name=reviewed_by_user_id,json=reviewedByUserId,proto3" json:"reviewed_by_user_id,omitempty"` + ReviewReason string `protobuf:"bytes,8,opt,name=review_reason,json=reviewReason,proto3" json:"review_reason,omitempty"` + ReviewedAtMs int64 `protobuf:"varint,9,opt,name=reviewed_at_ms,json=reviewedAtMs,proto3" json:"reviewed_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyApplication) Reset() { @@ -1278,26 +1269,25 @@ func (x *AgencyApplication) GetUpdatedAtMs() int64 { // RoleInvitation 是 BD/BD Leader 邀请用户成为 Agency 或 BD 的 App 事实。 type RoleInvitation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - InvitationId int64 `protobuf:"varint,1,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - InvitationType string `protobuf:"bytes,3,opt,name=invitation_type,json=invitationType,proto3" json:"invitation_type,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - InviterUserId int64 `protobuf:"varint,5,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` - InviterBdUserId int64 `protobuf:"varint,6,opt,name=inviter_bd_user_id,json=inviterBdUserId,proto3" json:"inviter_bd_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,7,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - AgencyName string `protobuf:"bytes,9,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` - ParentBdUserId int64 `protobuf:"varint,10,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` - ParentLeaderUserId int64 `protobuf:"varint,11,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` - ProcessedByUserId int64 `protobuf:"varint,12,opt,name=processed_by_user_id,json=processedByUserId,proto3" json:"processed_by_user_id,omitempty"` - ProcessReason string `protobuf:"bytes,13,opt,name=process_reason,json=processReason,proto3" json:"process_reason,omitempty"` - ProcessedAtMs int64 `protobuf:"varint,14,opt,name=processed_at_ms,json=processedAtMs,proto3" json:"processed_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + InvitationId int64 `protobuf:"varint,1,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + InvitationType string `protobuf:"bytes,3,opt,name=invitation_type,json=invitationType,proto3" json:"invitation_type,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + InviterUserId int64 `protobuf:"varint,5,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` + InviterBdUserId int64 `protobuf:"varint,6,opt,name=inviter_bd_user_id,json=inviterBdUserId,proto3" json:"inviter_bd_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,7,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + AgencyName string `protobuf:"bytes,9,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` + ParentBdUserId int64 `protobuf:"varint,10,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` + ParentLeaderUserId int64 `protobuf:"varint,11,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` + ProcessedByUserId int64 `protobuf:"varint,12,opt,name=processed_by_user_id,json=processedByUserId,proto3" json:"processed_by_user_id,omitempty"` + ProcessReason string `protobuf:"bytes,13,opt,name=process_reason,json=processReason,proto3" json:"process_reason,omitempty"` + ProcessedAtMs int64 `protobuf:"varint,14,opt,name=processed_at_ms,json=processedAtMs,proto3" json:"processed_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoleInvitation) Reset() { @@ -1443,14 +1433,13 @@ func (x *RoleInvitation) GetUpdatedAtMs() int64 { } type SearchAgenciesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Keyword string `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Keyword string `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchAgenciesRequest) Reset() { @@ -1512,11 +1501,10 @@ func (x *SearchAgenciesRequest) GetPageSize() int32 { } type SearchAgenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` unknownFields protoimpl.UnknownFields - - Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchAgenciesResponse) Reset() { @@ -1557,14 +1545,13 @@ func (x *SearchAgenciesResponse) GetAgencies() []*Agency { } type ApplyToAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ApplyToAgencyRequest) Reset() { @@ -1626,11 +1613,10 @@ func (x *ApplyToAgencyRequest) GetAgencyId() int64 { } type ApplyToAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *AgencyApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` unknownFields protoimpl.UnknownFields - - Application *AgencyApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ApplyToAgencyResponse) Reset() { @@ -1671,16 +1657,15 @@ func (x *ApplyToAgencyResponse) GetApplication() *AgencyApplication { } type ReviewAgencyApplicationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ReviewerUserId int64 `protobuf:"varint,3,opt,name=reviewer_user_id,json=reviewerUserId,proto3" json:"reviewer_user_id,omitempty"` - ApplicationId int64 `protobuf:"varint,4,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - Decision string `protobuf:"bytes,5,opt,name=decision,proto3" json:"decision,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ReviewerUserId int64 `protobuf:"varint,3,opt,name=reviewer_user_id,json=reviewerUserId,proto3" json:"reviewer_user_id,omitempty"` + ApplicationId int64 `protobuf:"varint,4,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + Decision string `protobuf:"bytes,5,opt,name=decision,proto3" json:"decision,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReviewAgencyApplicationRequest) Reset() { @@ -1756,13 +1741,12 @@ func (x *ReviewAgencyApplicationRequest) GetReason() string { } type ReviewAgencyApplicationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *AgencyApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` unknownFields protoimpl.UnknownFields - - Application *AgencyApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` - HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` - Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReviewAgencyApplicationResponse) Reset() { @@ -1817,16 +1801,15 @@ func (x *ReviewAgencyApplicationResponse) GetMembership() *AgencyMembership { } type KickAgencyHostRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - HostUserId int64 `protobuf:"varint,5,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + HostUserId int64 `protobuf:"varint,5,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *KickAgencyHostRequest) Reset() { @@ -1902,12 +1885,11 @@ func (x *KickAgencyHostRequest) GetReason() string { } type KickAgencyHostResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Membership *AgencyMembership `protobuf:"bytes,1,opt,name=membership,proto3" json:"membership,omitempty"` + HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` unknownFields protoimpl.UnknownFields - - Membership *AgencyMembership `protobuf:"bytes,1,opt,name=membership,proto3" json:"membership,omitempty"` - HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *KickAgencyHostResponse) Reset() { @@ -1955,15 +1937,14 @@ func (x *KickAgencyHostResponse) GetHostProfile() *HostProfile { } type InviteAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + AgencyName string `protobuf:"bytes,5,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - AgencyName string `protobuf:"bytes,5,opt,name=agency_name,json=agencyName,proto3" json:"agency_name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteAgencyRequest) Reset() { @@ -2032,11 +2013,10 @@ func (x *InviteAgencyRequest) GetAgencyName() string { } type InviteAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` unknownFields protoimpl.UnknownFields - - Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteAgencyResponse) Reset() { @@ -2077,14 +2057,13 @@ func (x *InviteAgencyResponse) GetInvitation() *RoleInvitation { } type InviteBDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteBDRequest) Reset() { @@ -2146,11 +2125,10 @@ func (x *InviteBDRequest) GetTargetUserId() int64 { } type InviteBDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` unknownFields protoimpl.UnknownFields - - Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteBDResponse) Reset() { @@ -2191,14 +2169,13 @@ func (x *InviteBDResponse) GetInvitation() *RoleInvitation { } type InviteHostRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - InviterUserId int64 `protobuf:"varint,3,opt,name=inviter_user_id,json=inviterUserId,proto3" json:"inviter_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteHostRequest) Reset() { @@ -2260,11 +2237,10 @@ func (x *InviteHostRequest) GetTargetUserId() int64 { } type InviteHostResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` unknownFields protoimpl.UnknownFields - - Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InviteHostResponse) Reset() { @@ -2305,14 +2281,13 @@ func (x *InviteHostResponse) GetInvitation() *RoleInvitation { } type ListBDLeaderBDsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + LeaderUserId int64 `protobuf:"varint,2,opt,name=leader_user_id,json=leaderUserId,proto3" json:"leader_user_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - LeaderUserId int64 `protobuf:"varint,2,opt,name=leader_user_id,json=leaderUserId,proto3" json:"leader_user_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDLeaderBDsRequest) Reset() { @@ -2374,11 +2349,10 @@ func (x *ListBDLeaderBDsRequest) GetPageSize() int32 { } type ListBDLeaderBDsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + BdProfiles []*BDProfile `protobuf:"bytes,1,rep,name=bd_profiles,json=bdProfiles,proto3" json:"bd_profiles,omitempty"` unknownFields protoimpl.UnknownFields - - BdProfiles []*BDProfile `protobuf:"bytes,1,rep,name=bd_profiles,json=bdProfiles,proto3" json:"bd_profiles,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDLeaderBDsResponse) Reset() { @@ -2419,14 +2393,13 @@ func (x *ListBDLeaderBDsResponse) GetBdProfiles() []*BDProfile { } type ListBDLeaderAgenciesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + LeaderUserId int64 `protobuf:"varint,2,opt,name=leader_user_id,json=leaderUserId,proto3" json:"leader_user_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - LeaderUserId int64 `protobuf:"varint,2,opt,name=leader_user_id,json=leaderUserId,proto3" json:"leader_user_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDLeaderAgenciesRequest) Reset() { @@ -2488,11 +2461,10 @@ func (x *ListBDLeaderAgenciesRequest) GetPageSize() int32 { } type ListBDLeaderAgenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` unknownFields protoimpl.UnknownFields - - Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDLeaderAgenciesResponse) Reset() { @@ -2533,14 +2505,13 @@ func (x *ListBDLeaderAgenciesResponse) GetAgencies() []*Agency { } type ListManagerTeamAgenciesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ManagerUserId int64 `protobuf:"varint,2,opt,name=manager_user_id,json=managerUserId,proto3" json:"manager_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ManagerUserId int64 `protobuf:"varint,2,opt,name=manager_user_id,json=managerUserId,proto3" json:"manager_user_id,omitempty"` // page_size 是防御性截断上限;正常经理团队规模远小于该值,超限时 truncated=true 提示统计口径不完整。 - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListManagerTeamAgenciesRequest) Reset() { @@ -2597,13 +2568,12 @@ func (x *ListManagerTeamAgenciesRequest) GetPageSize() int32 { // ManagerTeamAgency 是团队统计专用的轻量投影,只承诺归属关系字段; // 不复用 Agency 消息,避免调用方误以为能拿到名称/头衔/成员数等完整资料。 type ManagerTeamAgency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - ParentBdUserId int64 `protobuf:"varint,3,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AgencyId int64 `protobuf:"varint,1,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,2,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + ParentBdUserId int64 `protobuf:"varint,3,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ManagerTeamAgency) Reset() { @@ -2658,15 +2628,14 @@ func (x *ManagerTeamAgency) GetParentBdUserId() int64 { } type ListManagerTeamAgenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // agencies 覆盖经理整棵团队树:经理创建的 BD Leader 直挂 Agency + 这些 Leader 下属 BD 拓展的 Agency。 Agencies []*ManagerTeamAgency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` TotalBdLeaders int32 `protobuf:"varint,2,opt,name=total_bd_leaders,json=totalBdLeaders,proto3" json:"total_bd_leaders,omitempty"` TotalBds int32 `protobuf:"varint,3,opt,name=total_bds,json=totalBds,proto3" json:"total_bds,omitempty"` Truncated bool `protobuf:"varint,4,opt,name=truncated,proto3" json:"truncated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListManagerTeamAgenciesResponse) Reset() { @@ -2728,14 +2697,13 @@ func (x *ListManagerTeamAgenciesResponse) GetTruncated() bool { } type ListBDAgenciesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + BdUserId int64 `protobuf:"varint,2,opt,name=bd_user_id,json=bdUserId,proto3" json:"bd_user_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - BdUserId int64 `protobuf:"varint,2,opt,name=bd_user_id,json=bdUserId,proto3" json:"bd_user_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDAgenciesRequest) Reset() { @@ -2797,11 +2765,10 @@ func (x *ListBDAgenciesRequest) GetPageSize() int32 { } type ListBDAgenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` unknownFields protoimpl.UnknownFields - - Agencies []*Agency `protobuf:"bytes,1,rep,name=agencies,proto3" json:"agencies,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListBDAgenciesResponse) Reset() { @@ -2842,14 +2809,13 @@ func (x *ListBDAgenciesResponse) GetAgencies() []*Agency { } type ListRoleInvitationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoleInvitationsRequest) Reset() { @@ -2911,11 +2877,10 @@ func (x *ListRoleInvitationsRequest) GetPageSize() int32 { } type ListRoleInvitationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitations []*RoleInvitation `protobuf:"bytes,1,rep,name=invitations,proto3" json:"invitations,omitempty"` unknownFields protoimpl.UnknownFields - - Invitations []*RoleInvitation `protobuf:"bytes,1,rep,name=invitations,proto3" json:"invitations,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRoleInvitationsResponse) Reset() { @@ -2956,13 +2921,12 @@ func (x *ListRoleInvitationsResponse) GetInvitations() []*RoleInvitation { } type GetRoleInvitationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + InvitationId int64 `protobuf:"varint,3,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - InvitationId int64 `protobuf:"varint,3,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleInvitationRequest) Reset() { @@ -3017,11 +2981,10 @@ func (x *GetRoleInvitationRequest) GetInvitationId() int64 { } type GetRoleInvitationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` unknownFields protoimpl.UnknownFields - - Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleInvitationResponse) Reset() { @@ -3062,16 +3025,15 @@ func (x *GetRoleInvitationResponse) GetInvitation() *RoleInvitation { } type ProcessRoleInvitationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + InvitationId int64 `protobuf:"varint,4,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` + Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ActorUserId int64 `protobuf:"varint,3,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - InvitationId int64 `protobuf:"varint,4,opt,name=invitation_id,json=invitationId,proto3" json:"invitation_id,omitempty"` - Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ProcessRoleInvitationRequest) Reset() { @@ -3147,15 +3109,14 @@ func (x *ProcessRoleInvitationRequest) GetReason() string { } type ProcessRoleInvitationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` + HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + Agency *Agency `protobuf:"bytes,3,opt,name=agency,proto3" json:"agency,omitempty"` + Membership *AgencyMembership `protobuf:"bytes,4,opt,name=membership,proto3" json:"membership,omitempty"` + BdProfile *BDProfile `protobuf:"bytes,5,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` unknownFields protoimpl.UnknownFields - - Invitation *RoleInvitation `protobuf:"bytes,1,opt,name=invitation,proto3" json:"invitation,omitempty"` - HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` - Agency *Agency `protobuf:"bytes,3,opt,name=agency,proto3" json:"agency,omitempty"` - Membership *AgencyMembership `protobuf:"bytes,4,opt,name=membership,proto3" json:"membership,omitempty"` - BdProfile *BDProfile `protobuf:"bytes,5,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ProcessRoleInvitationResponse) Reset() { @@ -3224,12 +3185,11 @@ func (x *ProcessRoleInvitationResponse) GetBdProfile() *BDProfile { } type GetHostProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostProfileRequest) Reset() { @@ -3277,11 +3237,10 @@ func (x *GetHostProfileRequest) GetUserId() int64 { } type GetHostProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + HostProfile *HostProfile `protobuf:"bytes,1,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` unknownFields protoimpl.UnknownFields - - HostProfile *HostProfile `protobuf:"bytes,1,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostProfileResponse) Reset() { @@ -3322,12 +3281,11 @@ func (x *GetHostProfileResponse) GetHostProfile() *HostProfile { } type BatchGetHostProfilesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetHostProfilesRequest) Reset() { @@ -3375,11 +3333,10 @@ func (x *BatchGetHostProfilesRequest) GetUserIds() []int64 { } type BatchGetHostProfilesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + HostProfiles map[int64]*HostProfile `protobuf:"bytes,1,rep,name=host_profiles,json=hostProfiles,proto3" json:"host_profiles,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` unknownFields protoimpl.UnknownFields - - HostProfiles map[int64]*HostProfile `protobuf:"bytes,1,rep,name=host_profiles,json=hostProfiles,proto3" json:"host_profiles,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + sizeCache protoimpl.SizeCache } func (x *BatchGetHostProfilesResponse) Reset() { @@ -3420,13 +3377,12 @@ func (x *BatchGetHostProfilesResponse) GetHostProfiles() map[int64]*HostProfile } type GetBDProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBDProfileRequest) Reset() { @@ -3481,11 +3437,10 @@ func (x *GetBDProfileRequest) GetRole() string { } type GetBDProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` unknownFields protoimpl.UnknownFields - - BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBDProfileResponse) Reset() { @@ -3526,12 +3481,11 @@ func (x *GetBDProfileResponse) GetBdProfile() *BDProfile { } type GetCoinSellerProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCoinSellerProfileRequest) Reset() { @@ -3579,11 +3533,10 @@ func (x *GetCoinSellerProfileRequest) GetUserId() int64 { } type GetCoinSellerProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetCoinSellerProfileResponse) Reset() { @@ -3624,12 +3577,11 @@ func (x *GetCoinSellerProfileResponse) GetCoinSellerProfile() *CoinSellerProfile } type ListActiveCoinSellersInMyRegionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListActiveCoinSellersInMyRegionRequest) Reset() { @@ -3677,11 +3629,10 @@ func (x *ListActiveCoinSellersInMyRegionRequest) GetUserId() int64 { } type ListActiveCoinSellersInMyRegionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CoinSellers []*CoinSellerListItem `protobuf:"bytes,1,rep,name=coin_sellers,json=coinSellers,proto3" json:"coin_sellers,omitempty"` unknownFields protoimpl.UnknownFields - - CoinSellers []*CoinSellerListItem `protobuf:"bytes,1,rep,name=coin_sellers,json=coinSellers,proto3" json:"coin_sellers,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListActiveCoinSellersInMyRegionResponse) Reset() { @@ -3722,14 +3673,13 @@ func (x *ListActiveCoinSellersInMyRegionResponse) GetCoinSellers() []*CoinSeller } type CreateSubCoinSellerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + ChildUserId int64 `protobuf:"varint,4,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - ChildUserId int64 `protobuf:"varint,4,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateSubCoinSellerRequest) Reset() { @@ -3791,12 +3741,11 @@ func (x *CreateSubCoinSellerRequest) GetChildUserId() int64 { } type CreateSubCoinSellerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Relation *CoinSellerSubRelation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` + Child *CoinSellerListItem `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"` unknownFields protoimpl.UnknownFields - - Relation *CoinSellerSubRelation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Child *CoinSellerListItem `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateSubCoinSellerResponse) Reset() { @@ -3844,14 +3793,13 @@ func (x *CreateSubCoinSellerResponse) GetChild() *CoinSellerListItem { } type SubmitSubCoinSellerApplicationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ParentUserId int64 `protobuf:"varint,3,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubmitSubCoinSellerApplicationRequest) Reset() { @@ -3913,11 +3861,10 @@ func (x *SubmitSubCoinSellerApplicationRequest) GetTargetUserId() int64 { } type SubmitSubCoinSellerApplicationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *CoinSellerSubApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` unknownFields protoimpl.UnknownFields - - Application *CoinSellerSubApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubmitSubCoinSellerApplicationResponse) Reset() { @@ -3958,14 +3905,13 @@ func (x *SubmitSubCoinSellerApplicationResponse) GetApplication() *CoinSellerSub } type ListSubCoinSellersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSubCoinSellersRequest) Reset() { @@ -4027,14 +3973,13 @@ func (x *ListSubCoinSellersRequest) GetPageSize() int32 { } type ListSubCoinSellersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Children []*CoinSellerListItem `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - Children []*CoinSellerListItem `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListSubCoinSellersResponse) Reset() { @@ -4096,13 +4041,12 @@ func (x *ListSubCoinSellersResponse) GetPageSize() int32 { } type CheckCoinSellerSubRelationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckCoinSellerSubRelationRequest) Reset() { @@ -4157,13 +4101,12 @@ func (x *CheckCoinSellerSubRelationRequest) GetChildUserId() int64 { } type CheckCoinSellerSubRelationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Child *CoinSellerListItem `protobuf:"bytes,3,opt,name=child,proto3" json:"child,omitempty"` unknownFields protoimpl.UnknownFields - - Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - Child *CoinSellerListItem `protobuf:"bytes,3,opt,name=child,proto3" json:"child,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckCoinSellerSubRelationResponse) Reset() { @@ -4218,12 +4161,11 @@ func (x *CheckCoinSellerSubRelationResponse) GetChild() *CoinSellerListItem { } type GetUserRoleSummaryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUserRoleSummaryRequest) Reset() { @@ -4271,11 +4213,10 @@ func (x *GetUserRoleSummaryRequest) GetUserId() int64 { } type GetUserRoleSummaryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Summary *UserRoleSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` unknownFields protoimpl.UnknownFields - - Summary *UserRoleSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUserRoleSummaryResponse) Reset() { @@ -4316,12 +4257,11 @@ func (x *GetUserRoleSummaryResponse) GetSummary() *UserRoleSummary { } type GetAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyRequest) Reset() { @@ -4369,11 +4309,10 @@ func (x *GetAgencyRequest) GetAgencyId() int64 { } type GetAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyResponse) Reset() { @@ -4414,13 +4353,12 @@ func (x *GetAgencyResponse) GetAgency() *Agency { } type CheckBusinessCapabilityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + Capability string `protobuf:"bytes,3,opt,name=capability,proto3" json:"capability,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - ActorUserId int64 `protobuf:"varint,2,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` - Capability string `protobuf:"bytes,3,opt,name=capability,proto3" json:"capability,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckBusinessCapabilityRequest) Reset() { @@ -4475,12 +4413,11 @@ func (x *CheckBusinessCapabilityRequest) GetCapability() string { } type CheckBusinessCapabilityResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckBusinessCapabilityResponse) Reset() { @@ -4529,15 +4466,14 @@ func (x *CheckBusinessCapabilityResponse) GetReason() string { // RoleScopePolicy 是 App 级角色拓展边界;调用方只消费 scope,不直接判断具体 app_code。 type RoleScopePolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Scene string `protobuf:"bytes,1,opt,name=scene,proto3" json:"scene,omitempty"` - BaseScope string `protobuf:"bytes,2,opt,name=base_scope,json=baseScope,proto3" json:"base_scope,omitempty"` - RegionExpansionConfigurable bool `protobuf:"varint,3,opt,name=region_expansion_configurable,json=regionExpansionConfigurable,proto3" json:"region_expansion_configurable,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Scene string `protobuf:"bytes,1,opt,name=scene,proto3" json:"scene,omitempty"` + BaseScope string `protobuf:"bytes,2,opt,name=base_scope,json=baseScope,proto3" json:"base_scope,omitempty"` + RegionExpansionConfigurable bool `protobuf:"varint,3,opt,name=region_expansion_configurable,json=regionExpansionConfigurable,proto3" json:"region_expansion_configurable,omitempty"` // expanded_scope 是经理通用范围开关开启后的范围;调用方不能自行假设一定是 region。 ExpandedScope string `protobuf:"bytes,4,opt,name=expanded_scope,json=expandedScope,proto3" json:"expanded_scope,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RoleScopePolicy) Reset() { @@ -4599,12 +4535,11 @@ func (x *RoleScopePolicy) GetExpandedScope() string { } type GetRoleScopePolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Scene string `protobuf:"bytes,2,opt,name=scene,proto3" json:"scene,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - Scene string `protobuf:"bytes,2,opt,name=scene,proto3" json:"scene,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleScopePolicyRequest) Reset() { @@ -4652,11 +4587,10 @@ func (x *GetRoleScopePolicyRequest) GetScene() string { } type GetRoleScopePolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Policy *RoleScopePolicy `protobuf:"bytes,1,opt,name=policy,proto3" json:"policy,omitempty"` unknownFields protoimpl.UnknownFields - - Policy *RoleScopePolicy `protobuf:"bytes,1,opt,name=policy,proto3" json:"policy,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleScopePolicyResponse) Reset() { @@ -4697,13 +4631,12 @@ func (x *GetRoleScopePolicyResponse) GetPolicy() *RoleScopePolicy { } type GetAgencyMembersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyMembersRequest) Reset() { @@ -4758,11 +4691,10 @@ func (x *GetAgencyMembersRequest) GetStatus() string { } type GetAgencyMembersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Memberships []*AgencyMembership `protobuf:"bytes,1,rep,name=memberships,proto3" json:"memberships,omitempty"` unknownFields protoimpl.UnknownFields - - Memberships []*AgencyMembership `protobuf:"bytes,1,rep,name=memberships,proto3" json:"memberships,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyMembersResponse) Reset() { @@ -4803,13 +4735,12 @@ func (x *GetAgencyMembersResponse) GetMemberships() []*AgencyMembership { } type GetAgencyApplicationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - AgencyId int64 `protobuf:"varint,2,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyApplicationsRequest) Reset() { @@ -4864,11 +4795,10 @@ func (x *GetAgencyApplicationsRequest) GetStatus() string { } type GetAgencyApplicationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Applications []*AgencyApplication `protobuf:"bytes,1,rep,name=applications,proto3" json:"applications,omitempty"` unknownFields protoimpl.UnknownFields - - Applications []*AgencyApplication `protobuf:"bytes,1,rep,name=applications,proto3" json:"applications,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyApplicationsResponse) Reset() { @@ -4909,15 +4839,14 @@ func (x *GetAgencyApplicationsResponse) GetApplications() []*AgencyApplication { } type CreateBDLeaderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateBDLeaderRequest) Reset() { @@ -4986,11 +4915,10 @@ func (x *CreateBDLeaderRequest) GetReason() string { } type CreateBDLeaderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` unknownFields protoimpl.UnknownFields - - BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateBDLeaderResponse) Reset() { @@ -5031,16 +4959,15 @@ func (x *CreateBDLeaderResponse) GetBdProfile() *BDProfile { } type CreateBDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - ParentLeaderUserId int64 `protobuf:"varint,5,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + ParentLeaderUserId int64 `protobuf:"varint,5,opt,name=parent_leader_user_id,json=parentLeaderUserId,proto3" json:"parent_leader_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateBDRequest) Reset() { @@ -5116,11 +5043,10 @@ func (x *CreateBDRequest) GetReason() string { } type CreateBDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` unknownFields protoimpl.UnknownFields - - BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateBDResponse) Reset() { @@ -5161,17 +5087,16 @@ func (x *CreateBDResponse) GetBdProfile() *BDProfile { } type SetBDStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + Role string `protobuf:"bytes,7,opt,name=role,proto3" json:"role,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - Role string `protobuf:"bytes,7,opt,name=role,proto3" json:"role,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetBDStatusRequest) Reset() { @@ -5254,11 +5179,10 @@ func (x *SetBDStatusRequest) GetRole() string { } type SetBDStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` unknownFields protoimpl.UnknownFields - - BdProfile *BDProfile `protobuf:"bytes,1,opt,name=bd_profile,json=bdProfile,proto3" json:"bd_profile,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetBDStatusResponse) Reset() { @@ -5299,16 +5223,15 @@ func (x *SetBDStatusResponse) GetBdProfile() *BDProfile { } type CreateCoinSellerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - CanManageSubCoinSellers *bool `protobuf:"varint,6,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3,oneof" json:"can_manage_sub_coin_sellers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + CanManageSubCoinSellers *bool `protobuf:"varint,6,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3,oneof" json:"can_manage_sub_coin_sellers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateCoinSellerRequest) Reset() { @@ -5384,11 +5307,10 @@ func (x *CreateCoinSellerRequest) GetCanManageSubCoinSellers() bool { } type CreateCoinSellerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateCoinSellerResponse) Reset() { @@ -5429,17 +5351,16 @@ func (x *CreateCoinSellerResponse) GetCoinSellerProfile() *CoinSellerProfile { } type SetCoinSellerStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - CanManageSubCoinSellers *bool `protobuf:"varint,7,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3,oneof" json:"can_manage_sub_coin_sellers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + CanManageSubCoinSellers *bool `protobuf:"varint,7,opt,name=can_manage_sub_coin_sellers,json=canManageSubCoinSellers,proto3,oneof" json:"can_manage_sub_coin_sellers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetCoinSellerStatusRequest) Reset() { @@ -5522,11 +5443,10 @@ func (x *SetCoinSellerStatusRequest) GetCanManageSubCoinSellers() bool { } type SetCoinSellerStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CoinSellerProfile *CoinSellerProfile `protobuf:"bytes,1,opt,name=coin_seller_profile,json=coinSellerProfile,proto3" json:"coin_seller_profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetCoinSellerStatusResponse) Reset() { @@ -5567,16 +5487,15 @@ func (x *SetCoinSellerStatusResponse) GetCoinSellerProfile() *CoinSellerProfile } type ReviewSubCoinSellerApplicationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + ApplicationId int64 `protobuf:"varint,4,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + Decision string `protobuf:"bytes,5,opt,name=decision,proto3" json:"decision,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - ApplicationId int64 `protobuf:"varint,4,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - Decision string `protobuf:"bytes,5,opt,name=decision,proto3" json:"decision,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReviewSubCoinSellerApplicationRequest) Reset() { @@ -5652,13 +5571,12 @@ func (x *ReviewSubCoinSellerApplicationRequest) GetReason() string { } type ReviewSubCoinSellerApplicationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Application *CoinSellerSubApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` + Relation *CoinSellerSubRelation `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + Child *CoinSellerListItem `protobuf:"bytes,3,opt,name=child,proto3" json:"child,omitempty"` unknownFields protoimpl.UnknownFields - - Application *CoinSellerSubApplication `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` - Relation *CoinSellerSubRelation `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Child *CoinSellerListItem `protobuf:"bytes,3,opt,name=child,proto3" json:"child,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReviewSubCoinSellerApplicationResponse) Reset() { @@ -5713,20 +5631,19 @@ func (x *ReviewSubCoinSellerApplicationResponse) GetChild() *CoinSellerListItem } type CreateAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` - ParentBdUserId int64 `protobuf:"varint,5,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - JoinEnabled bool `protobuf:"varint,7,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + OwnerUserId int64 `protobuf:"varint,4,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"` + ParentBdUserId int64 `protobuf:"varint,5,opt,name=parent_bd_user_id,json=parentBdUserId,proto3" json:"parent_bd_user_id,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + JoinEnabled bool `protobuf:"varint,7,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` // Deprecated: Agency 不再限制主播数量,服务端会忽略该字段。 - MaxHosts int32 `protobuf:"varint,8,opt,name=max_hosts,json=maxHosts,proto3" json:"max_hosts,omitempty"` - Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + MaxHosts int32 `protobuf:"varint,8,opt,name=max_hosts,json=maxHosts,proto3" json:"max_hosts,omitempty"` + Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateAgencyRequest) Reset() { @@ -5823,13 +5740,12 @@ func (x *CreateAgencyRequest) GetReason() string { } type CreateAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` - HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` - Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateAgencyResponse) Reset() { @@ -5884,16 +5800,15 @@ func (x *CreateAgencyResponse) GetMembership() *AgencyMembership { } type AdminAddAgencyHostRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + TargetUserId int64 `protobuf:"varint,5,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - TargetUserId int64 `protobuf:"varint,5,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminAddAgencyHostRequest) Reset() { @@ -5969,13 +5884,12 @@ func (x *AdminAddAgencyHostRequest) GetReason() string { } type AdminAddAgencyHostResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` + Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` - HostProfile *HostProfile `protobuf:"bytes,2,opt,name=host_profile,json=hostProfile,proto3" json:"host_profile,omitempty"` - Membership *AgencyMembership `protobuf:"bytes,3,opt,name=membership,proto3" json:"membership,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminAddAgencyHostResponse) Reset() { @@ -6030,15 +5944,14 @@ func (x *AdminAddAgencyHostResponse) GetMembership() *AgencyMembership { } type CloseAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CloseAgencyRequest) Reset() { @@ -6107,11 +6020,10 @@ func (x *CloseAgencyRequest) GetReason() string { } type CloseAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CloseAgencyResponse) Reset() { @@ -6152,15 +6064,14 @@ func (x *CloseAgencyResponse) GetAgency() *Agency { } type DeleteAgencyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteAgencyRequest) Reset() { @@ -6229,11 +6140,10 @@ func (x *DeleteAgencyRequest) GetReason() string { } type DeleteAgencyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteAgencyResponse) Reset() { @@ -6274,16 +6184,15 @@ func (x *DeleteAgencyResponse) GetAgency() *Agency { } type SetAgencyStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetAgencyStatusRequest) Reset() { @@ -6359,11 +6268,10 @@ func (x *SetAgencyStatusRequest) GetReason() string { } type SetAgencyStatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetAgencyStatusResponse) Reset() { @@ -6404,16 +6312,15 @@ func (x *SetAgencyStatusResponse) GetAgency() *Agency { } type SetAgencyJoinEnabledRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + JoinEnabled bool `protobuf:"varint,5,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AdminUserId int64 `protobuf:"varint,3,opt,name=admin_user_id,json=adminUserId,proto3" json:"admin_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - JoinEnabled bool `protobuf:"varint,5,opt,name=join_enabled,json=joinEnabled,proto3" json:"join_enabled,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetAgencyJoinEnabledRequest) Reset() { @@ -6489,11 +6396,10 @@ func (x *SetAgencyJoinEnabledRequest) GetReason() string { } type SetAgencyJoinEnabledResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetAgencyJoinEnabledResponse) Reset() { @@ -6534,16 +6440,15 @@ func (x *SetAgencyJoinEnabledResponse) GetAgency() *Agency { } type UpdateAgencyProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - Name *string `protobuf:"bytes,5,opt,name=name,proto3,oneof" json:"name,omitempty"` - Avatar *string `protobuf:"bytes,6,opt,name=avatar,proto3,oneof" json:"avatar,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,3,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + AgencyId int64 `protobuf:"varint,4,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + Name *string `protobuf:"bytes,5,opt,name=name,proto3,oneof" json:"name,omitempty"` + Avatar *string `protobuf:"bytes,6,opt,name=avatar,proto3,oneof" json:"avatar,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateAgencyProfileRequest) Reset() { @@ -6619,11 +6524,10 @@ func (x *UpdateAgencyProfileRequest) GetAvatar() string { } type UpdateAgencyProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` unknownFields protoimpl.UnknownFields - - Agency *Agency `protobuf:"bytes,1,opt,name=agency,proto3" json:"agency,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateAgencyProfileResponse) Reset() { @@ -6665,15 +6569,14 @@ func (x *UpdateAgencyProfileResponse) GetAgency() *Agency { // HostEngagementStats 是 Fami 等公会中心使用的用户侧统计聚合;金额/礼物流水由 wallet-service 单独拥有。 type HostEngagementStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OnlineDurationMs int64 `protobuf:"varint,1,opt,name=online_duration_ms,json=onlineDurationMs,proto3" json:"online_duration_ms,omitempty"` - ValidMicDurationMs int64 `protobuf:"varint,2,opt,name=valid_mic_duration_ms,json=validMicDurationMs,proto3" json:"valid_mic_duration_ms,omitempty"` - ValidMicDays int64 `protobuf:"varint,3,opt,name=valid_mic_days,json=validMicDays,proto3" json:"valid_mic_days,omitempty"` - PrivateMessageSenders int64 `protobuf:"varint,4,opt,name=private_message_senders,json=privateMessageSenders,proto3" json:"private_message_senders,omitempty"` - NewFollowers int64 `protobuf:"varint,5,opt,name=new_followers,json=newFollowers,proto3" json:"new_followers,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OnlineDurationMs int64 `protobuf:"varint,1,opt,name=online_duration_ms,json=onlineDurationMs,proto3" json:"online_duration_ms,omitempty"` + ValidMicDurationMs int64 `protobuf:"varint,2,opt,name=valid_mic_duration_ms,json=validMicDurationMs,proto3" json:"valid_mic_duration_ms,omitempty"` + ValidMicDays int64 `protobuf:"varint,3,opt,name=valid_mic_days,json=validMicDays,proto3" json:"valid_mic_days,omitempty"` + PrivateMessageSenders int64 `protobuf:"varint,4,opt,name=private_message_senders,json=privateMessageSenders,proto3" json:"private_message_senders,omitempty"` + NewFollowers int64 `protobuf:"varint,5,opt,name=new_followers,json=newFollowers,proto3" json:"new_followers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostEngagementStats) Reset() { @@ -6742,14 +6645,13 @@ func (x *HostEngagementStats) GetNewFollowers() int64 { } type GetHostEngagementStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + HostUserId int64 `protobuf:"varint,2,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + StartAtMs int64 `protobuf:"varint,3,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,4,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - HostUserId int64 `protobuf:"varint,2,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - StartAtMs int64 `protobuf:"varint,3,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,4,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostEngagementStatsRequest) Reset() { @@ -6811,11 +6713,10 @@ func (x *GetHostEngagementStatsRequest) GetEndAtMs() int64 { } type GetHostEngagementStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stats *HostEngagementStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` unknownFields protoimpl.UnknownFields - - Stats *HostEngagementStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostEngagementStatsResponse) Reset() { @@ -6857,15 +6758,14 @@ func (x *GetHostEngagementStatsResponse) GetStats() *HostEngagementStats { // RecordPrivateMessageEvent 由经过腾讯回调鉴权的 gateway 写入私信事实;重复 event_id 必须幂等。 type RecordPrivateMessageEventRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - OccurredAtMs int64 `protobuf:"varint,5,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RecordPrivateMessageEventRequest) Reset() { @@ -6934,11 +6834,10 @@ func (x *RecordPrivateMessageEventRequest) GetOccurredAtMs() int64 { } type RecordPrivateMessageEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Created bool `protobuf:"varint,1,opt,name=created,proto3" json:"created,omitempty"` unknownFields protoimpl.UnknownFields - - Created bool `protobuf:"varint,1,opt,name=created,proto3" json:"created,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RecordPrivateMessageEventResponse) Reset() { @@ -6980,1474 +6879,647 @@ func (x *RecordPrivateMessageEventResponse) GetCreated() bool { var File_proto_user_v1_host_proto protoreflect.FileDescriptor -var file_proto_user_v1_host_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x03, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x32, 0x0a, - 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x17, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x29, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x64, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x42, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6a, - 0x6f, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, - 0x78, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x95, 0x02, 0x0a, 0x09, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa7, 0x02, 0x0a, 0x11, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x5f, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x61, 0x6e, 0x5f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x63, 0x61, - 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x22, 0xcc, 0x04, 0x0a, 0x12, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, - 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x63, 0x61, 0x6e, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, - 0x0a, 0x14, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0xca, 0x03, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x69, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x73, 0x5f, 0x62, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x42, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, - 0x5f, 0x62, 0x64, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x69, 0x73, 0x42, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, - 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, - 0x12, 0x13, 0x0a, 0x05, 0x62, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x62, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x38, 0x0a, 0x18, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x6c, 0x65, - 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x16, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6c, 0x65, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, - 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x69, 0x73, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, - 0xaa, 0x03, 0x0a, 0x10, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, - 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, - 0x6e, 0x64, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x99, 0x03, 0x0a, - 0x11, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x42, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x0e, 0x52, 0x6f, 0x6c, - 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, - 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x72, 0x5f, 0x62, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x42, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x64, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0x97, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4b, 0x0a, 0x16, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, - 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0xf4, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xe5, 0x01, 0x0a, 0x1f, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3d, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x3f, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x22, 0xe7, 0x01, 0x0a, 0x15, 0x4b, 0x69, 0x63, 0x6b, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, - 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x98, 0x01, 0x0a, 0x16, 0x4b, - 0x69, 0x63, 0x6b, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x3d, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x14, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x42, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x42, 0x44, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa3, - 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, - 0x44, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0x54, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x42, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x39, 0x0a, 0x0b, 0x62, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0a, - 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x1b, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x51, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, - 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x22, 0x7f, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x62, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, - 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x64, 0x5f, - 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, - 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, - 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x42, 0x44, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x0a, 0x62, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x62, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x31, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x5e, 0x0a, 0x1b, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x93, 0x01, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe6, - 0x01, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xc6, 0x02, 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, - 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, - 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x3f, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x0a, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x37, 0x0a, 0x0a, 0x62, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x22, 0x60, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x57, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0c, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0b, - 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x68, 0x0a, 0x1b, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xdf, 0x01, 0x0a, 0x1c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x68, 0x6f, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x5b, 0x0a, 0x11, 0x48, 0x6f, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x72, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x42, 0x44, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x4f, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x62, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x52, 0x09, 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x66, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x11, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x71, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x49, - 0x6e, 0x4d, 0x79, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x27, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x73, 0x49, 0x6e, 0x4d, 0x79, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x63, - 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x1a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, - 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, - 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xc2, 0x01, - 0x0a, 0x25, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x73, 0x0a, 0x26, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x43, - 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0b, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa2, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xa2, 0x01, 0x0a, - 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x21, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x22, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x22, 0x64, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, - 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x1a, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, - 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x22, 0x5f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x49, 0x64, 0x22, 0x42, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, - 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x53, 0x0a, - 0x1f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x22, 0xb1, 0x01, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x1d, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1b, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, - 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x54, 0x0a, 0x1a, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, - 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x5d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x22, 0x83, - 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x65, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x0a, 0x62, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, - 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x0f, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x22, 0x4b, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x62, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xf1, - 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x42, 0x44, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x22, 0x4e, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x42, 0x44, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x62, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x44, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x22, 0xad, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x41, 0x0a, 0x1b, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, - 0x62, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x17, 0x63, 0x61, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x88, - 0x01, 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x73, 0x22, 0x6c, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, - 0x0a, 0x13, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x11, 0x63, - 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x22, 0xc8, 0x02, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x1b, 0x63, 0x61, 0x6e, 0x5f, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, - 0x17, 0x63, 0x61, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, - 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x22, 0x6f, 0x0a, 0x1b, 0x53, - 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x11, 0x63, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xf5, 0x01, 0x0a, - 0x25, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xee, 0x01, 0x0a, 0x26, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, - 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x49, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, - 0x75, 0x62, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x05, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xc3, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, - 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6a, 0x6f, 0x69, 0x6e, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x48, 0x6f, - 0x73, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xc5, 0x01, 0x0a, 0x14, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, 0x61, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x22, 0xe9, 0x01, 0x0a, 0x19, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, - 0xcb, 0x01, 0x0a, 0x1a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, - 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x3d, 0x0a, - 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x0a, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0xbc, 0x01, - 0x0a, 0x12, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x44, 0x0a, 0x13, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xd8, 0x01, 0x0a, 0x16, 0x53, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xe8, - 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4a, 0x6f, 0x69, 0x6e, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6a, 0x6f, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x1c, 0x53, 0x65, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xfc, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0x4c, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x06, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xf9, 0x01, 0x0a, 0x13, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, - 0x67, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, - 0x12, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6d, 0x69, 0x63, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x4d, 0x69, 0x63, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6d, 0x69, 0x63, 0x5f, 0x64, 0x61, 0x79, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x69, 0x63, - 0x44, 0x61, 0x79, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x6e, 0x65, 0x77, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x73, 0x22, 0xad, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x67, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0x5a, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x67, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0xdf, 0x01, - 0x0a, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x63, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0x3d, 0x0a, 0x21, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x32, 0x8c, - 0x1b, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, - 0x17, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x4b, 0x69, 0x63, 0x6b, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x41, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x4b, 0x69, 0x63, 0x6b, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4b, 0x0a, 0x08, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x42, 0x44, 0x12, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0a, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x60, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, - 0x44, 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, - 0x44, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6f, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x44, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x44, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x78, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x54, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x72, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x6c, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, - 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, - 0x74, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x42, 0x44, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x44, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x44, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x90, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x4d, 0x79, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x4d, 0x79, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, - 0x49, 0x6e, 0x4d, 0x79, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x43, - 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x8d, 0x01, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x69, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x1a, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, - 0x75, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x62, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x69, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, - 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x17, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, - 0x74, 0x45, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, 0x0a, - 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc1, 0x09, - 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x44, 0x12, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x42, 0x44, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x44, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x44, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, - 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x1e, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x75, 0x62, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x41, 0x64, 0x64, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x54, 0x0a, 0x0b, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x21, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, - 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6f, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4a, 0x6f, 0x69, - 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4a, 0x6f, - 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x26, 0x5a, 0x24, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, - 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} +const file_proto_user_v1_host_proto_rawDesc = "" + + "\n" + + "\x18proto/user/v1/host.proto\x12\rhyapp.user.v1\x1a\x18proto/user/v1/user.proto\"\x91\x03\n" + + "\vHostProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12*\n" + + "\x11current_agency_id\x18\x04 \x01(\x03R\x0fcurrentAgencyId\x122\n" + + "\x15current_membership_id\x18\x05 \x01(\x03R\x13currentMembershipId\x12\x16\n" + + "\x06source\x18\x06 \x01(\tR\x06source\x124\n" + + "\x17first_became_host_at_ms\x18\a \x01(\x03R\x13firstBecameHostAtMs\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\x12>\n" + + "\x1ccurrent_agency_owner_user_id\x18\n" + + " \x01(\x03R\x18currentAgencyOwnerUserId\"\xa9\x03\n" + + "\x06Agency\x12\x1b\n" + + "\tagency_id\x18\x01 \x01(\x03R\bagencyId\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12)\n" + + "\x11parent_bd_user_id\x18\x04 \x01(\x03R\x0eparentBdUserId\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12!\n" + + "\fjoin_enabled\x18\a \x01(\bR\vjoinEnabled\x12\x1b\n" + + "\tmax_hosts\x18\b \x01(\x05R\bmaxHosts\x12+\n" + + "\x12created_by_user_id\x18\t \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\x12\x16\n" + + "\x06avatar\x18\f \x01(\tR\x06avatar\x12\x1d\n" + + "\n" + + "host_count\x18\r \x01(\x05R\thostCount\"\x95\x02\n" + + "\tBDProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x12\n" + + "\x04role\x18\x02 \x01(\tR\x04role\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x121\n" + + "\x15parent_leader_user_id\x18\x04 \x01(\x03R\x12parentLeaderUserId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12+\n" + + "\x12created_by_user_id\x18\x06 \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\a \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\b \x01(\x03R\vupdatedAtMs\"\xa7\x02\n" + + "\x11CoinSellerProfile\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status\x12.\n" + + "\x13merchant_asset_type\x18\x03 \x01(\tR\x11merchantAssetType\x12+\n" + + "\x12created_by_user_id\x18\x04 \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\x12<\n" + + "\x1bcan_manage_sub_coin_sellers\x18\a \x01(\bR\x17canManageSubCoinSellers\"\xcc\x04\n" + + "\x12CoinSellerListItem\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12&\n" + + "\x0fdisplay_user_id\x18\x02 \x01(\tR\rdisplayUserId\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x04 \x01(\tR\x06avatar\x12\x1d\n" + + "\n" + + "country_id\x18\x05 \x01(\x03R\tcountryId\x12!\n" + + "\fcountry_code\x18\x06 \x01(\tR\vcountryCode\x12!\n" + + "\fcountry_name\x18\a \x01(\tR\vcountryName\x120\n" + + "\x14country_display_name\x18\b \x01(\tR\x12countryDisplayName\x12\x1b\n" + + "\tregion_id\x18\t \x01(\x03R\bregionId\x12\x1f\n" + + "\vregion_code\x18\n" + + " \x01(\tR\n" + + "regionCode\x12\x1f\n" + + "\vregion_name\x18\v \x01(\tR\n" + + "regionName\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12.\n" + + "\x13merchant_asset_type\x18\r \x01(\tR\x11merchantAssetType\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\x12!\n" + + "\fcontact_info\x18\x0f \x01(\tR\vcontactInfo\x12<\n" + + "\x1bcan_manage_sub_coin_sellers\x18\x10 \x01(\bR\x17canManageSubCoinSellers\"\x8f\x02\n" + + "\x15CoinSellerSubRelation\x12\x1f\n" + + "\vrelation_id\x18\x01 \x01(\x03R\n" + + "relationId\x12$\n" + + "\x0eparent_user_id\x18\x02 \x01(\x03R\fparentUserId\x12\"\n" + + "\rchild_user_id\x18\x03 \x01(\x03R\vchildUserId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12+\n" + + "\x12created_by_user_id\x18\x05 \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x06 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xa9\x03\n" + + "\x18CoinSellerSubApplication\x12%\n" + + "\x0eapplication_id\x18\x01 \x01(\x03R\rapplicationId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12$\n" + + "\x0eparent_user_id\x18\x03 \x01(\x03R\fparentUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x1f\n" + + "\vrelation_id\x18\x06 \x01(\x03R\n" + + "relationId\x12/\n" + + "\x14reviewed_by_admin_id\x18\a \x01(\x03R\x11reviewedByAdminId\x12#\n" + + "\rreview_reason\x18\b \x01(\tR\freviewReason\x12$\n" + + "\x0ereviewed_at_ms\x18\t \x01(\x03R\freviewedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\"\xca\x03\n" + + "\x0fUserRoleSummary\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x17\n" + + "\ais_host\x18\x02 \x01(\bR\x06isHost\x12\x1b\n" + + "\tis_agency\x18\x03 \x01(\bR\bisAgency\x12\x13\n" + + "\x05is_bd\x18\x04 \x01(\bR\x04isBd\x12 \n" + + "\fis_bd_leader\x18\x05 \x01(\bR\n" + + "isBdLeader\x12$\n" + + "\x0eis_coin_seller\x18\x06 \x01(\bR\fisCoinSeller\x12\x1f\n" + + "\vhost_status\x18\a \x01(\tR\n" + + "hostStatus\x12\x1b\n" + + "\tagency_id\x18\b \x01(\x03R\bagencyId\x12\x13\n" + + "\x05bd_id\x18\t \x01(\x03R\x04bdId\x12\x1b\n" + + "\tbd_status\x18\n" + + " \x01(\tR\bbdStatus\x12,\n" + + "\x12coin_seller_status\x18\v \x01(\tR\x10coinSellerStatus\x128\n" + + "\x18pending_role_invitations\x18\f \x01(\x03R\x16pendingRoleInvitations\x12\x1d\n" + + "\n" + + "is_manager\x18\r \x01(\bR\tisManager\x12\x14\n" + + "\x05roles\x18\x0e \x03(\tR\x05roles\"\xaa\x03\n" + + "\x10AgencyMembership\x12#\n" + + "\rmembership_id\x18\x01 \x01(\x03R\fmembershipId\x12\x1b\n" + + "\tagency_id\x18\x02 \x01(\x03R\bagencyId\x12 \n" + + "\fhost_user_id\x18\x03 \x01(\x03R\n" + + "hostUserId\x12\x1b\n" + + "\tregion_id\x18\x04 \x01(\x03R\bregionId\x12'\n" + + "\x0fmembership_type\x18\x05 \x01(\tR\x0emembershipType\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12 \n" + + "\fjoined_at_ms\x18\a \x01(\x03R\n" + + "joinedAtMs\x12\x1e\n" + + "\vended_at_ms\x18\b \x01(\x03R\tendedAtMs\x12'\n" + + "\x10ended_by_user_id\x18\t \x01(\x03R\rendedByUserId\x12!\n" + + "\fended_reason\x18\n" + + " \x01(\tR\vendedReason\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\f \x01(\x03R\vupdatedAtMs\"\x99\x03\n" + + "\x11AgencyApplication\x12%\n" + + "\x0eapplication_id\x18\x01 \x01(\x03R\rapplicationId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12*\n" + + "\x11applicant_user_id\x18\x03 \x01(\x03R\x0fapplicantUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12-\n" + + "\x13reviewed_by_user_id\x18\a \x01(\x03R\x10reviewedByUserId\x12#\n" + + "\rreview_reason\x18\b \x01(\tR\freviewReason\x12$\n" + + "\x0ereviewed_at_ms\x18\t \x01(\x03R\freviewedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\"\xf4\x04\n" + + "\x0eRoleInvitation\x12#\n" + + "\rinvitation_id\x18\x01 \x01(\x03R\finvitationId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12'\n" + + "\x0finvitation_type\x18\x03 \x01(\tR\x0einvitationType\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12&\n" + + "\x0finviter_user_id\x18\x05 \x01(\x03R\rinviterUserId\x12+\n" + + "\x12inviter_bd_user_id\x18\x06 \x01(\x03R\x0finviterBdUserId\x12$\n" + + "\x0etarget_user_id\x18\a \x01(\x03R\ftargetUserId\x12\x1b\n" + + "\tregion_id\x18\b \x01(\x03R\bregionId\x12\x1f\n" + + "\vagency_name\x18\t \x01(\tR\n" + + "agencyName\x12)\n" + + "\x11parent_bd_user_id\x18\n" + + " \x01(\x03R\x0eparentBdUserId\x121\n" + + "\x15parent_leader_user_id\x18\v \x01(\x03R\x12parentLeaderUserId\x12/\n" + + "\x14processed_by_user_id\x18\f \x01(\x03R\x11processedByUserId\x12%\n" + + "\x0eprocess_reason\x18\r \x01(\tR\rprocessReason\x12&\n" + + "\x0fprocessed_at_ms\x18\x0e \x01(\x03R\rprocessedAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\"\x97\x01\n" + + "\x15SearchAgenciesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x18\n" + + "\akeyword\x18\x03 \x01(\tR\akeyword\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"K\n" + + "\x16SearchAgenciesResponse\x121\n" + + "\bagencies\x18\x01 \x03(\v2\x15.hyapp.user.v1.AgencyR\bagencies\"\x9b\x01\n" + + "\x14ApplyToAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\"[\n" + + "\x15ApplyToAgencyResponse\x12B\n" + + "\vapplication\x18\x01 \x01(\v2 .hyapp.user.v1.AgencyApplicationR\vapplication\"\xf4\x01\n" + + "\x1eReviewAgencyApplicationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12(\n" + + "\x10reviewer_user_id\x18\x03 \x01(\x03R\x0ereviewerUserId\x12%\n" + + "\x0eapplication_id\x18\x04 \x01(\x03R\rapplicationId\x12\x1a\n" + + "\bdecision\x18\x05 \x01(\tR\bdecision\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\xe5\x01\n" + + "\x1fReviewAgencyApplicationResponse\x12B\n" + + "\vapplication\x18\x01 \x01(\v2 .hyapp.user.v1.AgencyApplicationR\vapplication\x12=\n" + + "\fhost_profile\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\x12?\n" + + "\n" + + "membership\x18\x03 \x01(\v2\x1f.hyapp.user.v1.AgencyMembershipR\n" + + "membership\"\xe7\x01\n" + + "\x15KickAgencyHostRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12(\n" + + "\x10operator_user_id\x18\x03 \x01(\x03R\x0eoperatorUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12 \n" + + "\fhost_user_id\x18\x05 \x01(\x03R\n" + + "hostUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\x98\x01\n" + + "\x16KickAgencyHostResponse\x12?\n" + + "\n" + + "membership\x18\x01 \x01(\v2\x1f.hyapp.user.v1.AgencyMembershipR\n" + + "membership\x12=\n" + + "\fhost_profile\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\"\xd3\x01\n" + + "\x13InviteAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12&\n" + + "\x0finviter_user_id\x18\x03 \x01(\x03R\rinviterUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vagency_name\x18\x05 \x01(\tR\n" + + "agencyName\"U\n" + + "\x14InviteAgencyResponse\x12=\n" + + "\n" + + "invitation\x18\x01 \x01(\v2\x1d.hyapp.user.v1.RoleInvitationR\n" + + "invitation\"\xae\x01\n" + + "\x0fInviteBDRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12&\n" + + "\x0finviter_user_id\x18\x03 \x01(\x03R\rinviterUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\"Q\n" + + "\x10InviteBDResponse\x12=\n" + + "\n" + + "invitation\x18\x01 \x01(\v2\x1d.hyapp.user.v1.RoleInvitationR\n" + + "invitation\"\xb0\x01\n" + + "\x11InviteHostRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12&\n" + + "\x0finviter_user_id\x18\x03 \x01(\x03R\rinviterUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\"S\n" + + "\x12InviteHostResponse\x12=\n" + + "\n" + + "invitation\x18\x01 \x01(\v2\x1d.hyapp.user.v1.RoleInvitationR\n" + + "invitation\"\xa3\x01\n" + + "\x16ListBDLeaderBDsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eleader_user_id\x18\x02 \x01(\x03R\fleaderUserId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"T\n" + + "\x17ListBDLeaderBDsResponse\x129\n" + + "\vbd_profiles\x18\x01 \x03(\v2\x18.hyapp.user.v1.BDProfileR\n" + + "bdProfiles\"\xa8\x01\n" + + "\x1bListBDLeaderAgenciesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eleader_user_id\x18\x02 \x01(\x03R\fleaderUserId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"Q\n" + + "\x1cListBDLeaderAgenciesResponse\x121\n" + + "\bagencies\x18\x01 \x03(\v2\x15.hyapp.user.v1.AgencyR\bagencies\"\x95\x01\n" + + "\x1eListManagerTeamAgenciesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12&\n" + + "\x0fmanager_user_id\x18\x02 \x01(\x03R\rmanagerUserId\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\x05R\bpageSize\"\x7f\n" + + "\x11ManagerTeamAgency\x12\x1b\n" + + "\tagency_id\x18\x01 \x01(\x03R\bagencyId\x12\"\n" + + "\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\x12)\n" + + "\x11parent_bd_user_id\x18\x03 \x01(\x03R\x0eparentBdUserId\"\xc4\x01\n" + + "\x1fListManagerTeamAgenciesResponse\x12<\n" + + "\bagencies\x18\x01 \x03(\v2 .hyapp.user.v1.ManagerTeamAgencyR\bagencies\x12(\n" + + "\x10total_bd_leaders\x18\x02 \x01(\x05R\x0etotalBdLeaders\x12\x1b\n" + + "\ttotal_bds\x18\x03 \x01(\x05R\btotalBds\x12\x1c\n" + + "\ttruncated\x18\x04 \x01(\bR\ttruncated\"\x9a\x01\n" + + "\x15ListBDAgenciesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1c\n" + + "\n" + + "bd_user_id\x18\x02 \x01(\x03R\bbdUserId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"K\n" + + "\x16ListBDAgenciesResponse\x121\n" + + "\bagencies\x18\x01 \x03(\v2\x15.hyapp.user.v1.AgencyR\bagencies\"\xa7\x01\n" + + "\x1aListRoleInvitationsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"^\n" + + "\x1bListRoleInvitationsResponse\x12?\n" + + "\vinvitations\x18\x01 \x03(\v2\x1d.hyapp.user.v1.RoleInvitationR\vinvitations\"\x93\x01\n" + + "\x18GetRoleInvitationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\"\n" + + "\ractor_user_id\x18\x02 \x01(\x03R\vactorUserId\x12#\n" + + "\rinvitation_id\x18\x03 \x01(\x03R\finvitationId\"Z\n" + + "\x19GetRoleInvitationResponse\x12=\n" + + "\n" + + "invitation\x18\x01 \x01(\v2\x1d.hyapp.user.v1.RoleInvitationR\n" + + "invitation\"\xe6\x01\n" + + "\x1cProcessRoleInvitationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\ractor_user_id\x18\x03 \x01(\x03R\vactorUserId\x12#\n" + + "\rinvitation_id\x18\x04 \x01(\x03R\finvitationId\x12\x16\n" + + "\x06action\x18\x05 \x01(\tR\x06action\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\xc6\x02\n" + + "\x1dProcessRoleInvitationResponse\x12=\n" + + "\n" + + "invitation\x18\x01 \x01(\v2\x1d.hyapp.user.v1.RoleInvitationR\n" + + "invitation\x12=\n" + + "\fhost_profile\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\x12-\n" + + "\x06agency\x18\x03 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\x12?\n" + + "\n" + + "membership\x18\x04 \x01(\v2\x1f.hyapp.user.v1.AgencyMembershipR\n" + + "membership\x127\n" + + "\n" + + "bd_profile\x18\x05 \x01(\v2\x18.hyapp.user.v1.BDProfileR\tbdProfile\"`\n" + + "\x15GetHostProfileRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"W\n" + + "\x16GetHostProfileResponse\x12=\n" + + "\fhost_profile\x18\x01 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\"h\n" + + "\x1bBatchGetHostProfilesRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x19\n" + + "\buser_ids\x18\x02 \x03(\x03R\auserIds\"\xdf\x01\n" + + "\x1cBatchGetHostProfilesResponse\x12b\n" + + "\rhost_profiles\x18\x01 \x03(\v2=.hyapp.user.v1.BatchGetHostProfilesResponse.HostProfilesEntryR\fhostProfiles\x1a[\n" + + "\x11HostProfilesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\x03R\x03key\x120\n" + + "\x05value\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\x05value:\x028\x01\"r\n" + + "\x13GetBDProfileRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x12\n" + + "\x04role\x18\x03 \x01(\tR\x04role\"O\n" + + "\x14GetBDProfileResponse\x127\n" + + "\n" + + "bd_profile\x18\x01 \x01(\v2\x18.hyapp.user.v1.BDProfileR\tbdProfile\"f\n" + + "\x1bGetCoinSellerProfileRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"p\n" + + "\x1cGetCoinSellerProfileResponse\x12P\n" + + "\x13coin_seller_profile\x18\x01 \x01(\v2 .hyapp.user.v1.CoinSellerProfileR\x11coinSellerProfile\"q\n" + + "&ListActiveCoinSellersInMyRegionRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"o\n" + + "'ListActiveCoinSellersInMyRegionResponse\x12D\n" + + "\fcoin_sellers\x18\x01 \x03(\v2!.hyapp.user.v1.CoinSellerListItemR\vcoinSellers\"\xb5\x01\n" + + "\x1aCreateSubCoinSellerRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12$\n" + + "\x0eparent_user_id\x18\x03 \x01(\x03R\fparentUserId\x12\"\n" + + "\rchild_user_id\x18\x04 \x01(\x03R\vchildUserId\"\x98\x01\n" + + "\x1bCreateSubCoinSellerResponse\x12@\n" + + "\brelation\x18\x01 \x01(\v2$.hyapp.user.v1.CoinSellerSubRelationR\brelation\x127\n" + + "\x05child\x18\x02 \x01(\v2!.hyapp.user.v1.CoinSellerListItemR\x05child\"\xc2\x01\n" + + "%SubmitSubCoinSellerApplicationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12$\n" + + "\x0eparent_user_id\x18\x03 \x01(\x03R\fparentUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\"s\n" + + "&SubmitSubCoinSellerApplicationResponse\x12I\n" + + "\vapplication\x18\x01 \x01(\v2'.hyapp.user.v1.CoinSellerSubApplicationR\vapplication\"\xa2\x01\n" + + "\x19ListSubCoinSellersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eparent_user_id\x18\x02 \x01(\x03R\fparentUserId\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"\xa2\x01\n" + + "\x1aListSubCoinSellersResponse\x12=\n" + + "\bchildren\x18\x01 \x03(\v2!.hyapp.user.v1.CoinSellerListItemR\bchildren\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"\x9d\x01\n" + + "!CheckCoinSellerSubRelationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12$\n" + + "\x0eparent_user_id\x18\x02 \x01(\x03R\fparentUserId\x12\"\n" + + "\rchild_user_id\x18\x03 \x01(\x03R\vchildUserId\"\x8f\x01\n" + + "\"CheckCoinSellerSubRelationResponse\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\x127\n" + + "\x05child\x18\x03 \x01(\v2!.hyapp.user.v1.CoinSellerListItemR\x05child\"d\n" + + "\x19GetUserRoleSummaryRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"V\n" + + "\x1aGetUserRoleSummaryResponse\x128\n" + + "\asummary\x18\x01 \x01(\v2\x1e.hyapp.user.v1.UserRoleSummaryR\asummary\"_\n" + + "\x10GetAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tagency_id\x18\x02 \x01(\x03R\bagencyId\"B\n" + + "\x11GetAgencyResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\x94\x01\n" + + "\x1eCheckBusinessCapabilityRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\"\n" + + "\ractor_user_id\x18\x02 \x01(\x03R\vactorUserId\x12\x1e\n" + + "\n" + + "capability\x18\x03 \x01(\tR\n" + + "capability\"S\n" + + "\x1fCheckBusinessCapabilityResponse\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"\xb1\x01\n" + + "\x0fRoleScopePolicy\x12\x14\n" + + "\x05scene\x18\x01 \x01(\tR\x05scene\x12\x1d\n" + + "\n" + + "base_scope\x18\x02 \x01(\tR\tbaseScope\x12B\n" + + "\x1dregion_expansion_configurable\x18\x03 \x01(\bR\x1bregionExpansionConfigurable\x12%\n" + + "\x0eexpanded_scope\x18\x04 \x01(\tR\rexpandedScope\"a\n" + + "\x19GetRoleScopePolicyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x14\n" + + "\x05scene\x18\x02 \x01(\tR\x05scene\"T\n" + + "\x1aGetRoleScopePolicyResponse\x126\n" + + "\x06policy\x18\x01 \x01(\v2\x1e.hyapp.user.v1.RoleScopePolicyR\x06policy\"~\n" + + "\x17GetAgencyMembersRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tagency_id\x18\x02 \x01(\x03R\bagencyId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\"]\n" + + "\x18GetAgencyMembersResponse\x12A\n" + + "\vmemberships\x18\x01 \x03(\v2\x1f.hyapp.user.v1.AgencyMembershipR\vmemberships\"\x83\x01\n" + + "\x1cGetAgencyApplicationsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1b\n" + + "\tagency_id\x18\x02 \x01(\x03R\bagencyId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\"e\n" + + "\x1dGetAgencyApplicationsResponse\x12D\n" + + "\fapplications\x18\x01 \x03(\v2 .hyapp.user.v1.AgencyApplicationR\fapplications\"\xc8\x01\n" + + "\x15CreateBDLeaderRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\"Q\n" + + "\x16CreateBDLeaderResponse\x127\n" + + "\n" + + "bd_profile\x18\x01 \x01(\v2\x18.hyapp.user.v1.BDProfileR\tbdProfile\"\xf5\x01\n" + + "\x0fCreateBDRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x121\n" + + "\x15parent_leader_user_id\x18\x05 \x01(\x03R\x12parentLeaderUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"K\n" + + "\x10CreateBDResponse\x127\n" + + "\n" + + "bd_profile\x18\x01 \x01(\v2\x18.hyapp.user.v1.BDProfileR\tbdProfile\"\xf1\x01\n" + + "\x12SetBDStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\x12\x12\n" + + "\x04role\x18\a \x01(\tR\x04role\"N\n" + + "\x13SetBDStatusResponse\x127\n" + + "\n" + + "bd_profile\x18\x01 \x01(\v2\x18.hyapp.user.v1.BDProfileR\tbdProfile\"\xad\x02\n" + + "\x17CreateCoinSellerRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12A\n" + + "\x1bcan_manage_sub_coin_sellers\x18\x06 \x01(\bH\x00R\x17canManageSubCoinSellers\x88\x01\x01B\x1e\n" + + "\x1c_can_manage_sub_coin_sellers\"l\n" + + "\x18CreateCoinSellerResponse\x12P\n" + + "\x13coin_seller_profile\x18\x01 \x01(\v2 .hyapp.user.v1.CoinSellerProfileR\x11coinSellerProfile\"\xc8\x02\n" + + "\x1aSetCoinSellerStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\x12A\n" + + "\x1bcan_manage_sub_coin_sellers\x18\a \x01(\bH\x00R\x17canManageSubCoinSellers\x88\x01\x01B\x1e\n" + + "\x1c_can_manage_sub_coin_sellers\"o\n" + + "\x1bSetCoinSellerStatusResponse\x12P\n" + + "\x13coin_seller_profile\x18\x01 \x01(\v2 .hyapp.user.v1.CoinSellerProfileR\x11coinSellerProfile\"\xf5\x01\n" + + "%ReviewSubCoinSellerApplicationRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12%\n" + + "\x0eapplication_id\x18\x04 \x01(\x03R\rapplicationId\x12\x1a\n" + + "\bdecision\x18\x05 \x01(\tR\bdecision\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\xee\x01\n" + + "&ReviewSubCoinSellerApplicationResponse\x12I\n" + + "\vapplication\x18\x01 \x01(\v2'.hyapp.user.v1.CoinSellerSubApplicationR\vapplication\x12@\n" + + "\brelation\x18\x02 \x01(\v2$.hyapp.user.v1.CoinSellerSubRelationR\brelation\x127\n" + + "\x05child\x18\x03 \x01(\v2!.hyapp.user.v1.CoinSellerListItemR\x05child\"\xc3\x02\n" + + "\x13CreateAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\"\n" + + "\rowner_user_id\x18\x04 \x01(\x03R\vownerUserId\x12)\n" + + "\x11parent_bd_user_id\x18\x05 \x01(\x03R\x0eparentBdUserId\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12!\n" + + "\fjoin_enabled\x18\a \x01(\bR\vjoinEnabled\x12\x1b\n" + + "\tmax_hosts\x18\b \x01(\x05R\bmaxHosts\x12\x16\n" + + "\x06reason\x18\t \x01(\tR\x06reason\"\xc5\x01\n" + + "\x14CreateAgencyResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\x12=\n" + + "\fhost_profile\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\x12?\n" + + "\n" + + "membership\x18\x03 \x01(\v2\x1f.hyapp.user.v1.AgencyMembershipR\n" + + "membership\"\xe9\x01\n" + + "\x19AdminAddAgencyHostRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12$\n" + + "\x0etarget_user_id\x18\x05 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"\xcb\x01\n" + + "\x1aAdminAddAgencyHostResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\x12=\n" + + "\fhost_profile\x18\x02 \x01(\v2\x1a.hyapp.user.v1.HostProfileR\vhostProfile\x12?\n" + + "\n" + + "membership\x18\x03 \x01(\v2\x1f.hyapp.user.v1.AgencyMembershipR\n" + + "membership\"\xbc\x01\n" + + "\x12CloseAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\"D\n" + + "\x13CloseAgencyResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\xbd\x01\n" + + "\x13DeleteAgencyRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\"E\n" + + "\x14DeleteAgencyResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\xd8\x01\n" + + "\x16SetAgencyStatusRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"H\n" + + "\x17SetAgencyStatusResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\xe8\x01\n" + + "\x1bSetAgencyJoinEnabledRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12\"\n" + + "\radmin_user_id\x18\x03 \x01(\x03R\vadminUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12!\n" + + "\fjoin_enabled\x18\x05 \x01(\bR\vjoinEnabled\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\"M\n" + + "\x1cSetAgencyJoinEnabledResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\xfc\x01\n" + + "\x1aUpdateAgencyProfileRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12(\n" + + "\x10operator_user_id\x18\x03 \x01(\x03R\x0eoperatorUserId\x12\x1b\n" + + "\tagency_id\x18\x04 \x01(\x03R\bagencyId\x12\x17\n" + + "\x04name\x18\x05 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x1b\n" + + "\x06avatar\x18\x06 \x01(\tH\x01R\x06avatar\x88\x01\x01B\a\n" + + "\x05_nameB\t\n" + + "\a_avatar\"L\n" + + "\x1bUpdateAgencyProfileResponse\x12-\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency\"\xf9\x01\n" + + "\x13HostEngagementStats\x12,\n" + + "\x12online_duration_ms\x18\x01 \x01(\x03R\x10onlineDurationMs\x121\n" + + "\x15valid_mic_duration_ms\x18\x02 \x01(\x03R\x12validMicDurationMs\x12$\n" + + "\x0evalid_mic_days\x18\x03 \x01(\x03R\fvalidMicDays\x126\n" + + "\x17private_message_senders\x18\x04 \x01(\x03R\x15privateMessageSenders\x12#\n" + + "\rnew_followers\x18\x05 \x01(\x03R\fnewFollowers\"\xad\x01\n" + + "\x1dGetHostEngagementStatsRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12 \n" + + "\fhost_user_id\x18\x02 \x01(\x03R\n" + + "hostUserId\x12\x1e\n" + + "\vstart_at_ms\x18\x03 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x04 \x01(\x03R\aendAtMs\"Z\n" + + "\x1eGetHostEngagementStatsResponse\x128\n" + + "\x05stats\x18\x01 \x01(\v2\".hyapp.user.v1.HostEngagementStatsR\x05stats\"\xdf\x01\n" + + " RecordPrivateMessageEventRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x19\n" + + "\bevent_id\x18\x02 \x01(\tR\aeventId\x12$\n" + + "\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12$\n" + + "\x0eoccurred_at_ms\x18\x05 \x01(\x03R\foccurredAtMs\"=\n" + + "!RecordPrivateMessageEventResponse\x12\x18\n" + + "\acreated\x18\x01 \x01(\bR\acreated2\x8c\x1b\n" + + "\x0fUserHostService\x12]\n" + + "\x0eSearchAgencies\x12$.hyapp.user.v1.SearchAgenciesRequest\x1a%.hyapp.user.v1.SearchAgenciesResponse\x12Z\n" + + "\rApplyToAgency\x12#.hyapp.user.v1.ApplyToAgencyRequest\x1a$.hyapp.user.v1.ApplyToAgencyResponse\x12x\n" + + "\x17ReviewAgencyApplication\x12-.hyapp.user.v1.ReviewAgencyApplicationRequest\x1a..hyapp.user.v1.ReviewAgencyApplicationResponse\x12]\n" + + "\x0eKickAgencyHost\x12$.hyapp.user.v1.KickAgencyHostRequest\x1a%.hyapp.user.v1.KickAgencyHostResponse\x12W\n" + + "\fInviteAgency\x12\".hyapp.user.v1.InviteAgencyRequest\x1a#.hyapp.user.v1.InviteAgencyResponse\x12K\n" + + "\bInviteBD\x12\x1e.hyapp.user.v1.InviteBDRequest\x1a\x1f.hyapp.user.v1.InviteBDResponse\x12Q\n" + + "\n" + + "InviteHost\x12 .hyapp.user.v1.InviteHostRequest\x1a!.hyapp.user.v1.InviteHostResponse\x12`\n" + + "\x0fListBDLeaderBDs\x12%.hyapp.user.v1.ListBDLeaderBDsRequest\x1a&.hyapp.user.v1.ListBDLeaderBDsResponse\x12o\n" + + "\x14ListBDLeaderAgencies\x12*.hyapp.user.v1.ListBDLeaderAgenciesRequest\x1a+.hyapp.user.v1.ListBDLeaderAgenciesResponse\x12]\n" + + "\x0eListBDAgencies\x12$.hyapp.user.v1.ListBDAgenciesRequest\x1a%.hyapp.user.v1.ListBDAgenciesResponse\x12x\n" + + "\x17ListManagerTeamAgencies\x12-.hyapp.user.v1.ListManagerTeamAgenciesRequest\x1a..hyapp.user.v1.ListManagerTeamAgenciesResponse\x12l\n" + + "\x13ListRoleInvitations\x12).hyapp.user.v1.ListRoleInvitationsRequest\x1a*.hyapp.user.v1.ListRoleInvitationsResponse\x12f\n" + + "\x11GetRoleInvitation\x12'.hyapp.user.v1.GetRoleInvitationRequest\x1a(.hyapp.user.v1.GetRoleInvitationResponse\x12r\n" + + "\x15ProcessRoleInvitation\x12+.hyapp.user.v1.ProcessRoleInvitationRequest\x1a,.hyapp.user.v1.ProcessRoleInvitationResponse\x12]\n" + + "\x0eGetHostProfile\x12$.hyapp.user.v1.GetHostProfileRequest\x1a%.hyapp.user.v1.GetHostProfileResponse\x12o\n" + + "\x14BatchGetHostProfiles\x12*.hyapp.user.v1.BatchGetHostProfilesRequest\x1a+.hyapp.user.v1.BatchGetHostProfilesResponse\x12W\n" + + "\fGetBDProfile\x12\".hyapp.user.v1.GetBDProfileRequest\x1a#.hyapp.user.v1.GetBDProfileResponse\x12o\n" + + "\x14GetCoinSellerProfile\x12*.hyapp.user.v1.GetCoinSellerProfileRequest\x1a+.hyapp.user.v1.GetCoinSellerProfileResponse\x12\x90\x01\n" + + "\x1fListActiveCoinSellersInMyRegion\x125.hyapp.user.v1.ListActiveCoinSellersInMyRegionRequest\x1a6.hyapp.user.v1.ListActiveCoinSellersInMyRegionResponse\x12l\n" + + "\x13CreateSubCoinSeller\x12).hyapp.user.v1.CreateSubCoinSellerRequest\x1a*.hyapp.user.v1.CreateSubCoinSellerResponse\x12\x8d\x01\n" + + "\x1eSubmitSubCoinSellerApplication\x124.hyapp.user.v1.SubmitSubCoinSellerApplicationRequest\x1a5.hyapp.user.v1.SubmitSubCoinSellerApplicationResponse\x12i\n" + + "\x12ListSubCoinSellers\x12(.hyapp.user.v1.ListSubCoinSellersRequest\x1a).hyapp.user.v1.ListSubCoinSellersResponse\x12\x81\x01\n" + + "\x1aCheckCoinSellerSubRelation\x120.hyapp.user.v1.CheckCoinSellerSubRelationRequest\x1a1.hyapp.user.v1.CheckCoinSellerSubRelationResponse\x12i\n" + + "\x12GetUserRoleSummary\x12(.hyapp.user.v1.GetUserRoleSummaryRequest\x1a).hyapp.user.v1.GetUserRoleSummaryResponse\x12N\n" + + "\tGetAgency\x12\x1f.hyapp.user.v1.GetAgencyRequest\x1a .hyapp.user.v1.GetAgencyResponse\x12x\n" + + "\x17CheckBusinessCapability\x12-.hyapp.user.v1.CheckBusinessCapabilityRequest\x1a..hyapp.user.v1.CheckBusinessCapabilityResponse\x12i\n" + + "\x12GetRoleScopePolicy\x12(.hyapp.user.v1.GetRoleScopePolicyRequest\x1a).hyapp.user.v1.GetRoleScopePolicyResponse\x12c\n" + + "\x10GetAgencyMembers\x12&.hyapp.user.v1.GetAgencyMembersRequest\x1a'.hyapp.user.v1.GetAgencyMembersResponse\x12r\n" + + "\x15GetAgencyApplications\x12+.hyapp.user.v1.GetAgencyApplicationsRequest\x1a,.hyapp.user.v1.GetAgencyApplicationsResponse\x12l\n" + + "\x13UpdateAgencyProfile\x12).hyapp.user.v1.UpdateAgencyProfileRequest\x1a*.hyapp.user.v1.UpdateAgencyProfileResponse\x12u\n" + + "\x16GetHostEngagementStats\x12,.hyapp.user.v1.GetHostEngagementStatsRequest\x1a-.hyapp.user.v1.GetHostEngagementStatsResponse\x12~\n" + + "\x19RecordPrivateMessageEvent\x12/.hyapp.user.v1.RecordPrivateMessageEventRequest\x1a0.hyapp.user.v1.RecordPrivateMessageEventResponse2\xc1\t\n" + + "\x14UserHostAdminService\x12]\n" + + "\x0eCreateBDLeader\x12$.hyapp.user.v1.CreateBDLeaderRequest\x1a%.hyapp.user.v1.CreateBDLeaderResponse\x12K\n" + + "\bCreateBD\x12\x1e.hyapp.user.v1.CreateBDRequest\x1a\x1f.hyapp.user.v1.CreateBDResponse\x12T\n" + + "\vSetBDStatus\x12!.hyapp.user.v1.SetBDStatusRequest\x1a\".hyapp.user.v1.SetBDStatusResponse\x12c\n" + + "\x10CreateCoinSeller\x12&.hyapp.user.v1.CreateCoinSellerRequest\x1a'.hyapp.user.v1.CreateCoinSellerResponse\x12l\n" + + "\x13SetCoinSellerStatus\x12).hyapp.user.v1.SetCoinSellerStatusRequest\x1a*.hyapp.user.v1.SetCoinSellerStatusResponse\x12\x8d\x01\n" + + "\x1eReviewSubCoinSellerApplication\x124.hyapp.user.v1.ReviewSubCoinSellerApplicationRequest\x1a5.hyapp.user.v1.ReviewSubCoinSellerApplicationResponse\x12W\n" + + "\fCreateAgency\x12\".hyapp.user.v1.CreateAgencyRequest\x1a#.hyapp.user.v1.CreateAgencyResponse\x12i\n" + + "\x12AdminAddAgencyHost\x12(.hyapp.user.v1.AdminAddAgencyHostRequest\x1a).hyapp.user.v1.AdminAddAgencyHostResponse\x12T\n" + + "\vCloseAgency\x12!.hyapp.user.v1.CloseAgencyRequest\x1a\".hyapp.user.v1.CloseAgencyResponse\x12W\n" + + "\fDeleteAgency\x12\".hyapp.user.v1.DeleteAgencyRequest\x1a#.hyapp.user.v1.DeleteAgencyResponse\x12`\n" + + "\x0fSetAgencyStatus\x12%.hyapp.user.v1.SetAgencyStatusRequest\x1a&.hyapp.user.v1.SetAgencyStatusResponse\x12o\n" + + "\x14SetAgencyJoinEnabled\x12*.hyapp.user.v1.SetAgencyJoinEnabledRequest\x1a+.hyapp.user.v1.SetAgencyJoinEnabledResponseB&Z$hyapp.local/api/proto/user/v1;userv1b\x06proto3" var ( file_proto_user_v1_host_proto_rawDescOnce sync.Once - file_proto_user_v1_host_proto_rawDescData = file_proto_user_v1_host_proto_rawDesc + file_proto_user_v1_host_proto_rawDescData []byte ) func file_proto_user_v1_host_proto_rawDescGZIP() []byte { file_proto_user_v1_host_proto_rawDescOnce.Do(func() { - file_proto_user_v1_host_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_user_v1_host_proto_rawDescData) + file_proto_user_v1_host_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_user_v1_host_proto_rawDesc), len(file_proto_user_v1_host_proto_rawDesc))) }) return file_proto_user_v1_host_proto_rawDescData } @@ -8769,7 +7841,7 @@ func file_proto_user_v1_host_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_user_v1_host_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_user_v1_host_proto_rawDesc), len(file_proto_user_v1_host_proto_rawDesc)), NumEnums: 0, NumMessages: 103, NumExtensions: 0, @@ -8780,7 +7852,6 @@ func file_proto_user_v1_host_proto_init() { MessageInfos: file_proto_user_v1_host_proto_msgTypes, }.Build() File_proto_user_v1_host_proto = out.File - file_proto_user_v1_host_proto_rawDesc = nil file_proto_user_v1_host_proto_goTypes = nil file_proto_user_v1_host_proto_depIdxs = nil } diff --git a/api/proto/user/v1/host_grpc.pb.go b/api/proto/user/v1/host_grpc.pb.go index 0eabb231..999c6526 100644 --- a/api/proto/user/v1/host_grpc.pb.go +++ b/api/proto/user/v1/host_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/user/v1/host.proto package userv1 @@ -472,100 +472,100 @@ type UserHostServiceServer interface { type UnimplementedUserHostServiceServer struct{} func (UnimplementedUserHostServiceServer) SearchAgencies(context.Context, *SearchAgenciesRequest) (*SearchAgenciesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SearchAgencies not implemented") + return nil, status.Error(codes.Unimplemented, "method SearchAgencies not implemented") } func (UnimplementedUserHostServiceServer) ApplyToAgency(context.Context, *ApplyToAgencyRequest) (*ApplyToAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyToAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyToAgency not implemented") } func (UnimplementedUserHostServiceServer) ReviewAgencyApplication(context.Context, *ReviewAgencyApplicationRequest) (*ReviewAgencyApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReviewAgencyApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method ReviewAgencyApplication not implemented") } func (UnimplementedUserHostServiceServer) KickAgencyHost(context.Context, *KickAgencyHostRequest) (*KickAgencyHostResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method KickAgencyHost not implemented") + return nil, status.Error(codes.Unimplemented, "method KickAgencyHost not implemented") } func (UnimplementedUserHostServiceServer) InviteAgency(context.Context, *InviteAgencyRequest) (*InviteAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InviteAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method InviteAgency not implemented") } func (UnimplementedUserHostServiceServer) InviteBD(context.Context, *InviteBDRequest) (*InviteBDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InviteBD not implemented") + return nil, status.Error(codes.Unimplemented, "method InviteBD not implemented") } func (UnimplementedUserHostServiceServer) InviteHost(context.Context, *InviteHostRequest) (*InviteHostResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InviteHost not implemented") + return nil, status.Error(codes.Unimplemented, "method InviteHost not implemented") } func (UnimplementedUserHostServiceServer) ListBDLeaderBDs(context.Context, *ListBDLeaderBDsRequest) (*ListBDLeaderBDsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListBDLeaderBDs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListBDLeaderBDs not implemented") } func (UnimplementedUserHostServiceServer) ListBDLeaderAgencies(context.Context, *ListBDLeaderAgenciesRequest) (*ListBDLeaderAgenciesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListBDLeaderAgencies not implemented") + return nil, status.Error(codes.Unimplemented, "method ListBDLeaderAgencies not implemented") } func (UnimplementedUserHostServiceServer) ListBDAgencies(context.Context, *ListBDAgenciesRequest) (*ListBDAgenciesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListBDAgencies not implemented") + return nil, status.Error(codes.Unimplemented, "method ListBDAgencies not implemented") } func (UnimplementedUserHostServiceServer) ListManagerTeamAgencies(context.Context, *ListManagerTeamAgenciesRequest) (*ListManagerTeamAgenciesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListManagerTeamAgencies not implemented") + return nil, status.Error(codes.Unimplemented, "method ListManagerTeamAgencies not implemented") } func (UnimplementedUserHostServiceServer) ListRoleInvitations(context.Context, *ListRoleInvitationsRequest) (*ListRoleInvitationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRoleInvitations not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRoleInvitations not implemented") } func (UnimplementedUserHostServiceServer) GetRoleInvitation(context.Context, *GetRoleInvitationRequest) (*GetRoleInvitationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoleInvitation not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoleInvitation not implemented") } func (UnimplementedUserHostServiceServer) ProcessRoleInvitation(context.Context, *ProcessRoleInvitationRequest) (*ProcessRoleInvitationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessRoleInvitation not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessRoleInvitation not implemented") } func (UnimplementedUserHostServiceServer) GetHostProfile(context.Context, *GetHostProfileRequest) (*GetHostProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHostProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method GetHostProfile not implemented") } func (UnimplementedUserHostServiceServer) BatchGetHostProfiles(context.Context, *BatchGetHostProfilesRequest) (*BatchGetHostProfilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetHostProfiles not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetHostProfiles not implemented") } func (UnimplementedUserHostServiceServer) GetBDProfile(context.Context, *GetBDProfileRequest) (*GetBDProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBDProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method GetBDProfile not implemented") } func (UnimplementedUserHostServiceServer) GetCoinSellerProfile(context.Context, *GetCoinSellerProfileRequest) (*GetCoinSellerProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCoinSellerProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method GetCoinSellerProfile not implemented") } func (UnimplementedUserHostServiceServer) ListActiveCoinSellersInMyRegion(context.Context, *ListActiveCoinSellersInMyRegionRequest) (*ListActiveCoinSellersInMyRegionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListActiveCoinSellersInMyRegion not implemented") + return nil, status.Error(codes.Unimplemented, "method ListActiveCoinSellersInMyRegion not implemented") } func (UnimplementedUserHostServiceServer) CreateSubCoinSeller(context.Context, *CreateSubCoinSellerRequest) (*CreateSubCoinSellerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateSubCoinSeller not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateSubCoinSeller not implemented") } func (UnimplementedUserHostServiceServer) SubmitSubCoinSellerApplication(context.Context, *SubmitSubCoinSellerApplicationRequest) (*SubmitSubCoinSellerApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitSubCoinSellerApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method SubmitSubCoinSellerApplication not implemented") } func (UnimplementedUserHostServiceServer) ListSubCoinSellers(context.Context, *ListSubCoinSellersRequest) (*ListSubCoinSellersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSubCoinSellers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListSubCoinSellers not implemented") } func (UnimplementedUserHostServiceServer) CheckCoinSellerSubRelation(context.Context, *CheckCoinSellerSubRelationRequest) (*CheckCoinSellerSubRelationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckCoinSellerSubRelation not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckCoinSellerSubRelation not implemented") } func (UnimplementedUserHostServiceServer) GetUserRoleSummary(context.Context, *GetUserRoleSummaryRequest) (*GetUserRoleSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserRoleSummary not implemented") + return nil, status.Error(codes.Unimplemented, "method GetUserRoleSummary not implemented") } func (UnimplementedUserHostServiceServer) GetAgency(context.Context, *GetAgencyRequest) (*GetAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgency not implemented") } func (UnimplementedUserHostServiceServer) CheckBusinessCapability(context.Context, *CheckBusinessCapabilityRequest) (*CheckBusinessCapabilityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckBusinessCapability not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckBusinessCapability not implemented") } func (UnimplementedUserHostServiceServer) GetRoleScopePolicy(context.Context, *GetRoleScopePolicyRequest) (*GetRoleScopePolicyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRoleScopePolicy not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRoleScopePolicy not implemented") } func (UnimplementedUserHostServiceServer) GetAgencyMembers(context.Context, *GetAgencyMembersRequest) (*GetAgencyMembersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyMembers not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyMembers not implemented") } func (UnimplementedUserHostServiceServer) GetAgencyApplications(context.Context, *GetAgencyApplicationsRequest) (*GetAgencyApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyApplications not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyApplications not implemented") } func (UnimplementedUserHostServiceServer) UpdateAgencyProfile(context.Context, *UpdateAgencyProfileRequest) (*UpdateAgencyProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateAgencyProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateAgencyProfile not implemented") } func (UnimplementedUserHostServiceServer) GetHostEngagementStats(context.Context, *GetHostEngagementStatsRequest) (*GetHostEngagementStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHostEngagementStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetHostEngagementStats not implemented") } func (UnimplementedUserHostServiceServer) RecordPrivateMessageEvent(context.Context, *RecordPrivateMessageEventRequest) (*RecordPrivateMessageEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecordPrivateMessageEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method RecordPrivateMessageEvent not implemented") } func (UnimplementedUserHostServiceServer) mustEmbedUnimplementedUserHostServiceServer() {} func (UnimplementedUserHostServiceServer) testEmbeddedByValue() {} @@ -578,7 +578,7 @@ type UnsafeUserHostServiceServer interface { } func RegisterUserHostServiceServer(s grpc.ServiceRegistrar, srv UserHostServiceServer) { - // If the following call pancis, it indicates UnimplementedUserHostServiceServer was + // If the following call panics, it indicates UnimplementedUserHostServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1496,40 +1496,40 @@ type UserHostAdminServiceServer interface { type UnimplementedUserHostAdminServiceServer struct{} func (UnimplementedUserHostAdminServiceServer) CreateBDLeader(context.Context, *CreateBDLeaderRequest) (*CreateBDLeaderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateBDLeader not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateBDLeader not implemented") } func (UnimplementedUserHostAdminServiceServer) CreateBD(context.Context, *CreateBDRequest) (*CreateBDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateBD not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateBD not implemented") } func (UnimplementedUserHostAdminServiceServer) SetBDStatus(context.Context, *SetBDStatusRequest) (*SetBDStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetBDStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetBDStatus not implemented") } func (UnimplementedUserHostAdminServiceServer) CreateCoinSeller(context.Context, *CreateCoinSellerRequest) (*CreateCoinSellerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateCoinSeller not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateCoinSeller not implemented") } func (UnimplementedUserHostAdminServiceServer) SetCoinSellerStatus(context.Context, *SetCoinSellerStatusRequest) (*SetCoinSellerStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetCoinSellerStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetCoinSellerStatus not implemented") } func (UnimplementedUserHostAdminServiceServer) ReviewSubCoinSellerApplication(context.Context, *ReviewSubCoinSellerApplicationRequest) (*ReviewSubCoinSellerApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReviewSubCoinSellerApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method ReviewSubCoinSellerApplication not implemented") } func (UnimplementedUserHostAdminServiceServer) CreateAgency(context.Context, *CreateAgencyRequest) (*CreateAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateAgency not implemented") } func (UnimplementedUserHostAdminServiceServer) AdminAddAgencyHost(context.Context, *AdminAddAgencyHostRequest) (*AdminAddAgencyHostResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminAddAgencyHost not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminAddAgencyHost not implemented") } func (UnimplementedUserHostAdminServiceServer) CloseAgency(context.Context, *CloseAgencyRequest) (*CloseAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CloseAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method CloseAgency not implemented") } func (UnimplementedUserHostAdminServiceServer) DeleteAgency(context.Context, *DeleteAgencyRequest) (*DeleteAgencyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteAgency not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteAgency not implemented") } func (UnimplementedUserHostAdminServiceServer) SetAgencyStatus(context.Context, *SetAgencyStatusRequest) (*SetAgencyStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetAgencyStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetAgencyStatus not implemented") } func (UnimplementedUserHostAdminServiceServer) SetAgencyJoinEnabled(context.Context, *SetAgencyJoinEnabledRequest) (*SetAgencyJoinEnabledResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetAgencyJoinEnabled not implemented") + return nil, status.Error(codes.Unimplemented, "method SetAgencyJoinEnabled not implemented") } func (UnimplementedUserHostAdminServiceServer) mustEmbedUnimplementedUserHostAdminServiceServer() {} func (UnimplementedUserHostAdminServiceServer) testEmbeddedByValue() {} @@ -1542,7 +1542,7 @@ type UnsafeUserHostAdminServiceServer interface { } func RegisterUserHostAdminServiceServer(s grpc.ServiceRegistrar, srv UserHostAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedUserHostAdminServiceServer was + // If the following call panics, it indicates UnimplementedUserHostAdminServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/user/v1/user_grpc.pb.go b/api/proto/user/v1/user_grpc.pb.go index dc6bb468..0cd64db0 100644 --- a/api/proto/user/v1/user_grpc.pb.go +++ b/api/proto/user/v1/user_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/user/v1/user.proto package userv1 @@ -379,79 +379,79 @@ type UserServiceServer interface { type UnimplementedUserServiceServer struct{} func (UnimplementedUserServiceServer) GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented") + return nil, status.Error(codes.Unimplemented, "method GetUser not implemented") } func (UnimplementedUserServiceServer) GetInviteAttribution(context.Context, *GetInviteAttributionRequest) (*GetInviteAttributionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetInviteAttribution not implemented") + return nil, status.Error(codes.Unimplemented, "method GetInviteAttribution not implemented") } func (UnimplementedUserServiceServer) BusinessUserLookup(context.Context, *BusinessUserLookupRequest) (*BusinessUserLookupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BusinessUserLookup not implemented") + return nil, status.Error(codes.Unimplemented, "method BusinessUserLookup not implemented") } func (UnimplementedUserServiceServer) GetMyProfileStats(context.Context, *GetMyProfileStatsRequest) (*GetMyProfileStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMyProfileStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetMyProfileStats not implemented") } func (UnimplementedUserServiceServer) BatchGetUsers(context.Context, *BatchGetUsersRequest) (*BatchGetUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUsers not implemented") } func (UnimplementedUserServiceServer) BatchGetUserAdminProfiles(context.Context, *BatchGetUserAdminProfilesRequest) (*BatchGetUserAdminProfilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUserAdminProfiles not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUserAdminProfiles not implemented") } func (UnimplementedUserServiceServer) AdminIssueUserAccessToken(context.Context, *AdminIssueUserAccessTokenRequest) (*AdminIssueUserAccessTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminIssueUserAccessToken not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminIssueUserAccessToken not implemented") } func (UnimplementedUserServiceServer) BatchGetRoomBasicUsers(context.Context, *BatchGetRoomBasicUsersRequest) (*BatchGetRoomBasicUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetRoomBasicUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetRoomBasicUsers not implemented") } func (UnimplementedUserServiceServer) ListUserIDs(context.Context, *ListUserIDsRequest) (*ListUserIDsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListUserIDs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListUserIDs not implemented") } func (UnimplementedUserServiceServer) GetUserMicLifetimeStats(context.Context, *GetUserMicLifetimeStatsRequest) (*GetUserMicLifetimeStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserMicLifetimeStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetUserMicLifetimeStats not implemented") } func (UnimplementedUserServiceServer) UpdateUserProfile(context.Context, *UpdateUserProfileRequest) (*UpdateUserProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateUserProfile not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateUserProfile not implemented") } func (UnimplementedUserServiceServer) UpdateUserProfileBackground(context.Context, *UpdateUserProfileBackgroundRequest) (*UpdateUserProfileBackgroundResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateUserProfileBackground not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateUserProfileBackground not implemented") } func (UnimplementedUserServiceServer) UpdateUserContactInfo(context.Context, *UpdateUserContactInfoRequest) (*UpdateUserContactInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateUserContactInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateUserContactInfo not implemented") } func (UnimplementedUserServiceServer) UpdateUserWithdrawAddress(context.Context, *UpdateUserWithdrawAddressRequest) (*UpdateUserWithdrawAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateUserWithdrawAddress not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateUserWithdrawAddress not implemented") } func (UnimplementedUserServiceServer) ChangeUserCountry(context.Context, *ChangeUserCountryRequest) (*ChangeUserCountryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChangeUserCountry not implemented") + return nil, status.Error(codes.Unimplemented, "method ChangeUserCountry not implemented") } func (UnimplementedUserServiceServer) AdminChangeUserCountry(context.Context, *AdminChangeUserCountryRequest) (*ChangeUserCountryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminChangeUserCountry not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminChangeUserCountry not implemented") } func (UnimplementedUserServiceServer) SetUserStatus(context.Context, *SetUserStatusRequest) (*SetUserStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetUserStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetUserStatus not implemented") } func (UnimplementedUserServiceServer) AdminBanUser(context.Context, *AdminBanUserRequest) (*AdminBanUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminBanUser not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminBanUser not implemented") } func (UnimplementedUserServiceServer) AdminUnbanUser(context.Context, *AdminUnbanUserRequest) (*AdminUnbanUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminUnbanUser not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminUnbanUser not implemented") } func (UnimplementedUserServiceServer) CreateManagerUserBlock(context.Context, *CreateManagerUserBlockRequest) (*CreateManagerUserBlockResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateManagerUserBlock not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateManagerUserBlock not implemented") } func (UnimplementedUserServiceServer) ListManagerUserBlocks(context.Context, *ListManagerUserBlocksRequest) (*ListManagerUserBlocksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListManagerUserBlocks not implemented") + return nil, status.Error(codes.Unimplemented, "method ListManagerUserBlocks not implemented") } func (UnimplementedUserServiceServer) UnblockManagerUser(context.Context, *UnblockManagerUserRequest) (*UnblockManagerUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnblockManagerUser not implemented") + return nil, status.Error(codes.Unimplemented, "method UnblockManagerUser not implemented") } func (UnimplementedUserServiceServer) CompleteOnboarding(context.Context, *CompleteOnboardingRequest) (*CompleteOnboardingResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CompleteOnboarding not implemented") + return nil, status.Error(codes.Unimplemented, "method CompleteOnboarding not implemented") } func (UnimplementedUserServiceServer) SearchInviteReferrer(context.Context, *SearchInviteReferrerRequest) (*SearchInviteReferrerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SearchInviteReferrer not implemented") + return nil, status.Error(codes.Unimplemented, "method SearchInviteReferrer not implemented") } func (UnimplementedUserServiceServer) BindInviteReferrer(context.Context, *BindInviteReferrerRequest) (*BindInviteReferrerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BindInviteReferrer not implemented") + return nil, status.Error(codes.Unimplemented, "method BindInviteReferrer not implemented") } func (UnimplementedUserServiceServer) mustEmbedUnimplementedUserServiceServer() {} func (UnimplementedUserServiceServer) testEmbeddedByValue() {} @@ -464,7 +464,7 @@ type UnsafeUserServiceServer interface { } func RegisterUserServiceServer(s grpc.ServiceRegistrar, srv UserServiceServer) { - // If the following call pancis, it indicates UnimplementedUserServiceServer was + // If the following call panics, it indicates UnimplementedUserServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1215,37 +1215,37 @@ type UserSocialServiceServer interface { type UnimplementedUserSocialServiceServer struct{} func (UnimplementedUserSocialServiceServer) RecordProfileVisit(context.Context, *RecordProfileVisitRequest) (*RecordProfileVisitResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecordProfileVisit not implemented") + return nil, status.Error(codes.Unimplemented, "method RecordProfileVisit not implemented") } func (UnimplementedUserSocialServiceServer) ListProfileVisitors(context.Context, *ListProfileVisitorsRequest) (*ListProfileVisitorsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListProfileVisitors not implemented") + return nil, status.Error(codes.Unimplemented, "method ListProfileVisitors not implemented") } func (UnimplementedUserSocialServiceServer) FollowUser(context.Context, *FollowUserRequest) (*FollowUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FollowUser not implemented") + return nil, status.Error(codes.Unimplemented, "method FollowUser not implemented") } func (UnimplementedUserSocialServiceServer) UnfollowUser(context.Context, *UnfollowUserRequest) (*UnfollowUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnfollowUser not implemented") + return nil, status.Error(codes.Unimplemented, "method UnfollowUser not implemented") } func (UnimplementedUserSocialServiceServer) ListFollowing(context.Context, *ListFollowingRequest) (*ListFollowingResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListFollowing not implemented") + return nil, status.Error(codes.Unimplemented, "method ListFollowing not implemented") } func (UnimplementedUserSocialServiceServer) ApplyFriend(context.Context, *ApplyFriendRequest) (*ApplyFriendResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyFriend not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyFriend not implemented") } func (UnimplementedUserSocialServiceServer) AcceptFriendApplication(context.Context, *AcceptFriendApplicationRequest) (*AcceptFriendApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AcceptFriendApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method AcceptFriendApplication not implemented") } func (UnimplementedUserSocialServiceServer) DeleteFriend(context.Context, *DeleteFriendRequest) (*DeleteFriendResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteFriend not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteFriend not implemented") } func (UnimplementedUserSocialServiceServer) ListFriends(context.Context, *ListFriendsRequest) (*ListFriendsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListFriends not implemented") + return nil, status.Error(codes.Unimplemented, "method ListFriends not implemented") } func (UnimplementedUserSocialServiceServer) ListFriendApplications(context.Context, *ListFriendApplicationsRequest) (*ListFriendApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListFriendApplications not implemented") + return nil, status.Error(codes.Unimplemented, "method ListFriendApplications not implemented") } func (UnimplementedUserSocialServiceServer) SubmitReport(context.Context, *SubmitReportRequest) (*SubmitReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitReport not implemented") + return nil, status.Error(codes.Unimplemented, "method SubmitReport not implemented") } func (UnimplementedUserSocialServiceServer) mustEmbedUnimplementedUserSocialServiceServer() {} func (UnimplementedUserSocialServiceServer) testEmbeddedByValue() {} @@ -1258,7 +1258,7 @@ type UnsafeUserSocialServiceServer interface { } func RegisterUserSocialServiceServer(s grpc.ServiceRegistrar, srv UserSocialServiceServer) { - // If the following call pancis, it indicates UnimplementedUserSocialServiceServer was + // If the following call panics, it indicates UnimplementedUserSocialServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1662,28 +1662,28 @@ type UserCPServiceServer interface { type UnimplementedUserCPServiceServer struct{} func (UnimplementedUserCPServiceServer) ListCPApplications(context.Context, *ListCPApplicationsRequest) (*ListCPApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCPApplications not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCPApplications not implemented") } func (UnimplementedUserCPServiceServer) AcceptCPApplication(context.Context, *AcceptCPApplicationRequest) (*AcceptCPApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AcceptCPApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method AcceptCPApplication not implemented") } func (UnimplementedUserCPServiceServer) RejectCPApplication(context.Context, *RejectCPApplicationRequest) (*RejectCPApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RejectCPApplication not implemented") + return nil, status.Error(codes.Unimplemented, "method RejectCPApplication not implemented") } func (UnimplementedUserCPServiceServer) ListCPRelationships(context.Context, *ListCPRelationshipsRequest) (*ListCPRelationshipsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCPRelationships not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCPRelationships not implemented") } func (UnimplementedUserCPServiceServer) ListCPIntimacyLeaderboard(context.Context, *ListCPIntimacyLeaderboardRequest) (*ListCPIntimacyLeaderboardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCPIntimacyLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCPIntimacyLeaderboard not implemented") } func (UnimplementedUserCPServiceServer) PrepareBreakCPRelationship(context.Context, *PrepareBreakCPRelationshipRequest) (*PrepareBreakCPRelationshipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PrepareBreakCPRelationship not implemented") + return nil, status.Error(codes.Unimplemented, "method PrepareBreakCPRelationship not implemented") } func (UnimplementedUserCPServiceServer) ConfirmBreakCPRelationship(context.Context, *ConfirmBreakCPRelationshipRequest) (*ConfirmBreakCPRelationshipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConfirmBreakCPRelationship not implemented") + return nil, status.Error(codes.Unimplemented, "method ConfirmBreakCPRelationship not implemented") } func (UnimplementedUserCPServiceServer) CancelBreakCPRelationship(context.Context, *CancelBreakCPRelationshipRequest) (*CancelBreakCPRelationshipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelBreakCPRelationship not implemented") + return nil, status.Error(codes.Unimplemented, "method CancelBreakCPRelationship not implemented") } func (UnimplementedUserCPServiceServer) mustEmbedUnimplementedUserCPServiceServer() {} func (UnimplementedUserCPServiceServer) testEmbeddedByValue() {} @@ -1696,7 +1696,7 @@ type UnsafeUserCPServiceServer interface { } func RegisterUserCPServiceServer(s grpc.ServiceRegistrar, srv UserCPServiceServer) { - // If the following call pancis, it indicates UnimplementedUserCPServiceServer was + // If the following call panics, it indicates UnimplementedUserCPServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -1956,10 +1956,10 @@ type UserCPInternalServiceServer interface { type UnimplementedUserCPInternalServiceServer struct{} func (UnimplementedUserCPInternalServiceServer) ConsumeRoomGiftCPEvent(context.Context, *ConsumeRoomGiftCPEventRequest) (*ConsumeRoomGiftCPEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumeRoomGiftCPEvent not implemented") + return nil, status.Error(codes.Unimplemented, "method ConsumeRoomGiftCPEvent not implemented") } func (UnimplementedUserCPInternalServiceServer) ListCPWeeklyRankEntries(context.Context, *ListCPWeeklyRankEntriesRequest) (*ListCPWeeklyRankEntriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCPWeeklyRankEntries not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCPWeeklyRankEntries not implemented") } func (UnimplementedUserCPInternalServiceServer) mustEmbedUnimplementedUserCPInternalServiceServer() {} func (UnimplementedUserCPInternalServiceServer) testEmbeddedByValue() {} @@ -1972,7 +1972,7 @@ type UnsafeUserCPInternalServiceServer interface { } func RegisterUserCPInternalServiceServer(s grpc.ServiceRegistrar, srv UserCPInternalServiceServer) { - // If the following call pancis, it indicates UnimplementedUserCPInternalServiceServer was + // If the following call panics, it indicates UnimplementedUserCPInternalServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2165,25 +2165,25 @@ type UserCronServiceServer interface { type UnimplementedUserCronServiceServer struct{} func (UnimplementedUserCronServiceServer) ProcessLoginIPRiskBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessLoginIPRiskBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessLoginIPRiskBatch not implemented") } func (UnimplementedUserCronServiceServer) ProcessRegionRebuildBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessRegionRebuildBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessRegionRebuildBatch not implemented") } func (UnimplementedUserCronServiceServer) CompensateMicOpenSessions(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CompensateMicOpenSessions not implemented") + return nil, status.Error(codes.Unimplemented, "method CompensateMicOpenSessions not implemented") } func (UnimplementedUserCronServiceServer) CompensateRoomOpenSessions(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CompensateRoomOpenSessions not implemented") + return nil, status.Error(codes.Unimplemented, "method CompensateRoomOpenSessions not implemented") } func (UnimplementedUserCronServiceServer) ExpireManagerUserBlocks(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExpireManagerUserBlocks not implemented") + return nil, status.Error(codes.Unimplemented, "method ExpireManagerUserBlocks not implemented") } func (UnimplementedUserCronServiceServer) ExpireAdminUserBans(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExpireAdminUserBans not implemented") + return nil, status.Error(codes.Unimplemented, "method ExpireAdminUserBans not implemented") } func (UnimplementedUserCronServiceServer) RefreshCPIntimacyLeaderboard(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RefreshCPIntimacyLeaderboard not implemented") + return nil, status.Error(codes.Unimplemented, "method RefreshCPIntimacyLeaderboard not implemented") } func (UnimplementedUserCronServiceServer) mustEmbedUnimplementedUserCronServiceServer() {} func (UnimplementedUserCronServiceServer) testEmbeddedByValue() {} @@ -2196,7 +2196,7 @@ type UnsafeUserCronServiceServer interface { } func RegisterUserCronServiceServer(s grpc.ServiceRegistrar, srv UserCronServiceServer) { - // If the following call pancis, it indicates UnimplementedUserCronServiceServer was + // If the following call panics, it indicates UnimplementedUserCronServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2434,10 +2434,10 @@ type UserDeviceServiceServer interface { type UnimplementedUserDeviceServiceServer struct{} func (UnimplementedUserDeviceServiceServer) BindPushToken(context.Context, *BindPushTokenRequest) (*BindPushTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BindPushToken not implemented") + return nil, status.Error(codes.Unimplemented, "method BindPushToken not implemented") } func (UnimplementedUserDeviceServiceServer) DeletePushToken(context.Context, *DeletePushTokenRequest) (*DeletePushTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeletePushToken not implemented") + return nil, status.Error(codes.Unimplemented, "method DeletePushToken not implemented") } func (UnimplementedUserDeviceServiceServer) mustEmbedUnimplementedUserDeviceServiceServer() {} func (UnimplementedUserDeviceServiceServer) testEmbeddedByValue() {} @@ -2450,7 +2450,7 @@ type UnsafeUserDeviceServiceServer interface { } func RegisterUserDeviceServiceServer(s grpc.ServiceRegistrar, srv UserDeviceServiceServer) { - // If the following call pancis, it indicates UnimplementedUserDeviceServiceServer was + // If the following call panics, it indicates UnimplementedUserDeviceServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2578,7 +2578,7 @@ type AppRegistryServiceServer interface { type UnimplementedAppRegistryServiceServer struct{} func (UnimplementedAppRegistryServiceServer) ResolveApp(context.Context, *ResolveAppRequest) (*ResolveAppResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveApp not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveApp not implemented") } func (UnimplementedAppRegistryServiceServer) ListApps(context.Context, *ListAppsRequest) (*ListAppsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListApps not implemented") @@ -2594,7 +2594,7 @@ type UnsafeAppRegistryServiceServer interface { } func RegisterAppRegistryServiceServer(s grpc.ServiceRegistrar, srv AppRegistryServiceServer) { - // If the following call pancis, it indicates UnimplementedAppRegistryServiceServer was + // If the following call panics, it indicates UnimplementedAppRegistryServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2724,10 +2724,10 @@ type CountryAdminServiceServer interface { type UnimplementedCountryAdminServiceServer struct{} func (UnimplementedCountryAdminServiceServer) ListCountries(context.Context, *ListCountriesRequest) (*ListCountriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCountries not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCountries not implemented") } func (UnimplementedCountryAdminServiceServer) UpdateCountry(context.Context, *UpdateCountryRequest) (*CountryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateCountry not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateCountry not implemented") } func (UnimplementedCountryAdminServiceServer) mustEmbedUnimplementedCountryAdminServiceServer() {} func (UnimplementedCountryAdminServiceServer) testEmbeddedByValue() {} @@ -2740,7 +2740,7 @@ type UnsafeCountryAdminServiceServer interface { } func RegisterCountryAdminServiceServer(s grpc.ServiceRegistrar, srv CountryAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedCountryAdminServiceServer was + // If the following call panics, it indicates UnimplementedCountryAdminServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2868,10 +2868,10 @@ type CountryQueryServiceServer interface { type UnimplementedCountryQueryServiceServer struct{} func (UnimplementedCountryQueryServiceServer) ListRegistrationCountries(context.Context, *ListRegistrationCountriesRequest) (*ListRegistrationCountriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRegistrationCountries not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRegistrationCountries not implemented") } func (UnimplementedCountryQueryServiceServer) ListLoginRiskBlockedCountries(context.Context, *ListLoginRiskBlockedCountriesRequest) (*ListLoginRiskBlockedCountriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListLoginRiskBlockedCountries not implemented") + return nil, status.Error(codes.Unimplemented, "method ListLoginRiskBlockedCountries not implemented") } func (UnimplementedCountryQueryServiceServer) mustEmbedUnimplementedCountryQueryServiceServer() {} func (UnimplementedCountryQueryServiceServer) testEmbeddedByValue() {} @@ -2884,7 +2884,7 @@ type UnsafeCountryQueryServiceServer interface { } func RegisterCountryQueryServiceServer(s grpc.ServiceRegistrar, srv CountryQueryServiceServer) { - // If the following call pancis, it indicates UnimplementedCountryQueryServiceServer was + // If the following call panics, it indicates UnimplementedCountryQueryServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3040,16 +3040,16 @@ type RegionAdminServiceServer interface { type UnimplementedRegionAdminServiceServer struct{} func (UnimplementedRegionAdminServiceServer) ListRegions(context.Context, *ListRegionsRequest) (*ListRegionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRegions not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRegions not implemented") } func (UnimplementedRegionAdminServiceServer) GetRegion(context.Context, *GetRegionRequest) (*RegionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRegion not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRegion not implemented") } func (UnimplementedRegionAdminServiceServer) UpdateRegion(context.Context, *UpdateRegionRequest) (*RegionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRegion not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRegion not implemented") } func (UnimplementedRegionAdminServiceServer) ReplaceRegionCountries(context.Context, *ReplaceRegionCountriesRequest) (*RegionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReplaceRegionCountries not implemented") + return nil, status.Error(codes.Unimplemented, "method ReplaceRegionCountries not implemented") } func (UnimplementedRegionAdminServiceServer) mustEmbedUnimplementedRegionAdminServiceServer() {} func (UnimplementedRegionAdminServiceServer) testEmbeddedByValue() {} @@ -3062,7 +3062,7 @@ type UnsafeRegionAdminServiceServer interface { } func RegisterRegionAdminServiceServer(s grpc.ServiceRegistrar, srv RegionAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedRegionAdminServiceServer was + // If the following call panics, it indicates UnimplementedRegionAdminServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3299,25 +3299,25 @@ type UserIdentityServiceServer interface { type UnimplementedUserIdentityServiceServer struct{} func (UnimplementedUserIdentityServiceServer) GetUserIdentity(context.Context, *GetUserIdentityRequest) (*GetUserIdentityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserIdentity not implemented") + return nil, status.Error(codes.Unimplemented, "method GetUserIdentity not implemented") } func (UnimplementedUserIdentityServiceServer) ResolveDisplayUserID(context.Context, *ResolveDisplayUserIDRequest) (*ResolveDisplayUserIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveDisplayUserID not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveDisplayUserID not implemented") } func (UnimplementedUserIdentityServiceServer) ChangeDisplayUserID(context.Context, *ChangeDisplayUserIDRequest) (*ChangeDisplayUserIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChangeDisplayUserID not implemented") + return nil, status.Error(codes.Unimplemented, "method ChangeDisplayUserID not implemented") } func (UnimplementedUserIdentityServiceServer) ApplyPrettyDisplayUserID(context.Context, *ApplyPrettyDisplayUserIDRequest) (*ApplyPrettyDisplayUserIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyPrettyDisplayUserID not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyPrettyDisplayUserID not implemented") } func (UnimplementedUserIdentityServiceServer) ListAvailablePrettyDisplayIDs(context.Context, *ListAvailablePrettyDisplayIDsRequest) (*ListAvailablePrettyDisplayIDsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAvailablePrettyDisplayIDs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAvailablePrettyDisplayIDs not implemented") } func (UnimplementedUserIdentityServiceServer) ApplyPrettyDisplayIDFromPool(context.Context, *ApplyPrettyDisplayIDFromPoolRequest) (*ApplyPrettyDisplayIDFromPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyPrettyDisplayIDFromPool not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyPrettyDisplayIDFromPool not implemented") } func (UnimplementedUserIdentityServiceServer) ExpirePrettyDisplayUserID(context.Context, *ExpirePrettyDisplayUserIDRequest) (*ExpirePrettyDisplayUserIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExpirePrettyDisplayUserID not implemented") + return nil, status.Error(codes.Unimplemented, "method ExpirePrettyDisplayUserID not implemented") } func (UnimplementedUserIdentityServiceServer) mustEmbedUnimplementedUserIdentityServiceServer() {} func (UnimplementedUserIdentityServiceServer) testEmbeddedByValue() {} @@ -3330,7 +3330,7 @@ type UnsafeUserIdentityServiceServer interface { } func RegisterUserIdentityServiceServer(s grpc.ServiceRegistrar, srv UserIdentityServiceServer) { - // If the following call pancis, it indicates UnimplementedUserIdentityServiceServer was + // If the following call panics, it indicates UnimplementedUserIdentityServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -3646,28 +3646,28 @@ type UserPrettyDisplayIDAdminServiceServer interface { type UnimplementedUserPrettyDisplayIDAdminServiceServer struct{} func (UnimplementedUserPrettyDisplayIDAdminServiceServer) ListPrettyDisplayIDPools(context.Context, *ListPrettyDisplayIDPoolsRequest) (*ListPrettyDisplayIDPoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPrettyDisplayIDPools not implemented") + return nil, status.Error(codes.Unimplemented, "method ListPrettyDisplayIDPools not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) CreatePrettyDisplayIDPool(context.Context, *CreatePrettyDisplayIDPoolRequest) (*PrettyDisplayIDPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreatePrettyDisplayIDPool not implemented") + return nil, status.Error(codes.Unimplemented, "method CreatePrettyDisplayIDPool not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) UpdatePrettyDisplayIDPool(context.Context, *UpdatePrettyDisplayIDPoolRequest) (*PrettyDisplayIDPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdatePrettyDisplayIDPool not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdatePrettyDisplayIDPool not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) GeneratePrettyDisplayIDs(context.Context, *GeneratePrettyDisplayIDsRequest) (*GeneratePrettyDisplayIDsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GeneratePrettyDisplayIDs not implemented") + return nil, status.Error(codes.Unimplemented, "method GeneratePrettyDisplayIDs not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) ListPrettyDisplayIDs(context.Context, *ListPrettyDisplayIDsRequest) (*ListPrettyDisplayIDsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPrettyDisplayIDs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListPrettyDisplayIDs not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) SetPrettyDisplayIDStatus(context.Context, *SetPrettyDisplayIDStatusRequest) (*PrettyDisplayIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetPrettyDisplayIDStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetPrettyDisplayIDStatus not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) RecyclePrettyDisplayID(context.Context, *RecyclePrettyDisplayIDRequest) (*PrettyDisplayIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecyclePrettyDisplayID not implemented") + return nil, status.Error(codes.Unimplemented, "method RecyclePrettyDisplayID not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) AdminGrantPrettyDisplayID(context.Context, *AdminGrantPrettyDisplayIDRequest) (*AdminGrantPrettyDisplayIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminGrantPrettyDisplayID not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminGrantPrettyDisplayID not implemented") } func (UnimplementedUserPrettyDisplayIDAdminServiceServer) mustEmbedUnimplementedUserPrettyDisplayIDAdminServiceServer() { } @@ -3681,7 +3681,7 @@ type UnsafeUserPrettyDisplayIDAdminServiceServer interface { } func RegisterUserPrettyDisplayIDAdminServiceServer(s grpc.ServiceRegistrar, srv UserPrettyDisplayIDAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedUserPrettyDisplayIDAdminServiceServer was + // If the following call panics, it indicates UnimplementedUserPrettyDisplayIDAdminServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/api/proto/wallet/v1/wallet.pb.go b/api/proto/wallet/v1/wallet.pb.go index eb3946a6..67d1ffa2 100644 --- a/api/proto/wallet/v1/wallet.pb.go +++ b/api/proto/wallet/v1/wallet.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v7.35.0 +// protoc-gen-go v1.36.11 +// protoc v5.29.2 // source: proto/wallet/v1/wallet.proto package walletv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,16 +23,13 @@ const ( // DebitGiftRequest 是 room-service 送礼同步扣费的最小账务输入。 type DebitGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` // price_version 为空时使用当前生效价格;非空时必须命中 active 价格版本。 PriceVersion string `protobuf:"bytes,7,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` @@ -48,7 +46,9 @@ type DebitGiftRequest struct { // entitlement_id 非空表示本次送礼从用户背包 gift 权益扣库存,不扣 COIN。 EntitlementId string `protobuf:"bytes,14,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` // charge_source 区分 coin/bag;为空按 coin 兼容旧客户端。 - ChargeSource string `protobuf:"bytes,15,opt,name=charge_source,json=chargeSource,proto3" json:"charge_source,omitempty"` + ChargeSource string `protobuf:"bytes,15,opt,name=charge_source,json=chargeSource,proto3" json:"charge_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitGiftRequest) Reset() { @@ -188,17 +188,14 @@ func (x *DebitGiftRequest) GetChargeSource() string { // DebitDirectGiftRequest 是私聊送礼的账务命令;gateway 负责用 user-service 补齐区域和主播身份。 type DebitDirectGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SenderUserId int64 `protobuf:"varint,2,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - PriceVersion string `protobuf:"bytes,6,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SenderUserId int64 `protobuf:"varint,2,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + PriceVersion string `protobuf:"bytes,6,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // region_id 使用 sender 当前 region_id;私聊没有房间可见区域,不能接收客户端自报区域。 RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` SenderRegionId int64 `protobuf:"varint,9,opt,name=sender_region_id,json=senderRegionId,proto3" json:"sender_region_id,omitempty"` @@ -207,6 +204,8 @@ type DebitDirectGiftRequest struct { TargetAgencyOwnerUserId int64 `protobuf:"varint,12,opt,name=target_agency_owner_user_id,json=targetAgencyOwnerUserId,proto3" json:"target_agency_owner_user_id,omitempty"` EntitlementId string `protobuf:"bytes,13,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` ChargeSource string `protobuf:"bytes,14,opt,name=charge_source,json=chargeSource,proto3" json:"charge_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitDirectGiftRequest) Reset() { @@ -339,13 +338,10 @@ func (x *DebitDirectGiftRequest) GetChargeSource() string { // DebitGiftResponse 返回扣费流水、服务端结算值和 sender COIN 账后余额。 type DebitGiftResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BillingReceiptId string `protobuf:"bytes,1,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CoinSpent int64 `protobuf:"varint,3,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + BillingReceiptId string `protobuf:"bytes,1,opt,name=billing_receipt_id,json=billingReceiptId,proto3" json:"billing_receipt_id,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CoinSpent int64 `protobuf:"varint,3,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` // gift_point_added 是历史回执字段;GIFT_POINT 已下线,新送礼固定返回 0。 GiftPointAdded int64 `protobuf:"varint,4,opt,name=gift_point_added,json=giftPointAdded,proto3" json:"gift_point_added,omitempty"` HeatValue int64 `protobuf:"varint,5,opt,name=heat_value,json=heatValue,proto3" json:"heat_value,omitempty"` @@ -383,6 +379,8 @@ type DebitGiftResponse struct { HostPointTemplateVersion string `protobuf:"bytes,27,opt,name=host_point_template_version,json=hostPointTemplateVersion,proto3" json:"host_point_template_version,omitempty"` // balance_version 是 sender 被扣费资产在本次账务完成后的版本;同 command_id 重放返回首次版本。 BalanceVersion int64 `protobuf:"varint,28,opt,name=balance_version,json=balanceVersion,proto3" json:"balance_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitGiftResponse) Reset() { @@ -613,16 +611,15 @@ func (x *DebitGiftResponse) GetBalanceVersion() int64 { // DebitGiftTarget 是一笔批量送礼中的单个接收方账务快照。 type DebitGiftTarget struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // command_id 是该目标的账务幂等键,由 room-service 从房间 command_id 派生。 CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` TargetIsHost bool `protobuf:"varint,3,opt,name=target_is_host,json=targetIsHost,proto3" json:"target_is_host,omitempty"` TargetHostRegionId int64 `protobuf:"varint,4,opt,name=target_host_region_id,json=targetHostRegionId,proto3" json:"target_host_region_id,omitempty"` TargetAgencyOwnerUserId int64 `protobuf:"varint,5,opt,name=target_agency_owner_user_id,json=targetAgencyOwnerUserId,proto3" json:"target_agency_owner_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitGiftTarget) Reset() { @@ -692,23 +689,22 @@ func (x *DebitGiftTarget) GetTargetAgencyOwnerUserId() int64 { // BatchDebitGiftRequest 在一个钱包事务内完成同一 sender 对多个 target 的送礼扣费。 type BatchDebitGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - PriceVersion string `protobuf:"bytes,6,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + GiftId string `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,5,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + PriceVersion string `protobuf:"bytes,6,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // region_id 来自 room-service 房间 visible_region_id,用于校验礼物区域可用性和匹配房间贡献比例。 RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` SenderRegionId int64 `protobuf:"varint,9,opt,name=sender_region_id,json=senderRegionId,proto3" json:"sender_region_id,omitempty"` Targets []*DebitGiftTarget `protobuf:"bytes,10,rep,name=targets,proto3" json:"targets,omitempty"` EntitlementId string `protobuf:"bytes,11,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` ChargeSource string `protobuf:"bytes,12,opt,name=charge_source,json=chargeSource,proto3" json:"charge_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchDebitGiftRequest) Reset() { @@ -827,13 +823,12 @@ func (x *BatchDebitGiftRequest) GetChargeSource() string { // BatchDebitGiftReceipt 保留每个目标独立交易的回执,房间事件按它逐目标落事实。 type BatchDebitGiftReceipt struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + Billing *DebitGiftResponse `protobuf:"bytes,3,opt,name=billing,proto3" json:"billing,omitempty"` unknownFields protoimpl.UnknownFields - - TargetUserId int64 `protobuf:"varint,1,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - CommandId string `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - Billing *DebitGiftResponse `protobuf:"bytes,3,opt,name=billing,proto3" json:"billing,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchDebitGiftReceipt) Reset() { @@ -889,12 +884,11 @@ func (x *BatchDebitGiftReceipt) GetBilling() *DebitGiftResponse { // BatchDebitGiftResponse 返回批量聚合值和逐目标账务回执。 type BatchDebitGiftResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Aggregate *DebitGiftResponse `protobuf:"bytes,1,opt,name=aggregate,proto3" json:"aggregate,omitempty"` + Receipts []*BatchDebitGiftReceipt `protobuf:"bytes,2,rep,name=receipts,proto3" json:"receipts,omitempty"` unknownFields protoimpl.UnknownFields - - Aggregate *DebitGiftResponse `protobuf:"bytes,1,opt,name=aggregate,proto3" json:"aggregate,omitempty"` - Receipts []*BatchDebitGiftReceipt `protobuf:"bytes,2,rep,name=receipts,proto3" json:"receipts,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchDebitGiftResponse) Reset() { @@ -944,20 +938,19 @@ func (x *BatchDebitGiftResponse) GetReceipts() []*BatchDebitGiftReceipt { // DebitRobotGiftRequest 是机器人房间内部送礼扣费命令。 // 它只扣 ROBOT_COIN,不产生主播钻石、真实充值消费流水或普通礼物墙投影。 type DebitRobotGiftRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - PriceVersion string `protobuf:"bytes,7,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,9,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - SenderRegionId int64 `protobuf:"varint,10,opt,name=sender_region_id,json=senderRegionId,proto3" json:"sender_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftCount int32 `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + PriceVersion string `protobuf:"bytes,7,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,9,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + SenderRegionId int64 `protobuf:"varint,10,opt,name=sender_region_id,json=senderRegionId,proto3" json:"sender_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitRobotGiftRequest) Reset() { @@ -1062,15 +1055,14 @@ func (x *DebitRobotGiftRequest) GetSenderRegionId() int64 { // AssetBalance 是用户某类资产的余额投影。 type AssetBalance struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AssetType string `protobuf:"bytes,1,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - AvailableAmount int64 `protobuf:"varint,2,opt,name=available_amount,json=availableAmount,proto3" json:"available_amount,omitempty"` - FrozenAmount int64 `protobuf:"varint,3,opt,name=frozen_amount,json=frozenAmount,proto3" json:"frozen_amount,omitempty"` - Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` - AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AssetType string `protobuf:"bytes,1,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + AvailableAmount int64 `protobuf:"varint,2,opt,name=available_amount,json=availableAmount,proto3" json:"available_amount,omitempty"` + FrozenAmount int64 `protobuf:"varint,3,opt,name=frozen_amount,json=frozenAmount,proto3" json:"frozen_amount,omitempty"` + Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` + AppCode string `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AssetBalance) Reset() { @@ -1140,14 +1132,13 @@ func (x *AssetBalance) GetAppCode() string { // GetBalancesRequest 查询用户多资产余额;内部调用方负责鉴权和用户范围控制。 type GetBalancesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AssetTypes []string `protobuf:"bytes,3,rep,name=asset_types,json=assetTypes,proto3" json:"asset_types,omitempty"` + AppCode string `protobuf:"bytes,4,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AssetTypes []string `protobuf:"bytes,3,rep,name=asset_types,json=assetTypes,proto3" json:"asset_types,omitempty"` - AppCode string `protobuf:"bytes,4,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBalancesRequest) Reset() { @@ -1209,11 +1200,10 @@ func (x *GetBalancesRequest) GetAppCode() string { } type GetBalancesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Balances []*AssetBalance `protobuf:"bytes,1,rep,name=balances,proto3" json:"balances,omitempty"` unknownFields protoimpl.UnknownFields - - Balances []*AssetBalance `protobuf:"bytes,1,rep,name=balances,proto3" json:"balances,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBalancesResponse) Reset() { @@ -1254,17 +1244,16 @@ func (x *GetBalancesResponse) GetBalances() []*AssetBalance { } type HostSalaryPolicyLevel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LevelNo int32 `protobuf:"varint,1,opt,name=level_no,json=levelNo,proto3" json:"level_no,omitempty"` - RequiredDiamonds int64 `protobuf:"varint,2,opt,name=required_diamonds,json=requiredDiamonds,proto3" json:"required_diamonds,omitempty"` - HostSalaryUsdMinor int64 `protobuf:"varint,3,opt,name=host_salary_usd_minor,json=hostSalaryUsdMinor,proto3" json:"host_salary_usd_minor,omitempty"` - HostCoinReward int64 `protobuf:"varint,4,opt,name=host_coin_reward,json=hostCoinReward,proto3" json:"host_coin_reward,omitempty"` - AgencySalaryUsdMinor int64 `protobuf:"varint,5,opt,name=agency_salary_usd_minor,json=agencySalaryUsdMinor,proto3" json:"agency_salary_usd_minor,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + LevelNo int32 `protobuf:"varint,1,opt,name=level_no,json=levelNo,proto3" json:"level_no,omitempty"` + RequiredDiamonds int64 `protobuf:"varint,2,opt,name=required_diamonds,json=requiredDiamonds,proto3" json:"required_diamonds,omitempty"` + HostSalaryUsdMinor int64 `protobuf:"varint,3,opt,name=host_salary_usd_minor,json=hostSalaryUsdMinor,proto3" json:"host_salary_usd_minor,omitempty"` + HostCoinReward int64 `protobuf:"varint,4,opt,name=host_coin_reward,json=hostCoinReward,proto3" json:"host_coin_reward,omitempty"` + AgencySalaryUsdMinor int64 `protobuf:"varint,5,opt,name=agency_salary_usd_minor,json=agencySalaryUsdMinor,proto3" json:"agency_salary_usd_minor,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostSalaryPolicyLevel) Reset() { @@ -1347,10 +1336,7 @@ func (x *HostSalaryPolicyLevel) GetSortOrder() int32 { } type HostSalaryPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` PolicyId uint64 `protobuf:"varint,1,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` @@ -1362,6 +1348,8 @@ type HostSalaryPolicy struct { EffectiveFromMs int64 `protobuf:"varint,9,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` EffectiveToMs int64 `protobuf:"varint,10,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` Levels []*HostSalaryPolicyLevel `protobuf:"bytes,11,rep,name=levels,proto3" json:"levels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostSalaryPolicy) Reset() { @@ -1472,16 +1460,15 @@ func (x *HostSalaryPolicy) GetLevels() []*HostSalaryPolicyLevel { } type GetActiveHostSalaryPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - SettlementMode string `protobuf:"bytes,4,opt,name=settlement_mode,json=settlementMode,proto3" json:"settlement_mode,omitempty"` - SettlementTriggerMode string `protobuf:"bytes,5,opt,name=settlement_trigger_mode,json=settlementTriggerMode,proto3" json:"settlement_trigger_mode,omitempty"` - NowMs int64 `protobuf:"varint,6,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + SettlementMode string `protobuf:"bytes,4,opt,name=settlement_mode,json=settlementMode,proto3" json:"settlement_mode,omitempty"` + SettlementTriggerMode string `protobuf:"bytes,5,opt,name=settlement_trigger_mode,json=settlementTriggerMode,proto3" json:"settlement_trigger_mode,omitempty"` + NowMs int64 `protobuf:"varint,6,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetActiveHostSalaryPolicyRequest) Reset() { @@ -1557,12 +1544,11 @@ func (x *GetActiveHostSalaryPolicyRequest) GetNowMs() int64 { } type GetActiveHostSalaryPolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` + Policy *HostSalaryPolicy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` unknownFields protoimpl.UnknownFields - - Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` - Policy *HostSalaryPolicy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetActiveHostSalaryPolicyResponse) Reset() { @@ -1610,17 +1596,16 @@ func (x *GetActiveHostSalaryPolicyResponse) GetPolicy() *HostSalaryPolicy { } type HostSalaryProgress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HostUserId int64 `protobuf:"varint,1,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - AgencyOwnerUserId int64 `protobuf:"varint,4,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` - TotalDiamonds int64 `protobuf:"varint,5,opt,name=total_diamonds,json=totalDiamonds,proto3" json:"total_diamonds,omitempty"` - GiftDiamondTotal int64 `protobuf:"varint,6,opt,name=gift_diamond_total,json=giftDiamondTotal,proto3" json:"gift_diamond_total,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + HostUserId int64 `protobuf:"varint,1,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + CycleKey string `protobuf:"bytes,2,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + AgencyOwnerUserId int64 `protobuf:"varint,4,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` + TotalDiamonds int64 `protobuf:"varint,5,opt,name=total_diamonds,json=totalDiamonds,proto3" json:"total_diamonds,omitempty"` + GiftDiamondTotal int64 `protobuf:"varint,6,opt,name=gift_diamond_total,json=giftDiamondTotal,proto3" json:"gift_diamond_total,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostSalaryProgress) Reset() { @@ -1703,15 +1688,14 @@ func (x *HostSalaryProgress) GetUpdatedAtMs() int64 { } type GetHostSalaryProgressRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + CycleKey string `protobuf:"bytes,4,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + NowMs int64 `protobuf:"varint,5,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - CycleKey string `protobuf:"bytes,4,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - NowMs int64 `protobuf:"varint,5,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostSalaryProgressRequest) Reset() { @@ -1780,11 +1764,10 @@ func (x *GetHostSalaryProgressRequest) GetNowMs() int64 { } type GetHostSalaryProgressResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Progress *HostSalaryProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` unknownFields protoimpl.UnknownFields - - Progress *HostSalaryProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostSalaryProgressResponse) Reset() { @@ -1828,16 +1811,15 @@ func (x *GetHostSalaryProgressResponse) GetProgress() *HostSalaryProgress { // estimated 口径是“预收入”:按当前累计钻石命中的政策档位工资 + 未达下一档剩余钻石按月底费率折美元, // 与已结算累计取大,保证已关闭周期回读时等于真实发放值。 type TeamHostSalaryCycleStat struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CycleKey string `protobuf:"bytes,1,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - EstimatedHostSalaryUsdMinor int64 `protobuf:"varint,2,opt,name=estimated_host_salary_usd_minor,json=estimatedHostSalaryUsdMinor,proto3" json:"estimated_host_salary_usd_minor,omitempty"` - SettledHostSalaryUsdMinor int64 `protobuf:"varint,3,opt,name=settled_host_salary_usd_minor,json=settledHostSalaryUsdMinor,proto3" json:"settled_host_salary_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CycleKey string `protobuf:"bytes,1,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + EstimatedHostSalaryUsdMinor int64 `protobuf:"varint,2,opt,name=estimated_host_salary_usd_minor,json=estimatedHostSalaryUsdMinor,proto3" json:"estimated_host_salary_usd_minor,omitempty"` + SettledHostSalaryUsdMinor int64 `protobuf:"varint,3,opt,name=settled_host_salary_usd_minor,json=settledHostSalaryUsdMinor,proto3" json:"settled_host_salary_usd_minor,omitempty"` // active_host_count 统计该周期内累计钻石大于 0 的主播数。 ActiveHostCount int32 `protobuf:"varint,4,opt,name=active_host_count,json=activeHostCount,proto3" json:"active_host_count,omitempty"` TotalDiamonds int64 `protobuf:"varint,5,opt,name=total_diamonds,json=totalDiamonds,proto3" json:"total_diamonds,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TeamHostSalaryCycleStat) Reset() { @@ -1906,17 +1888,16 @@ func (x *TeamHostSalaryCycleStat) GetTotalDiamonds() int64 { } type GetTeamHostSalaryStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // agency_owner_user_ids 由调用方(gateway)从 user-service 组织树解析后传入;wallet 只按周期账户上的收款人快照聚合。 AgencyOwnerUserIds []int64 `protobuf:"varint,3,rep,packed,name=agency_owner_user_ids,json=agencyOwnerUserIds,proto3" json:"agency_owner_user_ids,omitempty"` CycleKeys []string `protobuf:"bytes,4,rep,name=cycle_keys,json=cycleKeys,proto3" json:"cycle_keys,omitempty"` // now_ms 用于解析各区域当前生效的工资政策做档位估算。 - NowMs int64 `protobuf:"varint,5,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + NowMs int64 `protobuf:"varint,5,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTeamHostSalaryStatsRequest) Reset() { @@ -1985,12 +1966,11 @@ func (x *GetTeamHostSalaryStatsRequest) GetNowMs() int64 { } type GetTeamHostSalaryStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stats []*TeamHostSalaryCycleStat `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Stats []*TeamHostSalaryCycleStat `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTeamHostSalaryStatsResponse) Reset() { @@ -2039,19 +2019,18 @@ func (x *GetTeamHostSalaryStatsResponse) GetServerTimeMs() int64 { // AdminCreditAssetRequest 是后台手动入账/调账的最小审计命令。 type AdminCreditAssetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - EvidenceRef string `protobuf:"bytes,7,opt,name=evidence_ref,json=evidenceRef,proto3" json:"evidence_ref,omitempty"` - AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Remark string `protobuf:"bytes,9,opt,name=remark,proto3" json:"remark,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TargetUserId int64 `protobuf:"varint,2,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + EvidenceRef string `protobuf:"bytes,7,opt,name=evidence_ref,json=evidenceRef,proto3" json:"evidence_ref,omitempty"` + AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Remark string `protobuf:"bytes,9,opt,name=remark,proto3" json:"remark,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminCreditAssetRequest) Reset() { @@ -2148,12 +2127,11 @@ func (x *AdminCreditAssetRequest) GetRemark() string { } type AdminCreditAssetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdminCreditAssetResponse) Reset() { @@ -2202,23 +2180,22 @@ func (x *AdminCreditAssetResponse) GetBalance() *AssetBalance { // AdminCreditCoinSellerStockRequest 是后台调整币商专用库存的账务命令。 type AdminCreditCoinSellerStockRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - StockType string `protobuf:"bytes,3,opt,name=stock_type,json=stockType,proto3" json:"stock_type,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - PaidCurrencyCode string `protobuf:"bytes,5,opt,name=paid_currency_code,json=paidCurrencyCode,proto3" json:"paid_currency_code,omitempty"` - PaidAmountMicro int64 `protobuf:"varint,6,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` - PaymentRef string `protobuf:"bytes,7,opt,name=payment_ref,json=paymentRef,proto3" json:"payment_ref,omitempty"` - EvidenceRef string `protobuf:"bytes,8,opt,name=evidence_ref,json=evidenceRef,proto3" json:"evidence_ref,omitempty"` - OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - SellerCountryId int64 `protobuf:"varint,12,opt,name=seller_country_id,json=sellerCountryId,proto3" json:"seller_country_id,omitempty"` - SellerRegionId int64 `protobuf:"varint,13,opt,name=seller_region_id,json=sellerRegionId,proto3" json:"seller_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + StockType string `protobuf:"bytes,3,opt,name=stock_type,json=stockType,proto3" json:"stock_type,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + PaidCurrencyCode string `protobuf:"bytes,5,opt,name=paid_currency_code,json=paidCurrencyCode,proto3" json:"paid_currency_code,omitempty"` + PaidAmountMicro int64 `protobuf:"varint,6,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` + PaymentRef string `protobuf:"bytes,7,opt,name=payment_ref,json=paymentRef,proto3" json:"payment_ref,omitempty"` + EvidenceRef string `protobuf:"bytes,8,opt,name=evidence_ref,json=evidenceRef,proto3" json:"evidence_ref,omitempty"` + OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + SellerCountryId int64 `protobuf:"varint,12,opt,name=seller_country_id,json=sellerCountryId,proto3" json:"seller_country_id,omitempty"` + SellerRegionId int64 `protobuf:"varint,13,opt,name=seller_region_id,json=sellerRegionId,proto3" json:"seller_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminCreditCoinSellerStockRequest) Reset() { @@ -2343,19 +2320,18 @@ func (x *AdminCreditCoinSellerStockRequest) GetSellerRegionId() int64 { } type AdminCreditCoinSellerStockResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - StockType string `protobuf:"bytes,3,opt,name=stock_type,json=stockType,proto3" json:"stock_type,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - PaidCurrencyCode string `protobuf:"bytes,5,opt,name=paid_currency_code,json=paidCurrencyCode,proto3" json:"paid_currency_code,omitempty"` - PaidAmountMicro int64 `protobuf:"varint,6,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` - CountsAsSellerRecharge bool `protobuf:"varint,7,opt,name=counts_as_seller_recharge,json=countsAsSellerRecharge,proto3" json:"counts_as_seller_recharge,omitempty"` - BalanceAfter int64 `protobuf:"varint,8,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + StockType string `protobuf:"bytes,3,opt,name=stock_type,json=stockType,proto3" json:"stock_type,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + PaidCurrencyCode string `protobuf:"bytes,5,opt,name=paid_currency_code,json=paidCurrencyCode,proto3" json:"paid_currency_code,omitempty"` + PaidAmountMicro int64 `protobuf:"varint,6,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` + CountsAsSellerRecharge bool `protobuf:"varint,7,opt,name=counts_as_seller_recharge,json=countsAsSellerRecharge,proto3" json:"counts_as_seller_recharge,omitempty"` + BalanceAfter int64 `protobuf:"varint,8,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminCreditCoinSellerStockResponse) Reset() { @@ -2453,20 +2429,19 @@ func (x *AdminCreditCoinSellerStockResponse) GetCreatedAtMs() int64 { // TransferCoinFromSellerRequest 是币商给玩家转普通金币的内部账务命令。 type TransferCoinFromSellerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // seller_region_id、target_region_id 和 target_country_id 由 gateway 从 user-service 查询,不接受客户端提交。 SellerRegionId int64 `protobuf:"varint,7,opt,name=seller_region_id,json=sellerRegionId,proto3" json:"seller_region_id,omitempty"` TargetRegionId int64 `protobuf:"varint,8,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` TargetCountryId int64 `protobuf:"varint,9,opt,name=target_country_id,json=targetCountryId,proto3" json:"target_country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferCoinFromSellerRequest) Reset() { @@ -2564,20 +2539,19 @@ func (x *TransferCoinFromSellerRequest) GetTargetCountryId() int64 { // TransferCoinFromSellerResponse 同时返回金币到账结果和本次转账对应的充值金额口径。 type TransferCoinFromSellerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - SellerBalanceAfter int64 `protobuf:"varint,2,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` - TargetBalanceAfter int64 `protobuf:"varint,3,opt,name=target_balance_after,json=targetBalanceAfter,proto3" json:"target_balance_after,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - RechargeUsdMinor int64 `protobuf:"varint,5,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` - RechargeCurrencyCode string `protobuf:"bytes,6,opt,name=recharge_currency_code,json=rechargeCurrencyCode,proto3" json:"recharge_currency_code,omitempty"` - RechargePolicyId int64 `protobuf:"varint,7,opt,name=recharge_policy_id,json=rechargePolicyId,proto3" json:"recharge_policy_id,omitempty"` - RechargePolicyVersion string `protobuf:"bytes,8,opt,name=recharge_policy_version,json=rechargePolicyVersion,proto3" json:"recharge_policy_version,omitempty"` - RechargePolicyCoinAmount int64 `protobuf:"varint,9,opt,name=recharge_policy_coin_amount,json=rechargePolicyCoinAmount,proto3" json:"recharge_policy_coin_amount,omitempty"` - RechargePolicyUsdMinorAmount int64 `protobuf:"varint,10,opt,name=recharge_policy_usd_minor_amount,json=rechargePolicyUsdMinorAmount,proto3" json:"recharge_policy_usd_minor_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + SellerBalanceAfter int64 `protobuf:"varint,2,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` + TargetBalanceAfter int64 `protobuf:"varint,3,opt,name=target_balance_after,json=targetBalanceAfter,proto3" json:"target_balance_after,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + RechargeUsdMinor int64 `protobuf:"varint,5,opt,name=recharge_usd_minor,json=rechargeUsdMinor,proto3" json:"recharge_usd_minor,omitempty"` + RechargeCurrencyCode string `protobuf:"bytes,6,opt,name=recharge_currency_code,json=rechargeCurrencyCode,proto3" json:"recharge_currency_code,omitempty"` + RechargePolicyId int64 `protobuf:"varint,7,opt,name=recharge_policy_id,json=rechargePolicyId,proto3" json:"recharge_policy_id,omitempty"` + RechargePolicyVersion string `protobuf:"bytes,8,opt,name=recharge_policy_version,json=rechargePolicyVersion,proto3" json:"recharge_policy_version,omitempty"` + RechargePolicyCoinAmount int64 `protobuf:"varint,9,opt,name=recharge_policy_coin_amount,json=rechargePolicyCoinAmount,proto3" json:"recharge_policy_coin_amount,omitempty"` + RechargePolicyUsdMinorAmount int64 `protobuf:"varint,10,opt,name=recharge_policy_usd_minor_amount,json=rechargePolicyUsdMinorAmount,proto3" json:"recharge_policy_usd_minor_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferCoinFromSellerResponse) Reset() { @@ -2682,17 +2656,16 @@ func (x *TransferCoinFromSellerResponse) GetRechargePolicyUsdMinorAmount() int64 // TransferCoinSellerStockToChildRequest 是父币商向直属子币商转移专用金币库存的内部账务命令。 type TransferCoinSellerStockToChildRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` + ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,7,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - ParentUserId int64 `protobuf:"varint,2,opt,name=parent_user_id,json=parentUserId,proto3" json:"parent_user_id,omitempty"` - ChildUserId int64 `protobuf:"varint,3,opt,name=child_user_id,json=childUserId,proto3" json:"child_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,7,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TransferCoinSellerStockToChildRequest) Reset() { @@ -2775,15 +2748,14 @@ func (x *TransferCoinSellerStockToChildRequest) GetRegionId() int64 { } type TransferCoinSellerStockToChildResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - ParentBalanceAfter int64 `protobuf:"varint,2,opt,name=parent_balance_after,json=parentBalanceAfter,proto3" json:"parent_balance_after,omitempty"` - ChildBalanceAfter int64 `protobuf:"varint,3,opt,name=child_balance_after,json=childBalanceAfter,proto3" json:"child_balance_after,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + ParentBalanceAfter int64 `protobuf:"varint,2,opt,name=parent_balance_after,json=parentBalanceAfter,proto3" json:"parent_balance_after,omitempty"` + ChildBalanceAfter int64 `protobuf:"varint,3,opt,name=child_balance_after,json=childBalanceAfter,proto3" json:"child_balance_after,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + CreatedAtMs int64 `protobuf:"varint,5,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferCoinSellerStockToChildResponse) Reset() { @@ -2853,17 +2825,16 @@ func (x *TransferCoinSellerStockToChildResponse) GetCreatedAtMs() int64 { // CoinSellerSalaryExchangeRateTier 是用户工资转给币商时,按区域和美元金额命中的金币兑换区间。 type CoinSellerSalaryExchangeRateTier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RegionId int64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + MinUsdMinor int64 `protobuf:"varint,2,opt,name=min_usd_minor,json=minUsdMinor,proto3" json:"min_usd_minor,omitempty"` + MaxUsdMinor int64 `protobuf:"varint,3,opt,name=max_usd_minor,json=maxUsdMinor,proto3" json:"max_usd_minor,omitempty"` + CoinPerUsd int64 `protobuf:"varint,4,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RegionId int64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - MinUsdMinor int64 `protobuf:"varint,2,opt,name=min_usd_minor,json=minUsdMinor,proto3" json:"min_usd_minor,omitempty"` - MaxUsdMinor int64 `protobuf:"varint,3,opt,name=max_usd_minor,json=maxUsdMinor,proto3" json:"max_usd_minor,omitempty"` - CoinPerUsd int64 `protobuf:"varint,4,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CoinSellerSalaryExchangeRateTier) Reset() { @@ -2946,14 +2917,13 @@ func (x *CoinSellerSalaryExchangeRateTier) GetUpdatedAtMs() int64 { } type ListCoinSellerSalaryExchangeRateTiersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - IncludeDisabled bool `protobuf:"varint,4,opt,name=include_disabled,json=includeDisabled,proto3" json:"include_disabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + IncludeDisabled bool `protobuf:"varint,4,opt,name=include_disabled,json=includeDisabled,proto3" json:"include_disabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListCoinSellerSalaryExchangeRateTiersRequest) Reset() { @@ -3015,11 +2985,10 @@ func (x *ListCoinSellerSalaryExchangeRateTiersRequest) GetIncludeDisabled() bool } type ListCoinSellerSalaryExchangeRateTiersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tiers []*CoinSellerSalaryExchangeRateTier `protobuf:"bytes,1,rep,name=tiers,proto3" json:"tiers,omitempty"` unknownFields protoimpl.UnknownFields - - Tiers []*CoinSellerSalaryExchangeRateTier `protobuf:"bytes,1,rep,name=tiers,proto3" json:"tiers,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListCoinSellerSalaryExchangeRateTiersResponse) Reset() { @@ -3061,16 +3030,15 @@ func (x *ListCoinSellerSalaryExchangeRateTiersResponse) GetTiers() []*CoinSeller // ExchangeSalaryToCoinRequest 扣当前用户某个身份工资美元钱包,并按固定比例给同一用户加普通 COIN。 type ExchangeSalaryToCoinRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExchangeSalaryToCoinRequest) Reset() { @@ -3146,16 +3114,15 @@ func (x *ExchangeSalaryToCoinRequest) GetAppCode() string { } type ExchangeSalaryToCoinResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - SalaryBalanceAfter int64 `protobuf:"varint,2,opt,name=salary_balance_after,json=salaryBalanceAfter,proto3" json:"salary_balance_after,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - CoinPerUsd int64 `protobuf:"varint,6,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + SalaryBalanceAfter int64 `protobuf:"varint,2,opt,name=salary_balance_after,json=salaryBalanceAfter,proto3" json:"salary_balance_after,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + CoinPerUsd int64 `protobuf:"varint,6,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExchangeSalaryToCoinResponse) Reset() { @@ -3232,18 +3199,17 @@ func (x *ExchangeSalaryToCoinResponse) GetCoinPerUsd() int64 { // TransferSalaryToCoinSellerRequest 扣当前用户某个身份工资美元钱包,并按区域区间比例给同区域币商加专用金币库存。 type TransferSalaryToCoinSellerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SourceUserId int64 `protobuf:"varint,2,opt,name=source_user_id,json=sourceUserId,proto3" json:"source_user_id,omitempty"` - SellerUserId int64 `protobuf:"varint,3,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - SalaryAssetType string `protobuf:"bytes,4,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,5,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SourceUserId int64 `protobuf:"varint,2,opt,name=source_user_id,json=sourceUserId,proto3" json:"source_user_id,omitempty"` + SellerUserId int64 `protobuf:"varint,3,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + SalaryAssetType string `protobuf:"bytes,4,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,5,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,8,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferSalaryToCoinSellerRequest) Reset() { @@ -3333,18 +3299,17 @@ func (x *TransferSalaryToCoinSellerRequest) GetAppCode() string { } type TransferSalaryToCoinSellerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - SourceSalaryBalanceAfter int64 `protobuf:"varint,2,opt,name=source_salary_balance_after,json=sourceSalaryBalanceAfter,proto3" json:"source_salary_balance_after,omitempty"` - SellerBalanceAfter int64 `protobuf:"varint,3,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - CoinPerUsd int64 `protobuf:"varint,6,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` - RateMinUsdMinor int64 `protobuf:"varint,7,opt,name=rate_min_usd_minor,json=rateMinUsdMinor,proto3" json:"rate_min_usd_minor,omitempty"` - RateMaxUsdMinor int64 `protobuf:"varint,8,opt,name=rate_max_usd_minor,json=rateMaxUsdMinor,proto3" json:"rate_max_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + SourceSalaryBalanceAfter int64 `protobuf:"varint,2,opt,name=source_salary_balance_after,json=sourceSalaryBalanceAfter,proto3" json:"source_salary_balance_after,omitempty"` + SellerBalanceAfter int64 `protobuf:"varint,3,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + CoinPerUsd int64 `protobuf:"varint,6,opt,name=coin_per_usd,json=coinPerUsd,proto3" json:"coin_per_usd,omitempty"` + RateMinUsdMinor int64 `protobuf:"varint,7,opt,name=rate_min_usd_minor,json=rateMinUsdMinor,proto3" json:"rate_min_usd_minor,omitempty"` + RateMaxUsdMinor int64 `protobuf:"varint,8,opt,name=rate_max_usd_minor,json=rateMaxUsdMinor,proto3" json:"rate_max_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferSalaryToCoinSellerResponse) Reset() { @@ -3435,17 +3400,16 @@ func (x *TransferSalaryToCoinSellerResponse) GetRateMaxUsdMinor() int64 { // FreezeSalaryWithdrawalRequest 将用户工资美元从可用余额转入冻结余额,等待财务审核。 type FreezeSalaryWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WithdrawalRef string `protobuf:"bytes,7,opt,name=withdrawal_ref,json=withdrawalRef,proto3" json:"withdrawal_ref,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,6,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WithdrawalRef string `protobuf:"bytes,7,opt,name=withdrawal_ref,json=withdrawalRef,proto3" json:"withdrawal_ref,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FreezeSalaryWithdrawalRequest) Reset() { @@ -3528,13 +3492,12 @@ func (x *FreezeSalaryWithdrawalRequest) GetWithdrawalRef() string { } type FreezeSalaryWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FreezeSalaryWithdrawalResponse) Reset() { @@ -3590,18 +3553,17 @@ func (x *FreezeSalaryWithdrawalResponse) GetSalaryUsdMinor() int64 { // SettleSalaryWithdrawalRequest 在审核通过时扣掉已冻结工资;不会再扣可用余额。 type SettleSalaryWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WithdrawalApplicationId string `protobuf:"bytes,8,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WithdrawalApplicationId string `protobuf:"bytes,8,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SettleSalaryWithdrawalRequest) Reset() { @@ -3691,13 +3653,12 @@ func (x *SettleSalaryWithdrawalRequest) GetWithdrawalApplicationId() string { } type SettleSalaryWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SettleSalaryWithdrawalResponse) Reset() { @@ -3753,18 +3714,17 @@ func (x *SettleSalaryWithdrawalResponse) GetSalaryUsdMinor() int64 { // ReleaseSalaryWithdrawalRequest 在审核拒绝或申请创建失败回滚时把冻结工资返还到可用余额。 type ReleaseSalaryWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WithdrawalApplicationId string `protobuf:"bytes,8,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SalaryAssetType string `protobuf:"bytes,3,opt,name=salary_asset_type,json=salaryAssetType,proto3" json:"salary_asset_type,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,4,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,7,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WithdrawalApplicationId string `protobuf:"bytes,8,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReleaseSalaryWithdrawalRequest) Reset() { @@ -3854,13 +3814,12 @@ func (x *ReleaseSalaryWithdrawalRequest) GetWithdrawalApplicationId() string { } type ReleaseSalaryWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + SalaryUsdMinor int64 `protobuf:"varint,3,opt,name=salary_usd_minor,json=salaryUsdMinor,proto3" json:"salary_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReleaseSalaryWithdrawalResponse) Reset() { @@ -3916,12 +3875,9 @@ func (x *ReleaseSalaryWithdrawalResponse) GetSalaryUsdMinor() int64 { // FreezePointWithdrawalRequest 将 Huwaa 策略积分从可用余额冻结到提现审核池。 type FreezePointWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // asset_type 只能是 POINT 或 COIN_SELLER_POINT;旧工资美元资产继续使用 SalaryWithdrawal 接口。 AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` // gross_point_amount 是本次冻结的积分总额,Huwaa 普通 POINT 最低 1,000,000。 @@ -3936,6 +3892,8 @@ type FreezePointWithdrawalRequest struct { Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` AppCode string `protobuf:"bytes,10,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` WithdrawalRef string `protobuf:"bytes,11,opt,name=withdrawal_ref,json=withdrawalRef,proto3" json:"withdrawal_ref,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FreezePointWithdrawalRequest) Reset() { @@ -4046,17 +4004,16 @@ func (x *FreezePointWithdrawalRequest) GetWithdrawalRef() string { } type FreezePointWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` - FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` - NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` - PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` + FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` + NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` + PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FreezePointWithdrawalResponse) Reset() { @@ -4140,22 +4097,21 @@ func (x *FreezePointWithdrawalResponse) GetFeeBps() int32 { // SettlePointWithdrawalRequest 在审核通过时扣掉已冻结积分;不会再次扣 available。 type SettlePointWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - GrossPointAmount int64 `protobuf:"varint,4,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` - FeePointAmount int64 `protobuf:"varint,5,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` - NetPointAmount int64 `protobuf:"varint,6,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` - PointsPerUsd int64 `protobuf:"varint,7,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,8,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` - OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WithdrawalApplicationId string `protobuf:"bytes,12,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + GrossPointAmount int64 `protobuf:"varint,4,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` + FeePointAmount int64 `protobuf:"varint,5,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` + NetPointAmount int64 `protobuf:"varint,6,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` + PointsPerUsd int64 `protobuf:"varint,7,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,8,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WithdrawalApplicationId string `protobuf:"bytes,12,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SettlePointWithdrawalRequest) Reset() { @@ -4273,17 +4229,16 @@ func (x *SettlePointWithdrawalRequest) GetWithdrawalApplicationId() string { } type SettlePointWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` - FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` - NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` - PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` + FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` + NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` + PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SettlePointWithdrawalResponse) Reset() { @@ -4367,22 +4322,21 @@ func (x *SettlePointWithdrawalResponse) GetFeeBps() int32 { // ReleasePointWithdrawalRequest 在审核拒绝或申请创建失败时释放冻结积分。 type ReleasePointWithdrawalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - GrossPointAmount int64 `protobuf:"varint,4,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` - FeePointAmount int64 `protobuf:"varint,5,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` - NetPointAmount int64 `protobuf:"varint,6,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` - PointsPerUsd int64 `protobuf:"varint,7,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,8,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` - OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` - AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - WithdrawalApplicationId string `protobuf:"bytes,12,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AssetType string `protobuf:"bytes,3,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + GrossPointAmount int64 `protobuf:"varint,4,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` + FeePointAmount int64 `protobuf:"varint,5,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` + NetPointAmount int64 `protobuf:"varint,6,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` + PointsPerUsd int64 `protobuf:"varint,7,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,8,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` + AppCode string `protobuf:"bytes,11,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + WithdrawalApplicationId string `protobuf:"bytes,12,opt,name=withdrawal_application_id,json=withdrawalApplicationId,proto3" json:"withdrawal_application_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReleasePointWithdrawalRequest) Reset() { @@ -4500,17 +4454,16 @@ func (x *ReleasePointWithdrawalRequest) GetWithdrawalApplicationId() string { } type ReleasePointWithdrawalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` - FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` - NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` - PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + GrossPointAmount int64 `protobuf:"varint,3,opt,name=gross_point_amount,json=grossPointAmount,proto3" json:"gross_point_amount,omitempty"` + FeePointAmount int64 `protobuf:"varint,4,opt,name=fee_point_amount,json=feePointAmount,proto3" json:"fee_point_amount,omitempty"` + NetPointAmount int64 `protobuf:"varint,5,opt,name=net_point_amount,json=netPointAmount,proto3" json:"net_point_amount,omitempty"` + PointsPerUsd int64 `protobuf:"varint,6,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,7,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReleasePointWithdrawalResponse) Reset() { @@ -4594,35 +4547,34 @@ func (x *ReleasePointWithdrawalResponse) GetFeeBps() int32 { // Resource 是资源库里可配置、可赠送、可被礼物引用的最小资源。 type Resource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceCode string `protobuf:"bytes,3,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - Grantable bool `protobuf:"varint,7,opt,name=grantable,proto3" json:"grantable,omitempty"` - GrantStrategy string `protobuf:"bytes,8,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` - WalletAssetType string `protobuf:"bytes,9,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` - WalletAssetAmount int64 `protobuf:"varint,10,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` - UsageScopes []string `protobuf:"bytes,11,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` - AssetUrl string `protobuf:"bytes,12,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,13,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,14,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` - MetadataJson string `protobuf:"bytes,15,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedByUserId int64 `protobuf:"varint,17,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - UpdatedByUserId int64 `protobuf:"varint,18,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,19,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,20,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ManagerGrantEnabled bool `protobuf:"varint,21,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3" json:"manager_grant_enabled,omitempty"` - PriceType string `protobuf:"bytes,22,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` - CoinPrice int64 `protobuf:"varint,23,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceCode string `protobuf:"bytes,3,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + Grantable bool `protobuf:"varint,7,opt,name=grantable,proto3" json:"grantable,omitempty"` + GrantStrategy string `protobuf:"bytes,8,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` + WalletAssetType string `protobuf:"bytes,9,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,10,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + UsageScopes []string `protobuf:"bytes,11,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` + AssetUrl string `protobuf:"bytes,12,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,13,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,14,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + MetadataJson string `protobuf:"bytes,15,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedByUserId int64 `protobuf:"varint,17,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,18,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,19,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,20,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ManagerGrantEnabled bool `protobuf:"varint,21,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3" json:"manager_grant_enabled,omitempty"` + PriceType string `protobuf:"bytes,22,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` + CoinPrice int64 `protobuf:"varint,23,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;资源和礼物价格现在只维护真实 COIN 价格,新写入固定为 0。 GiftPointAmount int64 `protobuf:"varint,24,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Resource) Reset() { @@ -4824,22 +4776,21 @@ func (x *Resource) GetGiftPointAmount() int64 { } type ResourceGroupItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupItemId int64 `protobuf:"varint,1,opt,name=group_item_id,json=groupItemId,proto3" json:"group_item_id,omitempty"` - GroupId int64 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` - Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` - DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ItemType string `protobuf:"bytes,10,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` - WalletAssetType string `protobuf:"bytes,11,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` - WalletAssetAmount int64 `protobuf:"varint,12,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GroupItemId int64 `protobuf:"varint,1,opt,name=group_item_id,json=groupItemId,proto3" json:"group_item_id,omitempty"` + GroupId int64 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` + DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ItemType string `protobuf:"bytes,10,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` + WalletAssetType string `protobuf:"bytes,11,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,12,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceGroupItem) Reset() { @@ -4957,22 +4908,21 @@ func (x *ResourceGroupItem) GetWalletAssetAmount() int64 { } type ResourceGroup struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GroupId int64 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - GroupCode string `protobuf:"bytes,3,opt,name=group_code,json=groupCode,proto3" json:"group_code,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - Items []*ResourceGroupItem `protobuf:"bytes,8,rep,name=items,proto3" json:"items,omitempty"` - CreatedByUserId int64 `protobuf:"varint,9,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - UpdatedByUserId int64 `protobuf:"varint,10,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GroupId int64 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + GroupCode string `protobuf:"bytes,3,opt,name=group_code,json=groupCode,proto3" json:"group_code,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Items []*ResourceGroupItem `protobuf:"bytes,8,rep,name=items,proto3" json:"items,omitempty"` + CreatedByUserId int64 `protobuf:"varint,9,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,10,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceGroup) Reset() { @@ -5089,21 +5039,303 @@ func (x *ResourceGroup) GetUpdatedAtMs() int64 { return 0 } -type GiftConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +// ResourceGroupSnapshot 是 owner 在业务发布时钉住的不可变奖励承诺。后续资源组编辑、停用 +// 或资源展示信息变化都不会改变 snapshot_id 对应的实际发放内容和 App 展示内容。 +type ResourceGroupSnapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + SnapshotId string `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + PinKey string `protobuf:"bytes,3,opt,name=pin_key,json=pinKey,proto3" json:"pin_key,omitempty"` + SourceGroupId int64 `protobuf:"varint,4,opt,name=source_group_id,json=sourceGroupId,proto3" json:"source_group_id,omitempty"` + VersionNo int64 `protobuf:"varint,5,opt,name=version_no,json=versionNo,proto3" json:"version_no,omitempty"` + SnapshotHash string `protobuf:"bytes,6,opt,name=snapshot_hash,json=snapshotHash,proto3" json:"snapshot_hash,omitempty"` + Group *ResourceGroup `protobuf:"bytes,7,opt,name=group,proto3" json:"group,omitempty"` + CreatedByUserId int64 `protobuf:"varint,8,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + SourceGroupUpdatedAtMs int64 `protobuf:"varint,10,opt,name=source_group_updated_at_ms,json=sourceGroupUpdatedAtMs,proto3" json:"source_group_updated_at_ms,omitempty"` + // source_content_hash 覆盖资源组、组项和嵌套资源的完整规范化内容;成员资源独立编辑也会改变该值。 + SourceContentHash string `protobuf:"bytes,11,opt,name=source_content_hash,json=sourceContentHash,proto3" json:"source_content_hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` - PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` +func (x *ResourceGroupSnapshot) Reset() { + *x = ResourceGroupSnapshot{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResourceGroupSnapshot) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceGroupSnapshot) ProtoMessage() {} + +func (x *ResourceGroupSnapshot) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceGroupSnapshot.ProtoReflect.Descriptor instead. +func (*ResourceGroupSnapshot) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{51} +} + +func (x *ResourceGroupSnapshot) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *ResourceGroupSnapshot) GetSnapshotId() string { + if x != nil { + return x.SnapshotId + } + return "" +} + +func (x *ResourceGroupSnapshot) GetPinKey() string { + if x != nil { + return x.PinKey + } + return "" +} + +func (x *ResourceGroupSnapshot) GetSourceGroupId() int64 { + if x != nil { + return x.SourceGroupId + } + return 0 +} + +func (x *ResourceGroupSnapshot) GetVersionNo() int64 { + if x != nil { + return x.VersionNo + } + return 0 +} + +func (x *ResourceGroupSnapshot) GetSnapshotHash() string { + if x != nil { + return x.SnapshotHash + } + return "" +} + +func (x *ResourceGroupSnapshot) GetGroup() *ResourceGroup { + if x != nil { + return x.Group + } + return nil +} + +func (x *ResourceGroupSnapshot) GetCreatedByUserId() int64 { + if x != nil { + return x.CreatedByUserId + } + return 0 +} + +func (x *ResourceGroupSnapshot) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ResourceGroupSnapshot) GetSourceGroupUpdatedAtMs() int64 { + if x != nil { + return x.SourceGroupUpdatedAtMs + } + return 0 +} + +func (x *ResourceGroupSnapshot) GetSourceContentHash() string { + if x != nil { + return x.SourceContentHash + } + return "" +} + +type PinResourceGroupSnapshotRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // pin_key 由发布方按业务版本生成;重试同一 key 必须返回同一快照。 + PinKey string `protobuf:"bytes,4,opt,name=pin_key,json=pinKey,proto3" json:"pin_key,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + // wallet 锁住来源组后必须再次匹配,避免 Get->Pin 间编辑竞态固化错误版本。 + ExpectedGroupUpdatedAtMs int64 `protobuf:"varint,6,opt,name=expected_group_updated_at_ms,json=expectedGroupUpdatedAtMs,proto3" json:"expected_group_updated_at_ms,omitempty"` + // GetResourceGroup 返回的 owner 内容版本。wallet 在事务内锁住组、组项和资源后重新计算并匹配。 + ExpectedSourceContentHash string `protobuf:"bytes,7,opt,name=expected_source_content_hash,json=expectedSourceContentHash,proto3" json:"expected_source_content_hash,omitempty"` + // required_region_ids 是发布方要求奖励可发送的可信 active region 集合;wallet 对 gift resource + // 按 pin-time gift config 区域并集逐区 fail-close。空集合仅供不带区域语义的旧调用。 + RequiredRegionIds []int64 `protobuf:"varint,8,rep,packed,name=required_region_ids,json=requiredRegionIds,proto3" json:"required_region_ids,omitempty"` + // required_all_regions=true 时必须存在 region_id=0 的 pin-time gift config,确保发布后新增区域也可用。 + RequiredAllRegions bool `protobuf:"varint,9,opt,name=required_all_regions,json=requiredAllRegions,proto3" json:"required_all_regions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PinResourceGroupSnapshotRequest) Reset() { + *x = PinResourceGroupSnapshotRequest{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PinResourceGroupSnapshotRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PinResourceGroupSnapshotRequest) ProtoMessage() {} + +func (x *PinResourceGroupSnapshotRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PinResourceGroupSnapshotRequest.ProtoReflect.Descriptor instead. +func (*PinResourceGroupSnapshotRequest) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{52} +} + +func (x *PinResourceGroupSnapshotRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +func (x *PinResourceGroupSnapshotRequest) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *PinResourceGroupSnapshotRequest) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *PinResourceGroupSnapshotRequest) GetPinKey() string { + if x != nil { + return x.PinKey + } + return "" +} + +func (x *PinResourceGroupSnapshotRequest) GetOperatorUserId() int64 { + if x != nil { + return x.OperatorUserId + } + return 0 +} + +func (x *PinResourceGroupSnapshotRequest) GetExpectedGroupUpdatedAtMs() int64 { + if x != nil { + return x.ExpectedGroupUpdatedAtMs + } + return 0 +} + +func (x *PinResourceGroupSnapshotRequest) GetExpectedSourceContentHash() string { + if x != nil { + return x.ExpectedSourceContentHash + } + return "" +} + +func (x *PinResourceGroupSnapshotRequest) GetRequiredRegionIds() []int64 { + if x != nil { + return x.RequiredRegionIds + } + return nil +} + +func (x *PinResourceGroupSnapshotRequest) GetRequiredAllRegions() bool { + if x != nil { + return x.RequiredAllRegions + } + return false +} + +type PinResourceGroupSnapshotResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Snapshot *ResourceGroupSnapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PinResourceGroupSnapshotResponse) Reset() { + *x = PinResourceGroupSnapshotResponse{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PinResourceGroupSnapshotResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PinResourceGroupSnapshotResponse) ProtoMessage() {} + +func (x *PinResourceGroupSnapshotResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PinResourceGroupSnapshotResponse.ProtoReflect.Descriptor instead. +func (*PinResourceGroupSnapshotResponse) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{53} +} + +func (x *PinResourceGroupSnapshotResponse) GetSnapshot() *ResourceGroupSnapshot { + if x != nil { + return x.Snapshot + } + return nil +} + +type GiftConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` + PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;送礼结算不再读取该值,新写入固定为 0。 GiftPointAmount int64 `protobuf:"varint,11,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` HeatValue int64 `protobuf:"varint,12,opt,name=heat_value,json=heatValue,proto3" json:"heat_value,omitempty"` @@ -5118,11 +5350,13 @@ type GiftConfig struct { EffectiveToMs int64 `protobuf:"varint,21,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` EffectTypes []string `protobuf:"bytes,22,rep,name=effect_types,json=effectTypes,proto3" json:"effect_types,omitempty"` CpRelationType string `protobuf:"bytes,23,opt,name=cp_relation_type,json=cpRelationType,proto3" json:"cp_relation_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GiftConfig) Reset() { *x = GiftConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5134,7 +5368,7 @@ func (x *GiftConfig) String() string { func (*GiftConfig) ProtoMessage() {} func (x *GiftConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5147,7 +5381,7 @@ func (x *GiftConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftConfig.ProtoReflect.Descriptor instead. func (*GiftConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{51} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{54} } func (x *GiftConfig) GetAppCode() string { @@ -5312,25 +5546,24 @@ func (x *GiftConfig) GetCpRelationType() string { } type GiftTypeConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TypeCode string `protobuf:"bytes,2,opt,name=type_code,json=typeCode,proto3" json:"type_code,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - TabKey string `protobuf:"bytes,4,opt,name=tab_key,json=tabKey,proto3" json:"tab_key,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedByUserId int64 `protobuf:"varint,7,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - UpdatedByUserId int64 `protobuf:"varint,8,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TypeCode string `protobuf:"bytes,2,opt,name=type_code,json=typeCode,proto3" json:"type_code,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + TabKey string `protobuf:"bytes,4,opt,name=tab_key,json=tabKey,proto3" json:"tab_key,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedByUserId int64 `protobuf:"varint,7,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,8,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GiftTypeConfig) Reset() { *x = GiftTypeConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5342,7 +5575,7 @@ func (x *GiftTypeConfig) String() string { func (*GiftTypeConfig) ProtoMessage() {} func (x *GiftTypeConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5355,7 +5588,7 @@ func (x *GiftTypeConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftTypeConfig.ProtoReflect.Descriptor instead. func (*GiftTypeConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{52} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{55} } func (x *GiftTypeConfig) GetAppCode() string { @@ -5429,30 +5662,29 @@ func (x *GiftTypeConfig) GetUpdatedAtMs() int64 { } type ResourceShopItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ShopItemId int64 `protobuf:"varint,2,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - DurationDays int32 `protobuf:"varint,6,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` - PriceType string `protobuf:"bytes,7,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` - CoinPrice int64 `protobuf:"varint,8,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,9,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - EffectiveToMs int64 `protobuf:"varint,10,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` - SortOrder int32 `protobuf:"varint,11,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedByUserId int64 `protobuf:"varint,12,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - UpdatedByUserId int64 `protobuf:"varint,13,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ShopItemId int64 `protobuf:"varint,2,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + DurationDays int32 `protobuf:"varint,6,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + PriceType string `protobuf:"bytes,7,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` + CoinPrice int64 `protobuf:"varint,8,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,9,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,10,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + SortOrder int32 `protobuf:"varint,11,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedByUserId int64 `protobuf:"varint,12,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,13,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceShopItem) Reset() { *x = ResourceShopItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5464,7 +5696,7 @@ func (x *ResourceShopItem) String() string { func (*ResourceShopItem) ProtoMessage() {} func (x *ResourceShopItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5477,7 +5709,7 @@ func (x *ResourceShopItem) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceShopItem.ProtoReflect.Descriptor instead. func (*ResourceShopItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{53} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{56} } func (x *ResourceShopItem) GetAppCode() string { @@ -5586,29 +5818,33 @@ func (x *ResourceShopItem) GetUpdatedAtMs() int64 { } type UserResourceEntitlement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - EntitlementId string `protobuf:"bytes,2,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,5,opt,name=resource,proto3" json:"resource,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - Quantity int64 `protobuf:"varint,7,opt,name=quantity,proto3" json:"quantity,omitempty"` - RemainingQuantity int64 `protobuf:"varint,8,opt,name=remaining_quantity,json=remainingQuantity,proto3" json:"remaining_quantity,omitempty"` - EffectiveAtMs int64 `protobuf:"varint,9,opt,name=effective_at_ms,json=effectiveAtMs,proto3" json:"effective_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,10,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - SourceGrantId string `protobuf:"bytes,11,opt,name=source_grant_id,json=sourceGrantId,proto3" json:"source_grant_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - Equipped bool `protobuf:"varint,14,opt,name=equipped,proto3" json:"equipped,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + EntitlementId string `protobuf:"bytes,2,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,5,opt,name=resource,proto3" json:"resource,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + Quantity int64 `protobuf:"varint,7,opt,name=quantity,proto3" json:"quantity,omitempty"` + RemainingQuantity int64 `protobuf:"varint,8,opt,name=remaining_quantity,json=remainingQuantity,proto3" json:"remaining_quantity,omitempty"` + EffectiveAtMs int64 `protobuf:"varint,9,opt,name=effective_at_ms,json=effectiveAtMs,proto3" json:"effective_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,10,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + SourceGrantId string `protobuf:"bytes,11,opt,name=source_grant_id,json=sourceGrantId,proto3" json:"source_grant_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + Equipped bool `protobuf:"varint,14,opt,name=equipped,proto3" json:"equipped,omitempty"` + SourceSnapshotId string `protobuf:"bytes,15,opt,name=source_snapshot_id,json=sourceSnapshotId,proto3" json:"source_snapshot_id,omitempty"` + ResourceSnapshotHash string `protobuf:"bytes,16,opt,name=resource_snapshot_hash,json=resourceSnapshotHash,proto3" json:"resource_snapshot_hash,omitempty"` + // pinned_gift_configs 仅在 source_snapshot_id 非空且资源类型为 gift 时返回。内容已由 wallet + // 校验 hash/resource/app 绑定,App 背包必须优先使用它,legacy entitlement 才回退当前目录。 + PinnedGiftConfigs []*GiftConfig `protobuf:"bytes,17,rep,name=pinned_gift_configs,json=pinnedGiftConfigs,proto3" json:"pinned_gift_configs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserResourceEntitlement) Reset() { *x = UserResourceEntitlement{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5620,7 +5856,7 @@ func (x *UserResourceEntitlement) String() string { func (*UserResourceEntitlement) ProtoMessage() {} func (x *UserResourceEntitlement) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5633,7 +5869,7 @@ func (x *UserResourceEntitlement) ProtoReflect() protoreflect.Message { // Deprecated: Use UserResourceEntitlement.ProtoReflect.Descriptor instead. func (*UserResourceEntitlement) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{54} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{57} } func (x *UserResourceEntitlement) GetAppCode() string { @@ -5734,26 +5970,46 @@ func (x *UserResourceEntitlement) GetEquipped() bool { return false } -type ResourceGrantItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *UserResourceEntitlement) GetSourceSnapshotId() string { + if x != nil { + return x.SourceSnapshotId + } + return "" +} - GrantItemId int64 `protobuf:"varint,1,opt,name=grant_item_id,json=grantItemId,proto3" json:"grant_item_id,omitempty"` - GrantId string `protobuf:"bytes,2,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceSnapshotJson string `protobuf:"bytes,4,opt,name=resource_snapshot_json,json=resourceSnapshotJson,proto3" json:"resource_snapshot_json,omitempty"` - Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` - DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - ResultType string `protobuf:"bytes,7,opt,name=result_type,json=resultType,proto3" json:"result_type,omitempty"` - WalletTransactionId string `protobuf:"bytes,8,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - EntitlementId string `protobuf:"bytes,9,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` +func (x *UserResourceEntitlement) GetResourceSnapshotHash() string { + if x != nil { + return x.ResourceSnapshotHash + } + return "" +} + +func (x *UserResourceEntitlement) GetPinnedGiftConfigs() []*GiftConfig { + if x != nil { + return x.PinnedGiftConfigs + } + return nil +} + +type ResourceGrantItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + GrantItemId int64 `protobuf:"varint,1,opt,name=grant_item_id,json=grantItemId,proto3" json:"grant_item_id,omitempty"` + GrantId string `protobuf:"bytes,2,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceSnapshotJson string `protobuf:"bytes,4,opt,name=resource_snapshot_json,json=resourceSnapshotJson,proto3" json:"resource_snapshot_json,omitempty"` + Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` + DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + ResultType string `protobuf:"bytes,7,opt,name=result_type,json=resultType,proto3" json:"result_type,omitempty"` + WalletTransactionId string `protobuf:"bytes,8,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + EntitlementId string `protobuf:"bytes,9,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceGrantItem) Reset() { *x = ResourceGrantItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5765,7 +6021,7 @@ func (x *ResourceGrantItem) String() string { func (*ResourceGrantItem) ProtoMessage() {} func (x *ResourceGrantItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5778,7 +6034,7 @@ func (x *ResourceGrantItem) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrantItem.ProtoReflect.Descriptor instead. func (*ResourceGrantItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{55} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{58} } func (x *ResourceGrantItem) GetGrantItemId() int64 { @@ -5852,31 +6108,30 @@ func (x *ResourceGrantItem) GetCreatedAtMs() int64 { } type ResourceGrant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GrantId string `protobuf:"bytes,2,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GrantSource string `protobuf:"bytes,5,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` - GrantSubjectType string `protobuf:"bytes,6,opt,name=grant_subject_type,json=grantSubjectType,proto3" json:"grant_subject_type,omitempty"` - GrantSubjectId string `protobuf:"bytes,7,opt,name=grant_subject_id,json=grantSubjectId,proto3" json:"grant_subject_id,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` - OperatorUserId int64 `protobuf:"varint,10,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Items []*ResourceGrantItem `protobuf:"bytes,11,rep,name=items,proto3" json:"items,omitempty"` - CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - RevokedAtMs int64 `protobuf:"varint,14,opt,name=revoked_at_ms,json=revokedAtMs,proto3" json:"revoked_at_ms,omitempty"` - RevokedByUserId int64 `protobuf:"varint,15,opt,name=revoked_by_user_id,json=revokedByUserId,proto3" json:"revoked_by_user_id,omitempty"` - RevokeReason string `protobuf:"bytes,16,opt,name=revoke_reason,json=revokeReason,proto3" json:"revoke_reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GrantId string `protobuf:"bytes,2,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GrantSource string `protobuf:"bytes,5,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + GrantSubjectType string `protobuf:"bytes,6,opt,name=grant_subject_type,json=grantSubjectType,proto3" json:"grant_subject_type,omitempty"` + GrantSubjectId string `protobuf:"bytes,7,opt,name=grant_subject_id,json=grantSubjectId,proto3" json:"grant_subject_id,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + OperatorUserId int64 `protobuf:"varint,10,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Items []*ResourceGrantItem `protobuf:"bytes,11,rep,name=items,proto3" json:"items,omitempty"` + CreatedAtMs int64 `protobuf:"varint,12,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,13,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + RevokedAtMs int64 `protobuf:"varint,14,opt,name=revoked_at_ms,json=revokedAtMs,proto3" json:"revoked_at_ms,omitempty"` + RevokedByUserId int64 `protobuf:"varint,15,opt,name=revoked_by_user_id,json=revokedByUserId,proto3" json:"revoked_by_user_id,omitempty"` + RevokeReason string `protobuf:"bytes,16,opt,name=revoke_reason,json=revokeReason,proto3" json:"revoke_reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceGrant) Reset() { *x = ResourceGrant{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5888,7 +6143,7 @@ func (x *ResourceGrant) String() string { func (*ResourceGrant) ProtoMessage() {} func (x *ResourceGrant) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5901,7 +6156,7 @@ func (x *ResourceGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrant.ProtoReflect.Descriptor instead. func (*ResourceGrant) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{56} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{59} } func (x *ResourceGrant) GetAppCode() string { @@ -6017,22 +6272,21 @@ func (x *ResourceGrant) GetRevokeReason() string { } type ResourceGroupItemInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Quantity int64 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` - DurationMs int64 `protobuf:"varint,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - SortOrder int32 `protobuf:"varint,4,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - ItemType string `protobuf:"bytes,5,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` - WalletAssetType string `protobuf:"bytes,6,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` - WalletAssetAmount int64 `protobuf:"varint,7,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Quantity int64 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` + DurationMs int64 `protobuf:"varint,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + SortOrder int32 `protobuf:"varint,4,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + ItemType string `protobuf:"bytes,5,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` + WalletAssetType string `protobuf:"bytes,6,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,7,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceGroupItemInput) Reset() { *x = ResourceGroupItemInput{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6044,7 +6298,7 @@ func (x *ResourceGroupItemInput) String() string { func (*ResourceGroupItemInput) ProtoMessage() {} func (x *ResourceGroupItemInput) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6057,7 +6311,7 @@ func (x *ResourceGroupItemInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGroupItemInput.ProtoReflect.Descriptor instead. func (*ResourceGroupItemInput) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{57} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{60} } func (x *ResourceGroupItemInput) GetResourceId() int64 { @@ -6110,24 +6364,23 @@ func (x *ResourceGroupItemInput) GetWalletAssetAmount() int64 { } type ListResourcesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ActiveOnly bool `protobuf:"varint,8,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` - ManagerGrantOnly bool `protobuf:"varint,9,opt,name=manager_grant_only,json=managerGrantOnly,proto3" json:"manager_grant_only,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ActiveOnly bool `protobuf:"varint,8,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + ManagerGrantOnly bool `protobuf:"varint,9,opt,name=manager_grant_only,json=managerGrantOnly,proto3" json:"manager_grant_only,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListResourcesRequest) Reset() { *x = ListResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6139,7 +6392,7 @@ func (x *ListResourcesRequest) String() string { func (*ListResourcesRequest) ProtoMessage() {} func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6152,7 +6405,7 @@ func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesRequest.ProtoReflect.Descriptor instead. func (*ListResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{58} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{61} } func (x *ListResourcesRequest) GetRequestId() string { @@ -6219,17 +6472,16 @@ func (x *ListResourcesRequest) GetManagerGrantOnly() bool { } type ListResourcesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourcesResponse) Reset() { *x = ListResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6241,7 +6493,7 @@ func (x *ListResourcesResponse) String() string { func (*ListResourcesResponse) ProtoMessage() {} func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6254,7 +6506,7 @@ func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesResponse.ProtoReflect.Descriptor instead. func (*ListResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{59} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{62} } func (x *ListResourcesResponse) GetResources() []*Resource { @@ -6272,18 +6524,17 @@ func (x *ListResourcesResponse) GetTotal() int64 { } type GetResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResourceRequest) Reset() { *x = GetResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6295,7 +6546,7 @@ func (x *GetResourceRequest) String() string { func (*GetResourceRequest) ProtoMessage() {} func (x *GetResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6308,7 +6559,7 @@ func (x *GetResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceRequest.ProtoReflect.Descriptor instead. func (*GetResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{60} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{63} } func (x *GetResourceRequest) GetRequestId() string { @@ -6333,16 +6584,15 @@ func (x *GetResourceRequest) GetResourceId() int64 { } type GetResourceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` unknownFields protoimpl.UnknownFields - - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResourceResponse) Reset() { *x = GetResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6354,7 +6604,7 @@ func (x *GetResourceResponse) String() string { func (*GetResourceResponse) ProtoMessage() {} func (x *GetResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6367,7 +6617,7 @@ func (x *GetResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceResponse.ProtoReflect.Descriptor instead. func (*GetResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{61} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{64} } func (x *GetResourceResponse) GetResource() *Resource { @@ -6378,37 +6628,36 @@ func (x *GetResourceResponse) GetResource() *Resource { } type CreateResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceCode string `protobuf:"bytes,3,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - Grantable bool `protobuf:"varint,7,opt,name=grantable,proto3" json:"grantable,omitempty"` - GrantStrategy string `protobuf:"bytes,8,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` - WalletAssetType string `protobuf:"bytes,9,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` - WalletAssetAmount int64 `protobuf:"varint,10,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` - UsageScopes []string `protobuf:"bytes,11,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` - AssetUrl string `protobuf:"bytes,12,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,13,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,14,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` - MetadataJson string `protobuf:"bytes,15,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - OperatorUserId int64 `protobuf:"varint,17,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - ManagerGrantEnabled *bool `protobuf:"varint,18,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3,oneof" json:"manager_grant_enabled,omitempty"` - PriceType string `protobuf:"bytes,19,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` - CoinPrice int64 `protobuf:"varint,20,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceCode string `protobuf:"bytes,3,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + Grantable bool `protobuf:"varint,7,opt,name=grantable,proto3" json:"grantable,omitempty"` + GrantStrategy string `protobuf:"bytes,8,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` + WalletAssetType string `protobuf:"bytes,9,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,10,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + UsageScopes []string `protobuf:"bytes,11,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` + AssetUrl string `protobuf:"bytes,12,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,13,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,14,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + MetadataJson string `protobuf:"bytes,15,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + SortOrder int32 `protobuf:"varint,16,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + OperatorUserId int64 `protobuf:"varint,17,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + ManagerGrantEnabled *bool `protobuf:"varint,18,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3,oneof" json:"manager_grant_enabled,omitempty"` + PriceType string `protobuf:"bytes,19,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` + CoinPrice int64 `protobuf:"varint,20,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;服务端忽略请求值并固定写入 0。 GiftPointAmount int64 `protobuf:"varint,21,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateResourceRequest) Reset() { *x = CreateResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6420,7 +6669,7 @@ func (x *CreateResourceRequest) String() string { func (*CreateResourceRequest) ProtoMessage() {} func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6433,7 +6682,7 @@ func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceRequest.ProtoReflect.Descriptor instead. func (*CreateResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{62} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{65} } func (x *CreateResourceRequest) GetRequestId() string { @@ -6584,38 +6833,37 @@ func (x *CreateResourceRequest) GetGiftPointAmount() int64 { } type UpdateResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceCode string `protobuf:"bytes,4,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Grantable bool `protobuf:"varint,8,opt,name=grantable,proto3" json:"grantable,omitempty"` - GrantStrategy string `protobuf:"bytes,9,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` - WalletAssetType string `protobuf:"bytes,10,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` - WalletAssetAmount int64 `protobuf:"varint,11,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` - UsageScopes []string `protobuf:"bytes,12,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` - AssetUrl string `protobuf:"bytes,13,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,14,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,15,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` - MetadataJson string `protobuf:"bytes,16,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` - SortOrder int32 `protobuf:"varint,17,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - OperatorUserId int64 `protobuf:"varint,18,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - ManagerGrantEnabled *bool `protobuf:"varint,19,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3,oneof" json:"manager_grant_enabled,omitempty"` - PriceType string `protobuf:"bytes,20,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` - CoinPrice int64 `protobuf:"varint,21,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceCode string `protobuf:"bytes,4,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Grantable bool `protobuf:"varint,8,opt,name=grantable,proto3" json:"grantable,omitempty"` + GrantStrategy string `protobuf:"bytes,9,opt,name=grant_strategy,json=grantStrategy,proto3" json:"grant_strategy,omitempty"` + WalletAssetType string `protobuf:"bytes,10,opt,name=wallet_asset_type,json=walletAssetType,proto3" json:"wallet_asset_type,omitempty"` + WalletAssetAmount int64 `protobuf:"varint,11,opt,name=wallet_asset_amount,json=walletAssetAmount,proto3" json:"wallet_asset_amount,omitempty"` + UsageScopes []string `protobuf:"bytes,12,rep,name=usage_scopes,json=usageScopes,proto3" json:"usage_scopes,omitempty"` + AssetUrl string `protobuf:"bytes,13,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,14,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,15,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + MetadataJson string `protobuf:"bytes,16,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` + SortOrder int32 `protobuf:"varint,17,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + OperatorUserId int64 `protobuf:"varint,18,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + ManagerGrantEnabled *bool `protobuf:"varint,19,opt,name=manager_grant_enabled,json=managerGrantEnabled,proto3,oneof" json:"manager_grant_enabled,omitempty"` + PriceType string `protobuf:"bytes,20,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` + CoinPrice int64 `protobuf:"varint,21,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;服务端忽略请求值并固定写入 0。 GiftPointAmount int64 `protobuf:"varint,22,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateResourceRequest) Reset() { *x = UpdateResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6627,7 +6875,7 @@ func (x *UpdateResourceRequest) String() string { func (*UpdateResourceRequest) ProtoMessage() {} func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6640,7 +6888,7 @@ func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceRequest.ProtoReflect.Descriptor instead. func (*UpdateResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{63} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{66} } func (x *UpdateResourceRequest) GetRequestId() string { @@ -6798,20 +7046,19 @@ func (x *UpdateResourceRequest) GetGiftPointAmount() int64 { } type SetResourceStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetResourceStatusRequest) Reset() { *x = SetResourceStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6823,7 +7070,7 @@ func (x *SetResourceStatusRequest) String() string { func (*SetResourceStatusRequest) ProtoMessage() {} func (x *SetResourceStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6836,7 +7083,7 @@ func (x *SetResourceStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResourceStatusRequest.ProtoReflect.Descriptor instead. func (*SetResourceStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{64} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{67} } func (x *SetResourceStatusRequest) GetRequestId() string { @@ -6875,19 +7122,18 @@ func (x *SetResourceStatusRequest) GetOperatorUserId() int64 { } type DeleteResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteResourceRequest) Reset() { *x = DeleteResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6899,7 +7145,7 @@ func (x *DeleteResourceRequest) String() string { func (*DeleteResourceRequest) ProtoMessage() {} func (x *DeleteResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6912,7 +7158,7 @@ func (x *DeleteResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteResourceRequest.ProtoReflect.Descriptor instead. func (*DeleteResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{65} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{68} } func (x *DeleteResourceRequest) GetRequestId() string { @@ -6944,19 +7190,18 @@ func (x *DeleteResourceRequest) GetOperatorUserId() int64 { } type BatchDeleteResourcesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceIds []int64 `protobuf:"varint,3,rep,packed,name=resource_ids,json=resourceIds,proto3" json:"resource_ids,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceIds []int64 `protobuf:"varint,3,rep,packed,name=resource_ids,json=resourceIds,proto3" json:"resource_ids,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchDeleteResourcesRequest) Reset() { *x = BatchDeleteResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6968,7 +7213,7 @@ func (x *BatchDeleteResourcesRequest) String() string { func (*BatchDeleteResourcesRequest) ProtoMessage() {} func (x *BatchDeleteResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6981,7 +7226,7 @@ func (x *BatchDeleteResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchDeleteResourcesRequest.ProtoReflect.Descriptor instead. func (*BatchDeleteResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{66} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{69} } func (x *BatchDeleteResourcesRequest) GetRequestId() string { @@ -7013,16 +7258,15 @@ func (x *BatchDeleteResourcesRequest) GetOperatorUserId() int64 { } type BatchDeleteResourcesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` unknownFields protoimpl.UnknownFields - - Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchDeleteResourcesResponse) Reset() { *x = BatchDeleteResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7034,7 +7278,7 @@ func (x *BatchDeleteResourcesResponse) String() string { func (*BatchDeleteResourcesResponse) ProtoMessage() {} func (x *BatchDeleteResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7047,7 +7291,7 @@ func (x *BatchDeleteResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchDeleteResourcesResponse.ProtoReflect.Descriptor instead. func (*BatchDeleteResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{67} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{70} } func (x *BatchDeleteResourcesResponse) GetResources() []*Resource { @@ -7058,16 +7302,15 @@ func (x *BatchDeleteResourcesResponse) GetResources() []*Resource { } type ResourceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` unknownFields protoimpl.UnknownFields - - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResourceResponse) Reset() { *x = ResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7079,7 +7322,7 @@ func (x *ResourceResponse) String() string { func (*ResourceResponse) ProtoMessage() {} func (x *ResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7092,7 +7335,7 @@ func (x *ResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceResponse.ProtoReflect.Descriptor instead. func (*ResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{68} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{71} } func (x *ResourceResponse) GetResource() *Resource { @@ -7103,22 +7346,21 @@ func (x *ResourceResponse) GetResource() *Resource { } type ListResourceGroupsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ActiveOnly bool `protobuf:"varint,7,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ActiveOnly bool `protobuf:"varint,7,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceGroupsRequest) Reset() { *x = ListResourceGroupsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7130,7 +7372,7 @@ func (x *ListResourceGroupsRequest) String() string { func (*ListResourceGroupsRequest) ProtoMessage() {} func (x *ListResourceGroupsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7143,7 +7385,7 @@ func (x *ListResourceGroupsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGroupsRequest.ProtoReflect.Descriptor instead. func (*ListResourceGroupsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{69} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{72} } func (x *ListResourceGroupsRequest) GetRequestId() string { @@ -7196,17 +7438,16 @@ func (x *ListResourceGroupsRequest) GetActiveOnly() bool { } type ListResourceGroupsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Groups []*ResourceGroup `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Groups []*ResourceGroup `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceGroupsResponse) Reset() { *x = ListResourceGroupsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7218,7 +7459,7 @@ func (x *ListResourceGroupsResponse) String() string { func (*ListResourceGroupsResponse) ProtoMessage() {} func (x *ListResourceGroupsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7231,7 +7472,7 @@ func (x *ListResourceGroupsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGroupsResponse.ProtoReflect.Descriptor instead. func (*ListResourceGroupsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{70} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{73} } func (x *ListResourceGroupsResponse) GetGroups() []*ResourceGroup { @@ -7249,18 +7490,17 @@ func (x *ListResourceGroupsResponse) GetTotal() int64 { } type GetResourceGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResourceGroupRequest) Reset() { *x = GetResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7272,7 +7512,7 @@ func (x *GetResourceGroupRequest) String() string { func (*GetResourceGroupRequest) ProtoMessage() {} func (x *GetResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7285,7 +7525,7 @@ func (x *GetResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceGroupRequest.ProtoReflect.Descriptor instead. func (*GetResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{71} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{74} } func (x *GetResourceGroupRequest) GetRequestId() string { @@ -7310,16 +7550,17 @@ func (x *GetResourceGroupRequest) GetGroupId() int64 { } type GetResourceGroupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Group *ResourceGroup `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Group *ResourceGroup `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // 对 group、ordered items 和嵌套 resource 的规范化 SHA-256。 + SourceContentHash string `protobuf:"bytes,2,opt,name=source_content_hash,json=sourceContentHash,proto3" json:"source_content_hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetResourceGroupResponse) Reset() { *x = GetResourceGroupResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7331,7 +7572,7 @@ func (x *GetResourceGroupResponse) String() string { func (*GetResourceGroupResponse) ProtoMessage() {} func (x *GetResourceGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7344,7 +7585,7 @@ func (x *GetResourceGroupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceGroupResponse.ProtoReflect.Descriptor instead. func (*GetResourceGroupResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{72} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{75} } func (x *GetResourceGroupResponse) GetGroup() *ResourceGroup { @@ -7354,11 +7595,15 @@ func (x *GetResourceGroupResponse) GetGroup() *ResourceGroup { return nil } -type CreateResourceGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *GetResourceGroupResponse) GetSourceContentHash() string { + if x != nil { + return x.SourceContentHash + } + return "" +} +type CreateResourceGroupRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` GroupCode string `protobuf:"bytes,3,opt,name=group_code,json=groupCode,proto3" json:"group_code,omitempty"` @@ -7368,11 +7613,13 @@ type CreateResourceGroupRequest struct { SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` Items []*ResourceGroupItemInput `protobuf:"bytes,8,rep,name=items,proto3" json:"items,omitempty"` OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateResourceGroupRequest) Reset() { *x = CreateResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7384,7 +7631,7 @@ func (x *CreateResourceGroupRequest) String() string { func (*CreateResourceGroupRequest) ProtoMessage() {} func (x *CreateResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7397,7 +7644,7 @@ func (x *CreateResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceGroupRequest.ProtoReflect.Descriptor instead. func (*CreateResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{73} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{76} } func (x *CreateResourceGroupRequest) GetRequestId() string { @@ -7464,10 +7711,7 @@ func (x *CreateResourceGroupRequest) GetOperatorUserId() int64 { } type UpdateResourceGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` @@ -7478,11 +7722,13 @@ type UpdateResourceGroupRequest struct { SortOrder int32 `protobuf:"varint,8,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` Items []*ResourceGroupItemInput `protobuf:"bytes,9,rep,name=items,proto3" json:"items,omitempty"` OperatorUserId int64 `protobuf:"varint,10,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateResourceGroupRequest) Reset() { *x = UpdateResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7494,7 +7740,7 @@ func (x *UpdateResourceGroupRequest) String() string { func (*UpdateResourceGroupRequest) ProtoMessage() {} func (x *UpdateResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7507,7 +7753,7 @@ func (x *UpdateResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceGroupRequest.ProtoReflect.Descriptor instead. func (*UpdateResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{74} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{77} } func (x *UpdateResourceGroupRequest) GetRequestId() string { @@ -7581,20 +7827,19 @@ func (x *UpdateResourceGroupRequest) GetOperatorUserId() int64 { } type SetResourceGroupStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GroupId int64 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetResourceGroupStatusRequest) Reset() { *x = SetResourceGroupStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7606,7 +7851,7 @@ func (x *SetResourceGroupStatusRequest) String() string { func (*SetResourceGroupStatusRequest) ProtoMessage() {} func (x *SetResourceGroupStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7619,7 +7864,7 @@ func (x *SetResourceGroupStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResourceGroupStatusRequest.ProtoReflect.Descriptor instead. func (*SetResourceGroupStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{75} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{78} } func (x *SetResourceGroupStatusRequest) GetRequestId() string { @@ -7658,16 +7903,15 @@ func (x *SetResourceGroupStatusRequest) GetOperatorUserId() int64 { } type ResourceGroupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group *ResourceGroup `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` unknownFields protoimpl.UnknownFields - - Group *ResourceGroup `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResourceGroupResponse) Reset() { *x = ResourceGroupResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7679,7 +7923,7 @@ func (x *ResourceGroupResponse) String() string { func (*ResourceGroupResponse) ProtoMessage() {} func (x *ResourceGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7692,7 +7936,7 @@ func (x *ResourceGroupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGroupResponse.ProtoReflect.Descriptor instead. func (*ResourceGroupResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{76} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{79} } func (x *ResourceGroupResponse) GetGroup() *ResourceGroup { @@ -7703,25 +7947,24 @@ func (x *ResourceGroupResponse) GetGroup() *ResourceGroup { } type ListGiftConfigsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ActiveOnly bool `protobuf:"varint,7,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + FilterRegion bool `protobuf:"varint,9,opt,name=filter_region,json=filterRegion,proto3" json:"filter_region,omitempty"` + GiftTypeCode string `protobuf:"bytes,10,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ActiveOnly bool `protobuf:"varint,7,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` - RegionId int64 `protobuf:"varint,8,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - FilterRegion bool `protobuf:"varint,9,opt,name=filter_region,json=filterRegion,proto3" json:"filter_region,omitempty"` - GiftTypeCode string `protobuf:"bytes,10,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGiftConfigsRequest) Reset() { *x = ListGiftConfigsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7733,7 +7976,7 @@ func (x *ListGiftConfigsRequest) String() string { func (*ListGiftConfigsRequest) ProtoMessage() {} func (x *ListGiftConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7746,7 +7989,7 @@ func (x *ListGiftConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftConfigsRequest.ProtoReflect.Descriptor instead. func (*ListGiftConfigsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{77} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{80} } func (x *ListGiftConfigsRequest) GetRequestId() string { @@ -7820,17 +8063,16 @@ func (x *ListGiftConfigsRequest) GetGiftTypeCode() string { } type ListGiftConfigsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Gifts []*GiftConfig `protobuf:"bytes,1,rep,name=gifts,proto3" json:"gifts,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Gifts []*GiftConfig `protobuf:"bytes,1,rep,name=gifts,proto3" json:"gifts,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGiftConfigsResponse) Reset() { *x = ListGiftConfigsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7842,7 +8084,7 @@ func (x *ListGiftConfigsResponse) String() string { func (*ListGiftConfigsResponse) ProtoMessage() {} func (x *ListGiftConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7855,7 +8097,7 @@ func (x *ListGiftConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftConfigsResponse.ProtoReflect.Descriptor instead. func (*ListGiftConfigsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{78} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{81} } func (x *ListGiftConfigsResponse) GetGifts() []*GiftConfig { @@ -7873,19 +8115,18 @@ func (x *ListGiftConfigsResponse) GetTotal() int64 { } type ListGiftTypeConfigsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ActiveOnly bool `protobuf:"varint,4,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - ActiveOnly bool `protobuf:"varint,4,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGiftTypeConfigsRequest) Reset() { *x = ListGiftTypeConfigsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7897,7 +8138,7 @@ func (x *ListGiftTypeConfigsRequest) String() string { func (*ListGiftTypeConfigsRequest) ProtoMessage() {} func (x *ListGiftTypeConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7910,7 +8151,7 @@ func (x *ListGiftTypeConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftTypeConfigsRequest.ProtoReflect.Descriptor instead. func (*ListGiftTypeConfigsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{79} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{82} } func (x *ListGiftTypeConfigsRequest) GetRequestId() string { @@ -7942,16 +8183,15 @@ func (x *ListGiftTypeConfigsRequest) GetActiveOnly() bool { } type ListGiftTypeConfigsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GiftTypes []*GiftTypeConfig `protobuf:"bytes,1,rep,name=gift_types,json=giftTypes,proto3" json:"gift_types,omitempty"` unknownFields protoimpl.UnknownFields - - GiftTypes []*GiftTypeConfig `protobuf:"bytes,1,rep,name=gift_types,json=giftTypes,proto3" json:"gift_types,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListGiftTypeConfigsResponse) Reset() { *x = ListGiftTypeConfigsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7963,7 +8203,7 @@ func (x *ListGiftTypeConfigsResponse) String() string { func (*ListGiftTypeConfigsResponse) ProtoMessage() {} func (x *ListGiftTypeConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7976,7 +8216,7 @@ func (x *ListGiftTypeConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftTypeConfigsResponse.ProtoReflect.Descriptor instead. func (*ListGiftTypeConfigsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{80} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{83} } func (x *ListGiftTypeConfigsResponse) GetGiftTypes() []*GiftTypeConfig { @@ -7987,23 +8227,22 @@ func (x *ListGiftTypeConfigsResponse) GetGiftTypes() []*GiftTypeConfig { } type UpsertGiftTypeConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TypeCode string `protobuf:"bytes,3,opt,name=type_code,json=typeCode,proto3" json:"type_code,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - TabKey string `protobuf:"bytes,5,opt,name=tab_key,json=tabKey,proto3" json:"tab_key,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TypeCode string `protobuf:"bytes,3,opt,name=type_code,json=typeCode,proto3" json:"type_code,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + TabKey string `protobuf:"bytes,5,opt,name=tab_key,json=tabKey,proto3" json:"tab_key,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertGiftTypeConfigRequest) Reset() { *x = UpsertGiftTypeConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8015,7 +8254,7 @@ func (x *UpsertGiftTypeConfigRequest) String() string { func (*UpsertGiftTypeConfigRequest) ProtoMessage() {} func (x *UpsertGiftTypeConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8028,7 +8267,7 @@ func (x *UpsertGiftTypeConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertGiftTypeConfigRequest.ProtoReflect.Descriptor instead. func (*UpsertGiftTypeConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{81} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{84} } func (x *UpsertGiftTypeConfigRequest) GetRequestId() string { @@ -8088,16 +8327,15 @@ func (x *UpsertGiftTypeConfigRequest) GetOperatorUserId() int64 { } type GiftTypeConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + GiftType *GiftTypeConfig `protobuf:"bytes,1,opt,name=gift_type,json=giftType,proto3" json:"gift_type,omitempty"` unknownFields protoimpl.UnknownFields - - GiftType *GiftTypeConfig `protobuf:"bytes,1,opt,name=gift_type,json=giftType,proto3" json:"gift_type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GiftTypeConfigResponse) Reset() { *x = GiftTypeConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8109,7 +8347,7 @@ func (x *GiftTypeConfigResponse) String() string { func (*GiftTypeConfigResponse) ProtoMessage() {} func (x *GiftTypeConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8122,7 +8360,7 @@ func (x *GiftTypeConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftTypeConfigResponse.ProtoReflect.Descriptor instead. func (*GiftTypeConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{82} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{85} } func (x *GiftTypeConfigResponse) GetGiftType() *GiftTypeConfig { @@ -8133,20 +8371,17 @@ func (x *GiftTypeConfigResponse) GetGiftType() *GiftTypeConfig { } type CreateGiftConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` - PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` + PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;服务端忽略请求值并固定写入 0。 GiftPointAmount int64 `protobuf:"varint,11,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` HeatValue int64 `protobuf:"varint,12,opt,name=heat_value,json=heatValue,proto3" json:"heat_value,omitempty"` @@ -8159,11 +8394,13 @@ type CreateGiftConfigRequest struct { EffectiveToMs int64 `protobuf:"varint,19,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` EffectTypes []string `protobuf:"bytes,20,rep,name=effect_types,json=effectTypes,proto3" json:"effect_types,omitempty"` CpRelationType string `protobuf:"bytes,21,opt,name=cp_relation_type,json=cpRelationType,proto3" json:"cp_relation_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateGiftConfigRequest) Reset() { *x = CreateGiftConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8175,7 +8412,7 @@ func (x *CreateGiftConfigRequest) String() string { func (*CreateGiftConfigRequest) ProtoMessage() {} func (x *CreateGiftConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8188,7 +8425,7 @@ func (x *CreateGiftConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGiftConfigRequest.ProtoReflect.Descriptor instead. func (*CreateGiftConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{83} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{86} } func (x *CreateGiftConfigRequest) GetRequestId() string { @@ -8339,19 +8576,18 @@ func (x *CreateGiftConfigRequest) GetCpRelationType() string { } type BatchCreateGiftConfigsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Items []*CreateGiftConfigRequest `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchCreateGiftConfigsRequest) Reset() { *x = BatchCreateGiftConfigsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8363,7 +8599,7 @@ func (x *BatchCreateGiftConfigsRequest) String() string { func (*BatchCreateGiftConfigsRequest) ProtoMessage() {} func (x *BatchCreateGiftConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8376,7 +8612,7 @@ func (x *BatchCreateGiftConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchCreateGiftConfigsRequest.ProtoReflect.Descriptor instead. func (*BatchCreateGiftConfigsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{84} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{87} } func (x *BatchCreateGiftConfigsRequest) GetRequestId() string { @@ -8408,16 +8644,15 @@ func (x *BatchCreateGiftConfigsRequest) GetOperatorUserId() int64 { } type BatchCreateGiftConfigsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Gifts []*GiftConfig `protobuf:"bytes,1,rep,name=gifts,proto3" json:"gifts,omitempty"` unknownFields protoimpl.UnknownFields - - Gifts []*GiftConfig `protobuf:"bytes,1,rep,name=gifts,proto3" json:"gifts,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchCreateGiftConfigsResponse) Reset() { *x = BatchCreateGiftConfigsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8429,7 +8664,7 @@ func (x *BatchCreateGiftConfigsResponse) String() string { func (*BatchCreateGiftConfigsResponse) ProtoMessage() {} func (x *BatchCreateGiftConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8442,7 +8677,7 @@ func (x *BatchCreateGiftConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchCreateGiftConfigsResponse.ProtoReflect.Descriptor instead. func (*BatchCreateGiftConfigsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{85} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{88} } func (x *BatchCreateGiftConfigsResponse) GetGifts() []*GiftConfig { @@ -8453,20 +8688,17 @@ func (x *BatchCreateGiftConfigsResponse) GetGifts() []*GiftConfig { } type UpdateGiftConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` - PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` - CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + PresentationJson string `protobuf:"bytes,8,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` + PriceVersion string `protobuf:"bytes,9,opt,name=price_version,json=priceVersion,proto3" json:"price_version,omitempty"` + CoinPrice int64 `protobuf:"varint,10,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` // gift_point_amount 是历史字段;服务端忽略请求值并固定写入 0。 GiftPointAmount int64 `protobuf:"varint,11,opt,name=gift_point_amount,json=giftPointAmount,proto3" json:"gift_point_amount,omitempty"` HeatValue int64 `protobuf:"varint,12,opt,name=heat_value,json=heatValue,proto3" json:"heat_value,omitempty"` @@ -8479,11 +8711,13 @@ type UpdateGiftConfigRequest struct { EffectiveToMs int64 `protobuf:"varint,19,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` EffectTypes []string `protobuf:"bytes,20,rep,name=effect_types,json=effectTypes,proto3" json:"effect_types,omitempty"` CpRelationType string `protobuf:"bytes,21,opt,name=cp_relation_type,json=cpRelationType,proto3" json:"cp_relation_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateGiftConfigRequest) Reset() { *x = UpdateGiftConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8495,7 +8729,7 @@ func (x *UpdateGiftConfigRequest) String() string { func (*UpdateGiftConfigRequest) ProtoMessage() {} func (x *UpdateGiftConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8508,7 +8742,7 @@ func (x *UpdateGiftConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGiftConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateGiftConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{86} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{89} } func (x *UpdateGiftConfigRequest) GetRequestId() string { @@ -8659,20 +8893,19 @@ func (x *UpdateGiftConfigRequest) GetCpRelationType() string { } type SetGiftConfigStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetGiftConfigStatusRequest) Reset() { *x = SetGiftConfigStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8684,7 +8917,7 @@ func (x *SetGiftConfigStatusRequest) String() string { func (*SetGiftConfigStatusRequest) ProtoMessage() {} func (x *SetGiftConfigStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8697,7 +8930,7 @@ func (x *SetGiftConfigStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGiftConfigStatusRequest.ProtoReflect.Descriptor instead. func (*SetGiftConfigStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{87} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{90} } func (x *SetGiftConfigStatusRequest) GetRequestId() string { @@ -8736,19 +8969,18 @@ func (x *SetGiftConfigStatusRequest) GetOperatorUserId() int64 { } type DeleteGiftConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GiftId string `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteGiftConfigRequest) Reset() { *x = DeleteGiftConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8760,7 +8992,7 @@ func (x *DeleteGiftConfigRequest) String() string { func (*DeleteGiftConfigRequest) ProtoMessage() {} func (x *DeleteGiftConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8773,7 +9005,7 @@ func (x *DeleteGiftConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGiftConfigRequest.ProtoReflect.Descriptor instead. func (*DeleteGiftConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{88} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{91} } func (x *DeleteGiftConfigRequest) GetRequestId() string { @@ -8805,16 +9037,15 @@ func (x *DeleteGiftConfigRequest) GetOperatorUserId() int64 { } type GiftConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Gift *GiftConfig `protobuf:"bytes,1,opt,name=gift,proto3" json:"gift,omitempty"` unknownFields protoimpl.UnknownFields - - Gift *GiftConfig `protobuf:"bytes,1,opt,name=gift,proto3" json:"gift,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GiftConfigResponse) Reset() { *x = GiftConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8826,7 +9057,7 @@ func (x *GiftConfigResponse) String() string { func (*GiftConfigResponse) ProtoMessage() {} func (x *GiftConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8839,7 +9070,7 @@ func (x *GiftConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftConfigResponse.ProtoReflect.Descriptor instead. func (*GiftConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{89} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{92} } func (x *GiftConfigResponse) GetGift() *GiftConfig { @@ -8850,24 +9081,23 @@ func (x *GiftConfigResponse) GetGift() *GiftConfig { } type GrantResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` - DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` - OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - GrantSource string `protobuf:"bytes,9,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` + DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + GrantSource string `protobuf:"bytes,9,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GrantResourceRequest) Reset() { *x = GrantResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8879,7 +9109,7 @@ func (x *GrantResourceRequest) String() string { func (*GrantResourceRequest) ProtoMessage() {} func (x *GrantResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8892,7 +9122,7 @@ func (x *GrantResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantResourceRequest.ProtoReflect.Descriptor instead. func (*GrantResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{90} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{93} } func (x *GrantResourceRequest) GetCommandId() string { @@ -8959,22 +9189,21 @@ func (x *GrantResourceRequest) GetGrantSource() string { } type GrantResourceGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - GroupId int64 `protobuf:"varint,4,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` - OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - GrantSource string `protobuf:"bytes,7,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + GroupId int64 `protobuf:"varint,4,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + GrantSource string `protobuf:"bytes,7,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GrantResourceGroupRequest) Reset() { *x = GrantResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8986,7 +9215,7 @@ func (x *GrantResourceGroupRequest) String() string { func (*GrantResourceGroupRequest) ProtoMessage() {} func (x *GrantResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8999,7 +9228,7 @@ func (x *GrantResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantResourceGroupRequest.ProtoReflect.Descriptor instead. func (*GrantResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{91} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{94} } func (x *GrantResourceGroupRequest) GetCommandId() string { @@ -9051,21 +9280,121 @@ func (x *GrantResourceGroupRequest) GetGrantSource() string { return "" } -type RevokeResourceGrantRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type GrantPinnedResourceGroupRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + SnapshotId string `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + Reason string `protobuf:"bytes,5,opt,name=reason,proto3" json:"reason,omitempty"` + OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + GrantSource string `protobuf:"bytes,7,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + // 发布版本持有的快照哈希;wallet 必须与 snapshot_id 对应的 owner 快照精确匹配。 + ExpectedSnapshotHash string `protobuf:"bytes,8,opt,name=expected_snapshot_hash,json=expectedSnapshotHash,proto3" json:"expected_snapshot_hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - GrantId string `protobuf:"bytes,3,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` - Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` +func (x *GrantPinnedResourceGroupRequest) Reset() { + *x = GrantPinnedResourceGroupRequest{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GrantPinnedResourceGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GrantPinnedResourceGroupRequest) ProtoMessage() {} + +func (x *GrantPinnedResourceGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GrantPinnedResourceGroupRequest.ProtoReflect.Descriptor instead. +func (*GrantPinnedResourceGroupRequest) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{95} +} + +func (x *GrantPinnedResourceGroupRequest) GetCommandId() string { + if x != nil { + return x.CommandId + } + return "" +} + +func (x *GrantPinnedResourceGroupRequest) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *GrantPinnedResourceGroupRequest) GetTargetUserId() int64 { + if x != nil { + return x.TargetUserId + } + return 0 +} + +func (x *GrantPinnedResourceGroupRequest) GetSnapshotId() string { + if x != nil { + return x.SnapshotId + } + return "" +} + +func (x *GrantPinnedResourceGroupRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *GrantPinnedResourceGroupRequest) GetOperatorUserId() int64 { + if x != nil { + return x.OperatorUserId + } + return 0 +} + +func (x *GrantPinnedResourceGroupRequest) GetGrantSource() string { + if x != nil { + return x.GrantSource + } + return "" +} + +func (x *GrantPinnedResourceGroupRequest) GetExpectedSnapshotHash() string { + if x != nil { + return x.ExpectedSnapshotHash + } + return "" +} + +type RevokeResourceGrantRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + GrantId string `protobuf:"bytes,3,opt,name=grant_id,json=grantId,proto3" json:"grant_id,omitempty"` + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RevokeResourceGrantRequest) Reset() { *x = RevokeResourceGrantRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9077,7 +9406,7 @@ func (x *RevokeResourceGrantRequest) String() string { func (*RevokeResourceGrantRequest) ProtoMessage() {} func (x *RevokeResourceGrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9090,7 +9419,7 @@ func (x *RevokeResourceGrantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeResourceGrantRequest.ProtoReflect.Descriptor instead. func (*RevokeResourceGrantRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{92} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{96} } func (x *RevokeResourceGrantRequest) GetRequestId() string { @@ -9129,16 +9458,15 @@ func (x *RevokeResourceGrantRequest) GetOperatorUserId() int64 { } type ResourceGrantResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Grant *ResourceGrant `protobuf:"bytes,1,opt,name=grant,proto3" json:"grant,omitempty"` unknownFields protoimpl.UnknownFields - - Grant *ResourceGrant `protobuf:"bytes,1,opt,name=grant,proto3" json:"grant,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResourceGrantResponse) Reset() { *x = ResourceGrantResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9150,7 +9478,7 @@ func (x *ResourceGrantResponse) String() string { func (*ResourceGrantResponse) ProtoMessage() {} func (x *ResourceGrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9163,7 +9491,7 @@ func (x *ResourceGrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrantResponse.ProtoReflect.Descriptor instead. func (*ResourceGrantResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{93} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{97} } func (x *ResourceGrantResponse) GetGrant() *ResourceGrant { @@ -9174,20 +9502,19 @@ func (x *ResourceGrantResponse) GetGrant() *ResourceGrant { } type ListUserResourcesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + ActiveOnly bool `protobuf:"varint,5,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - ActiveOnly bool `protobuf:"varint,5,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListUserResourcesRequest) Reset() { *x = ListUserResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9199,7 +9526,7 @@ func (x *ListUserResourcesRequest) String() string { func (*ListUserResourcesRequest) ProtoMessage() {} func (x *ListUserResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9212,7 +9539,7 @@ func (x *ListUserResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserResourcesRequest.ProtoReflect.Descriptor instead. func (*ListUserResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{94} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{98} } func (x *ListUserResourcesRequest) GetRequestId() string { @@ -9251,16 +9578,15 @@ func (x *ListUserResourcesRequest) GetActiveOnly() bool { } type ListUserResourcesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resources []*UserResourceEntitlement `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` unknownFields protoimpl.UnknownFields - - Resources []*UserResourceEntitlement `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListUserResourcesResponse) Reset() { *x = ListUserResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9272,7 +9598,7 @@ func (x *ListUserResourcesResponse) String() string { func (*ListUserResourcesResponse) ProtoMessage() {} func (x *ListUserResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9285,7 +9611,7 @@ func (x *ListUserResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserResourcesResponse.ProtoReflect.Descriptor instead. func (*ListUserResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{95} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{99} } func (x *ListUserResourcesResponse) GetResources() []*UserResourceEntitlement { @@ -9296,20 +9622,19 @@ func (x *ListUserResourcesResponse) GetResources() []*UserResourceEntitlement { } type EquipUserResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + EntitlementId string `protobuf:"bytes,5,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ResourceId int64 `protobuf:"varint,4,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - EntitlementId string `protobuf:"bytes,5,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EquipUserResourceRequest) Reset() { *x = EquipUserResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9321,7 +9646,7 @@ func (x *EquipUserResourceRequest) String() string { func (*EquipUserResourceRequest) ProtoMessage() {} func (x *EquipUserResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9334,7 +9659,7 @@ func (x *EquipUserResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipUserResourceRequest.ProtoReflect.Descriptor instead. func (*EquipUserResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{96} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{100} } func (x *EquipUserResourceRequest) GetRequestId() string { @@ -9373,16 +9698,15 @@ func (x *EquipUserResourceRequest) GetEntitlementId() string { } type EquipUserResourceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resource *UserResourceEntitlement `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` unknownFields protoimpl.UnknownFields - - Resource *UserResourceEntitlement `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EquipUserResourceResponse) Reset() { *x = EquipUserResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9394,7 +9718,7 @@ func (x *EquipUserResourceResponse) String() string { func (*EquipUserResourceResponse) ProtoMessage() {} func (x *EquipUserResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9407,7 +9731,7 @@ func (x *EquipUserResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipUserResourceResponse.ProtoReflect.Descriptor instead. func (*EquipUserResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{97} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{101} } func (x *EquipUserResourceResponse) GetResource() *UserResourceEntitlement { @@ -9418,19 +9742,18 @@ func (x *EquipUserResourceResponse) GetResource() *UserResourceEntitlement { } type UnequipUserResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnequipUserResourceRequest) Reset() { *x = UnequipUserResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9442,7 +9765,7 @@ func (x *UnequipUserResourceRequest) String() string { func (*UnequipUserResourceRequest) ProtoMessage() {} func (x *UnequipUserResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9455,7 +9778,7 @@ func (x *UnequipUserResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnequipUserResourceRequest.ProtoReflect.Descriptor instead. func (*UnequipUserResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{98} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{102} } func (x *UnequipUserResourceRequest) GetRequestId() string { @@ -9487,18 +9810,17 @@ func (x *UnequipUserResourceRequest) GetResourceType() string { } type UnequipUserResourceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Unequipped bool `protobuf:"varint,2,opt,name=unequipped,proto3" json:"unequipped,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Unequipped bool `protobuf:"varint,2,opt,name=unequipped,proto3" json:"unequipped,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,3,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnequipUserResourceResponse) Reset() { *x = UnequipUserResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9510,7 +9832,7 @@ func (x *UnequipUserResourceResponse) String() string { func (*UnequipUserResourceResponse) ProtoMessage() {} func (x *UnequipUserResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9523,7 +9845,7 @@ func (x *UnequipUserResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnequipUserResourceResponse.ProtoReflect.Descriptor instead. func (*UnequipUserResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{99} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{103} } func (x *UnequipUserResourceResponse) GetResourceType() string { @@ -9548,19 +9870,18 @@ func (x *UnequipUserResourceResponse) GetUpdatedAtMs() int64 { } type BatchGetUserEquippedResourcesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + ResourceTypes []string `protobuf:"bytes,4,rep,name=resource_types,json=resourceTypes,proto3" json:"resource_types,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` - ResourceTypes []string `protobuf:"bytes,4,rep,name=resource_types,json=resourceTypes,proto3" json:"resource_types,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserEquippedResourcesRequest) Reset() { *x = BatchGetUserEquippedResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9572,7 +9893,7 @@ func (x *BatchGetUserEquippedResourcesRequest) String() string { func (*BatchGetUserEquippedResourcesRequest) ProtoMessage() {} func (x *BatchGetUserEquippedResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9585,7 +9906,7 @@ func (x *BatchGetUserEquippedResourcesRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use BatchGetUserEquippedResourcesRequest.ProtoReflect.Descriptor instead. func (*BatchGetUserEquippedResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{100} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{104} } func (x *BatchGetUserEquippedResourcesRequest) GetRequestId() string { @@ -9617,17 +9938,16 @@ func (x *BatchGetUserEquippedResourcesRequest) GetResourceTypes() []string { } type UserEquippedResources struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Resources []*UserResourceEntitlement `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Resources []*UserResourceEntitlement `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UserEquippedResources) Reset() { *x = UserEquippedResources{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9639,7 +9959,7 @@ func (x *UserEquippedResources) String() string { func (*UserEquippedResources) ProtoMessage() {} func (x *UserEquippedResources) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9652,7 +9972,7 @@ func (x *UserEquippedResources) ProtoReflect() protoreflect.Message { // Deprecated: Use UserEquippedResources.ProtoReflect.Descriptor instead. func (*UserEquippedResources) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{101} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{105} } func (x *UserEquippedResources) GetUserId() int64 { @@ -9670,16 +9990,15 @@ func (x *UserEquippedResources) GetResources() []*UserResourceEntitlement { } type BatchGetUserEquippedResourcesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Users []*UserEquippedResources `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` unknownFields protoimpl.UnknownFields - - Users []*UserEquippedResources `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserEquippedResourcesResponse) Reset() { *x = BatchGetUserEquippedResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9691,7 +10010,7 @@ func (x *BatchGetUserEquippedResourcesResponse) String() string { func (*BatchGetUserEquippedResourcesResponse) ProtoMessage() {} func (x *BatchGetUserEquippedResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9704,7 +10023,7 @@ func (x *BatchGetUserEquippedResourcesResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use BatchGetUserEquippedResourcesResponse.ProtoReflect.Descriptor instead. func (*BatchGetUserEquippedResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{102} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{106} } func (x *BatchGetUserEquippedResourcesResponse) GetUsers() []*UserEquippedResources { @@ -9715,21 +10034,20 @@ func (x *BatchGetUserEquippedResourcesResponse) GetUsers() []*UserEquippedResour } type ListResourceGrantsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceGrantsRequest) Reset() { *x = ListResourceGrantsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9741,7 +10059,7 @@ func (x *ListResourceGrantsRequest) String() string { func (*ListResourceGrantsRequest) ProtoMessage() {} func (x *ListResourceGrantsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9754,7 +10072,7 @@ func (x *ListResourceGrantsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGrantsRequest.ProtoReflect.Descriptor instead. func (*ListResourceGrantsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{103} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{107} } func (x *ListResourceGrantsRequest) GetRequestId() string { @@ -9800,17 +10118,16 @@ func (x *ListResourceGrantsRequest) GetPageSize() int32 { } type ListResourceGrantsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Grants []*ResourceGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Grants []*ResourceGrant `protobuf:"bytes,1,rep,name=grants,proto3" json:"grants,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceGrantsResponse) Reset() { *x = ListResourceGrantsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9822,7 +10139,7 @@ func (x *ListResourceGrantsResponse) String() string { func (*ListResourceGrantsResponse) ProtoMessage() {} func (x *ListResourceGrantsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9835,7 +10152,7 @@ func (x *ListResourceGrantsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGrantsResponse.ProtoReflect.Descriptor instead. func (*ListResourceGrantsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{104} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{108} } func (x *ListResourceGrantsResponse) GetGrants() []*ResourceGrant { @@ -9853,22 +10170,21 @@ func (x *ListResourceGrantsResponse) GetTotal() int64 { } type ResourceShopItemInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ShopItemId int64 `protobuf:"varint,1,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` - ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - DurationDays int32 `protobuf:"varint,4,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` - EffectiveFromMs int64 `protobuf:"varint,5,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` - EffectiveToMs int64 `protobuf:"varint,6,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ShopItemId int64 `protobuf:"varint,1,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + DurationDays int32 `protobuf:"varint,4,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,5,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,6,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceShopItemInput) Reset() { *x = ResourceShopItemInput{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9880,7 +10196,7 @@ func (x *ResourceShopItemInput) String() string { func (*ResourceShopItemInput) ProtoMessage() {} func (x *ResourceShopItemInput) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9893,7 +10209,7 @@ func (x *ResourceShopItemInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceShopItemInput.ProtoReflect.Descriptor instead. func (*ResourceShopItemInput) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{105} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{109} } func (x *ResourceShopItemInput) GetShopItemId() int64 { @@ -9946,23 +10262,22 @@ func (x *ResourceShopItemInput) GetSortOrder() int32 { } type ListResourceShopItemsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ActiveOnly bool `protobuf:"varint,8,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - ActiveOnly bool `protobuf:"varint,8,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceShopItemsRequest) Reset() { *x = ListResourceShopItemsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9974,7 +10289,7 @@ func (x *ListResourceShopItemsRequest) String() string { func (*ListResourceShopItemsRequest) ProtoMessage() {} func (x *ListResourceShopItemsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9987,7 +10302,7 @@ func (x *ListResourceShopItemsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceShopItemsRequest.ProtoReflect.Descriptor instead. func (*ListResourceShopItemsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{106} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{110} } func (x *ListResourceShopItemsRequest) GetRequestId() string { @@ -10047,17 +10362,16 @@ func (x *ListResourceShopItemsRequest) GetActiveOnly() bool { } type ListResourceShopItemsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceShopItemsResponse) Reset() { *x = ListResourceShopItemsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10069,7 +10383,7 @@ func (x *ListResourceShopItemsResponse) String() string { func (*ListResourceShopItemsResponse) ProtoMessage() {} func (x *ListResourceShopItemsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10082,7 +10396,7 @@ func (x *ListResourceShopItemsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceShopItemsResponse.ProtoReflect.Descriptor instead. func (*ListResourceShopItemsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{107} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{111} } func (x *ListResourceShopItemsResponse) GetItems() []*ResourceShopItem { @@ -10100,19 +10414,18 @@ func (x *ListResourceShopItemsResponse) GetTotal() int64 { } type UpsertResourceShopItemsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` Items []*ResourceShopItemInput `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpsertResourceShopItemsRequest) Reset() { *x = UpsertResourceShopItemsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10124,7 +10437,7 @@ func (x *UpsertResourceShopItemsRequest) String() string { func (*UpsertResourceShopItemsRequest) ProtoMessage() {} func (x *UpsertResourceShopItemsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10137,7 +10450,7 @@ func (x *UpsertResourceShopItemsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertResourceShopItemsRequest.ProtoReflect.Descriptor instead. func (*UpsertResourceShopItemsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{108} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{112} } func (x *UpsertResourceShopItemsRequest) GetRequestId() string { @@ -10169,16 +10482,15 @@ func (x *UpsertResourceShopItemsRequest) GetOperatorUserId() int64 { } type UpsertResourceShopItemsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpsertResourceShopItemsResponse) Reset() { *x = UpsertResourceShopItemsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10190,7 +10502,7 @@ func (x *UpsertResourceShopItemsResponse) String() string { func (*UpsertResourceShopItemsResponse) ProtoMessage() {} func (x *UpsertResourceShopItemsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10203,7 +10515,7 @@ func (x *UpsertResourceShopItemsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertResourceShopItemsResponse.ProtoReflect.Descriptor instead. func (*UpsertResourceShopItemsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{109} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{113} } func (x *UpsertResourceShopItemsResponse) GetItems() []*ResourceShopItem { @@ -10214,20 +10526,19 @@ func (x *UpsertResourceShopItemsResponse) GetItems() []*ResourceShopItem { } type SetResourceShopItemStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ShopItemId int64 `protobuf:"varint,3,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ShopItemId int64 `protobuf:"varint,3,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetResourceShopItemStatusRequest) Reset() { *x = SetResourceShopItemStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10239,7 +10550,7 @@ func (x *SetResourceShopItemStatusRequest) String() string { func (*SetResourceShopItemStatusRequest) ProtoMessage() {} func (x *SetResourceShopItemStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10252,7 +10563,7 @@ func (x *SetResourceShopItemStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResourceShopItemStatusRequest.ProtoReflect.Descriptor instead. func (*SetResourceShopItemStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{110} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{114} } func (x *SetResourceShopItemStatusRequest) GetRequestId() string { @@ -10291,16 +10602,15 @@ func (x *SetResourceShopItemStatusRequest) GetOperatorUserId() int64 { } type ResourceShopItemResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Item *ResourceShopItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` unknownFields protoimpl.UnknownFields - - Item *ResourceShopItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResourceShopItemResponse) Reset() { *x = ResourceShopItemResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10312,7 +10622,7 @@ func (x *ResourceShopItemResponse) String() string { func (*ResourceShopItemResponse) ProtoMessage() {} func (x *ResourceShopItemResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10325,7 +10635,7 @@ func (x *ResourceShopItemResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceShopItemResponse.ProtoReflect.Descriptor instead. func (*ResourceShopItemResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{111} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{115} } func (x *ResourceShopItemResponse) GetItem() *ResourceShopItem { @@ -10336,19 +10646,18 @@ func (x *ResourceShopItemResponse) GetItem() *ResourceShopItem { } type PurchaseResourceShopItemRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ShopItemId int64 `protobuf:"varint,4,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ShopItemId int64 `protobuf:"varint,4,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PurchaseResourceShopItemRequest) Reset() { *x = PurchaseResourceShopItemRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10360,7 +10669,7 @@ func (x *PurchaseResourceShopItemRequest) String() string { func (*PurchaseResourceShopItemRequest) ProtoMessage() {} func (x *PurchaseResourceShopItemRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10373,7 +10682,7 @@ func (x *PurchaseResourceShopItemRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseResourceShopItemRequest.ProtoReflect.Descriptor instead. func (*PurchaseResourceShopItemRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{112} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{116} } func (x *PurchaseResourceShopItemRequest) GetCommandId() string { @@ -10405,10 +10714,7 @@ func (x *PurchaseResourceShopItemRequest) GetShopItemId() int64 { } type PurchaseResourceShopItemResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` ResourceGrantId string `protobuf:"bytes,3,opt,name=resource_grant_id,json=resourceGrantId,proto3" json:"resource_grant_id,omitempty"` @@ -10416,11 +10722,13 @@ type PurchaseResourceShopItemResponse struct { Resource *UserResourceEntitlement `protobuf:"bytes,5,opt,name=resource,proto3" json:"resource,omitempty"` Balance *AssetBalance `protobuf:"bytes,6,opt,name=balance,proto3" json:"balance,omitempty"` CoinSpent int64 `protobuf:"varint,7,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PurchaseResourceShopItemResponse) Reset() { *x = PurchaseResourceShopItemResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10432,7 +10740,7 @@ func (x *PurchaseResourceShopItemResponse) String() string { func (*PurchaseResourceShopItemResponse) ProtoMessage() {} func (x *PurchaseResourceShopItemResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10445,7 +10753,7 @@ func (x *PurchaseResourceShopItemResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseResourceShopItemResponse.ProtoReflect.Descriptor instead. func (*PurchaseResourceShopItemResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{113} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{117} } func (x *PurchaseResourceShopItemResponse) GetOrderId() string { @@ -10498,29 +10806,26 @@ func (x *PurchaseResourceShopItemResponse) GetCoinSpent() int64 { } type RechargeBill struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - RechargeType string `protobuf:"bytes,4,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - ExternalRef string `protobuf:"bytes,6,opt,name=external_ref,json=externalRef,proto3" json:"external_ref,omitempty"` - UserId int64 `protobuf:"varint,7,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SellerUserId int64 `protobuf:"varint,8,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - SellerRegionId int64 `protobuf:"varint,9,opt,name=seller_region_id,json=sellerRegionId,proto3" json:"seller_region_id,omitempty"` - TargetRegionId int64 `protobuf:"varint,10,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` - PolicyId int64 `protobuf:"varint,11,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` - PolicyVersion string `protobuf:"bytes,12,opt,name=policy_version,json=policyVersion,proto3" json:"policy_version,omitempty"` - CurrencyCode string `protobuf:"bytes,13,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - CoinAmount int64 `protobuf:"varint,14,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,15,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` - ExchangeCoinAmount int64 `protobuf:"varint,16,opt,name=exchange_coin_amount,json=exchangeCoinAmount,proto3" json:"exchange_coin_amount,omitempty"` - ExchangeUsdMinorAmount int64 `protobuf:"varint,17,opt,name=exchange_usd_minor_amount,json=exchangeUsdMinorAmount,proto3" json:"exchange_usd_minor_amount,omitempty"` - CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - ProviderAmountMinor int64 `protobuf:"varint,19,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + RechargeType string `protobuf:"bytes,4,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + ExternalRef string `protobuf:"bytes,6,opt,name=external_ref,json=externalRef,proto3" json:"external_ref,omitempty"` + UserId int64 `protobuf:"varint,7,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SellerUserId int64 `protobuf:"varint,8,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + SellerRegionId int64 `protobuf:"varint,9,opt,name=seller_region_id,json=sellerRegionId,proto3" json:"seller_region_id,omitempty"` + TargetRegionId int64 `protobuf:"varint,10,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` + PolicyId int64 `protobuf:"varint,11,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + PolicyVersion string `protobuf:"bytes,12,opt,name=policy_version,json=policyVersion,proto3" json:"policy_version,omitempty"` + CurrencyCode string `protobuf:"bytes,13,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + CoinAmount int64 `protobuf:"varint,14,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,15,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + ExchangeCoinAmount int64 `protobuf:"varint,16,opt,name=exchange_coin_amount,json=exchangeCoinAmount,proto3" json:"exchange_coin_amount,omitempty"` + ExchangeUsdMinorAmount int64 `protobuf:"varint,17,opt,name=exchange_usd_minor_amount,json=exchangeUsdMinorAmount,proto3" json:"exchange_usd_minor_amount,omitempty"` + CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + ProviderAmountMinor int64 `protobuf:"varint,19,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` // provider_code 标识账单实际支付渠道:google_play/mifapay/v5pay/usdt_trc20。 ProviderCode string `protobuf:"bytes,20,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` // user_paid_* 是用户实付事实:外部订单来自三方下单快照,Google 订单来自 Play Orders API。 @@ -10532,11 +10837,13 @@ type RechargeBill struct { ProviderNetMicro int64 `protobuf:"varint,25,opt,name=provider_net_micro,json=providerNetMicro,proto3" json:"provider_net_micro,omitempty"` // paid_synced_at_ms 仅对 Google 账单有意义:Orders API 实付明细的同步时间,0 表示未同步。 PaidSyncedAtMs int64 `protobuf:"varint,26,opt,name=paid_synced_at_ms,json=paidSyncedAtMs,proto3" json:"paid_synced_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBill) Reset() { *x = RechargeBill{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10548,7 +10855,7 @@ func (x *RechargeBill) String() string { func (*RechargeBill) ProtoMessage() {} func (x *RechargeBill) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10561,7 +10868,7 @@ func (x *RechargeBill) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBill.ProtoReflect.Descriptor instead. func (*RechargeBill) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{114} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{118} } func (x *RechargeBill) GetAppCode() string { @@ -10747,29 +11054,28 @@ func (x *RechargeBill) GetPaidSyncedAtMs() int64 { } type ListRechargeBillsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RechargeType string `protobuf:"bytes,6,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,8,opt,name=keyword,proto3" json:"keyword,omitempty"` - StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` - Page int32 `protobuf:"varint,11,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,12,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + RechargeType string `protobuf:"bytes,6,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,8,opt,name=keyword,proto3" json:"keyword,omitempty"` + StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + Page int32 `protobuf:"varint,11,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,12,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // paid_state=unsynced 只看实付明细未同步的谷歌账单(财务补数视图)。 - PaidState string `protobuf:"bytes,13,opt,name=paid_state,json=paidState,proto3" json:"paid_state,omitempty"` + PaidState string `protobuf:"bytes,13,opt,name=paid_state,json=paidState,proto3" json:"paid_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRechargeBillsRequest) Reset() { *x = ListRechargeBillsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10781,7 +11087,7 @@ func (x *ListRechargeBillsRequest) String() string { func (*ListRechargeBillsRequest) ProtoMessage() {} func (x *ListRechargeBillsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10794,7 +11100,7 @@ func (x *ListRechargeBillsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeBillsRequest.ProtoReflect.Descriptor instead. func (*ListRechargeBillsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{115} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{119} } func (x *ListRechargeBillsRequest) GetRequestId() string { @@ -10889,17 +11195,16 @@ func (x *ListRechargeBillsRequest) GetPaidState() string { } type ListRechargeBillsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Bills []*RechargeBill `protobuf:"bytes,1,rep,name=bills,proto3" json:"bills,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Bills []*RechargeBill `protobuf:"bytes,1,rep,name=bills,proto3" json:"bills,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRechargeBillsResponse) Reset() { *x = ListRechargeBillsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10911,7 +11216,7 @@ func (x *ListRechargeBillsResponse) String() string { func (*ListRechargeBillsResponse) ProtoMessage() {} func (x *ListRechargeBillsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10924,7 +11229,7 @@ func (x *ListRechargeBillsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeBillsResponse.ProtoReflect.Descriptor instead. func (*ListRechargeBillsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{116} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{120} } func (x *ListRechargeBillsResponse) GetBills() []*RechargeBill { @@ -10942,25 +11247,24 @@ func (x *ListRechargeBillsResponse) GetTotal() int64 { } type GetRechargeBillSummaryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + RechargeType string `protobuf:"bytes,6,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,8,opt,name=keyword,proto3" json:"keyword,omitempty"` + StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RechargeType string `protobuf:"bytes,6,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,8,opt,name=keyword,proto3" json:"keyword,omitempty"` - StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRechargeBillSummaryRequest) Reset() { *x = GetRechargeBillSummaryRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10972,7 +11276,7 @@ func (x *GetRechargeBillSummaryRequest) String() string { func (*GetRechargeBillSummaryRequest) ProtoMessage() {} func (x *GetRechargeBillSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10985,7 +11289,7 @@ func (x *GetRechargeBillSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRechargeBillSummaryRequest.ProtoReflect.Descriptor instead. func (*GetRechargeBillSummaryRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{117} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{121} } func (x *GetRechargeBillSummaryRequest) GetRequestId() string { @@ -11059,18 +11363,17 @@ func (x *GetRechargeBillSummaryRequest) GetEndAtMs() int64 { } type RechargeBillSummaryBucket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BillCount int64 `protobuf:"varint,1,opt,name=bill_count,json=billCount,proto3" json:"bill_count,omitempty"` - CoinAmount int64 `protobuf:"varint,2,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,3,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + BillCount int64 `protobuf:"varint,1,opt,name=bill_count,json=billCount,proto3" json:"bill_count,omitempty"` + CoinAmount int64 `protobuf:"varint,2,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,3,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBillSummaryBucket) Reset() { *x = RechargeBillSummaryBucket{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11082,7 +11385,7 @@ func (x *RechargeBillSummaryBucket) String() string { func (*RechargeBillSummaryBucket) ProtoMessage() {} func (x *RechargeBillSummaryBucket) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11095,7 +11398,7 @@ func (x *RechargeBillSummaryBucket) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBillSummaryBucket.ProtoReflect.Descriptor instead. func (*RechargeBillSummaryBucket) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{118} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{122} } func (x *RechargeBillSummaryBucket) GetBillCount() int64 { @@ -11120,20 +11423,19 @@ func (x *RechargeBillSummaryBucket) GetUsdMinorAmount() int64 { } type GetRechargeBillSummaryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Total *RechargeBillSummaryBucket `protobuf:"bytes,1,opt,name=total,proto3" json:"total,omitempty"` GooglePlay *RechargeBillSummaryBucket `protobuf:"bytes,2,opt,name=google_play,json=googlePlay,proto3" json:"google_play,omitempty"` ThirdParty *RechargeBillSummaryBucket `protobuf:"bytes,3,opt,name=third_party,json=thirdParty,proto3" json:"third_party,omitempty"` // coin_seller 是币商进货口径:coin_seller_stock_records 里 counts_as_seller_recharge 的进货与冲回净额。 - CoinSeller *RechargeBillSummaryBucket `protobuf:"bytes,4,opt,name=coin_seller,json=coinSeller,proto3" json:"coin_seller,omitempty"` + CoinSeller *RechargeBillSummaryBucket `protobuf:"bytes,4,opt,name=coin_seller,json=coinSeller,proto3" json:"coin_seller,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetRechargeBillSummaryResponse) Reset() { *x = GetRechargeBillSummaryResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11145,7 +11447,7 @@ func (x *GetRechargeBillSummaryResponse) String() string { func (*GetRechargeBillSummaryResponse) ProtoMessage() {} func (x *GetRechargeBillSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11158,7 +11460,7 @@ func (x *GetRechargeBillSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRechargeBillSummaryResponse.ProtoReflect.Descriptor instead. func (*GetRechargeBillSummaryResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{119} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{123} } func (x *GetRechargeBillSummaryResponse) GetTotal() *RechargeBillSummaryBucket { @@ -11191,21 +11493,20 @@ func (x *GetRechargeBillSummaryResponse) GetCoinSeller() *RechargeBillSummaryBuc // UserRechargeStats 是 wallet-service 已维护的用户累计充值聚合,不允许后台回扫充值流水临时计算。 type UserRechargeStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RechargeCount int64 `protobuf:"varint,2,opt,name=recharge_count,json=rechargeCount,proto3" json:"recharge_count,omitempty"` - TotalCoinAmount int64 `protobuf:"varint,3,opt,name=total_coin_amount,json=totalCoinAmount,proto3" json:"total_coin_amount,omitempty"` - TotalUsdMinorAmount int64 `protobuf:"varint,4,opt,name=total_usd_minor_amount,json=totalUsdMinorAmount,proto3" json:"total_usd_minor_amount,omitempty"` - FirstRechargedAtMs int64 `protobuf:"varint,5,opt,name=first_recharged_at_ms,json=firstRechargedAtMs,proto3" json:"first_recharged_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RechargeCount int64 `protobuf:"varint,2,opt,name=recharge_count,json=rechargeCount,proto3" json:"recharge_count,omitempty"` + TotalCoinAmount int64 `protobuf:"varint,3,opt,name=total_coin_amount,json=totalCoinAmount,proto3" json:"total_coin_amount,omitempty"` + TotalUsdMinorAmount int64 `protobuf:"varint,4,opt,name=total_usd_minor_amount,json=totalUsdMinorAmount,proto3" json:"total_usd_minor_amount,omitempty"` + FirstRechargedAtMs int64 `protobuf:"varint,5,opt,name=first_recharged_at_ms,json=firstRechargedAtMs,proto3" json:"first_recharged_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,6,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserRechargeStats) Reset() { *x = UserRechargeStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11217,7 +11518,7 @@ func (x *UserRechargeStats) String() string { func (*UserRechargeStats) ProtoMessage() {} func (x *UserRechargeStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11230,7 +11531,7 @@ func (x *UserRechargeStats) ProtoReflect() protoreflect.Message { // Deprecated: Use UserRechargeStats.ProtoReflect.Descriptor instead. func (*UserRechargeStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{120} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{124} } func (x *UserRechargeStats) GetUserId() int64 { @@ -11276,18 +11577,17 @@ func (x *UserRechargeStats) GetUpdatedAtMs() int64 { } type BatchGetUserRechargeStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserIds []int64 `protobuf:"varint,3,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserRechargeStatsRequest) Reset() { *x = BatchGetUserRechargeStatsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11299,7 +11599,7 @@ func (x *BatchGetUserRechargeStatsRequest) String() string { func (*BatchGetUserRechargeStatsRequest) ProtoMessage() {} func (x *BatchGetUserRechargeStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11312,7 +11612,7 @@ func (x *BatchGetUserRechargeStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchGetUserRechargeStatsRequest.ProtoReflect.Descriptor instead. func (*BatchGetUserRechargeStatsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{121} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{125} } func (x *BatchGetUserRechargeStatsRequest) GetRequestId() string { @@ -11337,16 +11637,15 @@ func (x *BatchGetUserRechargeStatsRequest) GetUserIds() []int64 { } type BatchGetUserRechargeStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Items []*UserRechargeStats `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Items []*UserRechargeStats `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *BatchGetUserRechargeStatsResponse) Reset() { *x = BatchGetUserRechargeStatsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11358,7 +11657,7 @@ func (x *BatchGetUserRechargeStatsResponse) String() string { func (*BatchGetUserRechargeStatsResponse) ProtoMessage() {} func (x *BatchGetUserRechargeStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11371,7 +11670,7 @@ func (x *BatchGetUserRechargeStatsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use BatchGetUserRechargeStatsResponse.ProtoReflect.Descriptor instead. func (*BatchGetUserRechargeStatsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{122} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{126} } func (x *BatchGetUserRechargeStatsResponse) GetItems() []*UserRechargeStats { @@ -11382,24 +11681,23 @@ func (x *BatchGetUserRechargeStatsResponse) GetItems() []*UserRechargeStats { } type GetRechargeBillOverviewRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RechargeType string `protobuf:"bytes,4,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - StartAtMs int64 `protobuf:"varint,6,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,7,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + RechargeType string `protobuf:"bytes,4,opt,name=recharge_type,json=rechargeType,proto3" json:"recharge_type,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + StartAtMs int64 `protobuf:"varint,6,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,7,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` // tz_offset_minutes 决定“日”边界(中国时区 480);日趋势与前端展示同一时区口径。 TzOffsetMinutes int32 `protobuf:"varint,8,opt,name=tz_offset_minutes,json=tzOffsetMinutes,proto3" json:"tz_offset_minutes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetRechargeBillOverviewRequest) Reset() { *x = GetRechargeBillOverviewRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11411,7 +11709,7 @@ func (x *GetRechargeBillOverviewRequest) String() string { func (*GetRechargeBillOverviewRequest) ProtoMessage() {} func (x *GetRechargeBillOverviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11424,7 +11722,7 @@ func (x *GetRechargeBillOverviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRechargeBillOverviewRequest.ProtoReflect.Descriptor instead. func (*GetRechargeBillOverviewRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{123} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{127} } func (x *GetRechargeBillOverviewRequest) GetRequestId() string { @@ -11484,10 +11782,7 @@ func (x *GetRechargeBillOverviewRequest) GetTzOffsetMinutes() int32 { } type RechargeBillDailyBucket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // date 为 tz_offset_minutes 时区下的 YYYY-MM-DD。 Date string `protobuf:"bytes,1,opt,name=date,proto3" json:"date,omitempty"` GoogleUsdMinor int64 `protobuf:"varint,2,opt,name=google_usd_minor,json=googleUsdMinor,proto3" json:"google_usd_minor,omitempty"` @@ -11496,11 +11791,13 @@ type RechargeBillDailyBucket struct { GoogleCoinAmount int64 `protobuf:"varint,5,opt,name=google_coin_amount,json=googleCoinAmount,proto3" json:"google_coin_amount,omitempty"` ThirdPartyCoinAmount int64 `protobuf:"varint,6,opt,name=third_party_coin_amount,json=thirdPartyCoinAmount,proto3" json:"third_party_coin_amount,omitempty"` CoinSellerCoinAmount int64 `protobuf:"varint,7,opt,name=coin_seller_coin_amount,json=coinSellerCoinAmount,proto3" json:"coin_seller_coin_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBillDailyBucket) Reset() { *x = RechargeBillDailyBucket{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11512,7 +11809,7 @@ func (x *RechargeBillDailyBucket) String() string { func (*RechargeBillDailyBucket) ProtoMessage() {} func (x *RechargeBillDailyBucket) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11525,7 +11822,7 @@ func (x *RechargeBillDailyBucket) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBillDailyBucket.ProtoReflect.Descriptor instead. func (*RechargeBillDailyBucket) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{124} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{128} } func (x *RechargeBillDailyBucket) GetDate() string { @@ -11578,18 +11875,17 @@ func (x *RechargeBillDailyBucket) GetCoinSellerCoinAmount() int64 { } type RechargeBillRegionBucket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RegionId int64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - BillCount int64 `protobuf:"varint,2,opt,name=bill_count,json=billCount,proto3" json:"bill_count,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,3,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RegionId int64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + BillCount int64 `protobuf:"varint,2,opt,name=bill_count,json=billCount,proto3" json:"bill_count,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,3,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBillRegionBucket) Reset() { *x = RechargeBillRegionBucket{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11601,7 +11897,7 @@ func (x *RechargeBillRegionBucket) String() string { func (*RechargeBillRegionBucket) ProtoMessage() {} func (x *RechargeBillRegionBucket) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11614,7 +11910,7 @@ func (x *RechargeBillRegionBucket) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBillRegionBucket.ProtoReflect.Descriptor instead. func (*RechargeBillRegionBucket) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{125} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{129} } func (x *RechargeBillRegionBucket) GetRegionId() int64 { @@ -11641,22 +11937,21 @@ func (x *RechargeBillRegionBucket) GetUsdMinorAmount() int64 { // RechargeBillGooglePaidStats 是谷歌实付同步覆盖度与扣费估算: // est_* 只统计已同步且净收入有效的账单,按“美金流水 × 实付占比”折算成 USD 最小单位。 type RechargeBillGooglePaidStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GoogleBillCount int64 `protobuf:"varint,1,opt,name=google_bill_count,json=googleBillCount,proto3" json:"google_bill_count,omitempty"` - SyncedCount int64 `protobuf:"varint,2,opt,name=synced_count,json=syncedCount,proto3" json:"synced_count,omitempty"` - UnsyncedCount int64 `protobuf:"varint,3,opt,name=unsynced_count,json=unsyncedCount,proto3" json:"unsynced_count,omitempty"` - CoveredUsdMinor int64 `protobuf:"varint,4,opt,name=covered_usd_minor,json=coveredUsdMinor,proto3" json:"covered_usd_minor,omitempty"` - EstFeeUsdMinor int64 `protobuf:"varint,5,opt,name=est_fee_usd_minor,json=estFeeUsdMinor,proto3" json:"est_fee_usd_minor,omitempty"` - EstTaxUsdMinor int64 `protobuf:"varint,6,opt,name=est_tax_usd_minor,json=estTaxUsdMinor,proto3" json:"est_tax_usd_minor,omitempty"` - EstNetUsdMinor int64 `protobuf:"varint,7,opt,name=est_net_usd_minor,json=estNetUsdMinor,proto3" json:"est_net_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GoogleBillCount int64 `protobuf:"varint,1,opt,name=google_bill_count,json=googleBillCount,proto3" json:"google_bill_count,omitempty"` + SyncedCount int64 `protobuf:"varint,2,opt,name=synced_count,json=syncedCount,proto3" json:"synced_count,omitempty"` + UnsyncedCount int64 `protobuf:"varint,3,opt,name=unsynced_count,json=unsyncedCount,proto3" json:"unsynced_count,omitempty"` + CoveredUsdMinor int64 `protobuf:"varint,4,opt,name=covered_usd_minor,json=coveredUsdMinor,proto3" json:"covered_usd_minor,omitempty"` + EstFeeUsdMinor int64 `protobuf:"varint,5,opt,name=est_fee_usd_minor,json=estFeeUsdMinor,proto3" json:"est_fee_usd_minor,omitempty"` + EstTaxUsdMinor int64 `protobuf:"varint,6,opt,name=est_tax_usd_minor,json=estTaxUsdMinor,proto3" json:"est_tax_usd_minor,omitempty"` + EstNetUsdMinor int64 `protobuf:"varint,7,opt,name=est_net_usd_minor,json=estNetUsdMinor,proto3" json:"est_net_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBillGooglePaidStats) Reset() { *x = RechargeBillGooglePaidStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11668,7 +11963,7 @@ func (x *RechargeBillGooglePaidStats) String() string { func (*RechargeBillGooglePaidStats) ProtoMessage() {} func (x *RechargeBillGooglePaidStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11681,7 +11976,7 @@ func (x *RechargeBillGooglePaidStats) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBillGooglePaidStats.ProtoReflect.Descriptor instead. func (*RechargeBillGooglePaidStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{126} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{130} } func (x *RechargeBillGooglePaidStats) GetGoogleBillCount() int64 { @@ -11736,17 +12031,16 @@ func (x *RechargeBillGooglePaidStats) GetEstNetUsdMinor() int64 { // RechargeBillSalaryTransferStats 是“用户提现”口径中来自钱包账本的部分: // 用户把工资 USDT 转给币商(salary_transfer_to_coin_seller)。 type RechargeBillSalaryTransferStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransferCount int64 `protobuf:"varint,1,opt,name=transfer_count,json=transferCount,proto3" json:"transfer_count,omitempty"` - TransferUsdMinor int64 `protobuf:"varint,2,opt,name=transfer_usd_minor,json=transferUsdMinor,proto3" json:"transfer_usd_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransferCount int64 `protobuf:"varint,1,opt,name=transfer_count,json=transferCount,proto3" json:"transfer_count,omitempty"` + TransferUsdMinor int64 `protobuf:"varint,2,opt,name=transfer_usd_minor,json=transferUsdMinor,proto3" json:"transfer_usd_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeBillSalaryTransferStats) Reset() { *x = RechargeBillSalaryTransferStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11758,7 +12052,7 @@ func (x *RechargeBillSalaryTransferStats) String() string { func (*RechargeBillSalaryTransferStats) ProtoMessage() {} func (x *RechargeBillSalaryTransferStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11771,7 +12065,7 @@ func (x *RechargeBillSalaryTransferStats) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBillSalaryTransferStats.ProtoReflect.Descriptor instead. func (*RechargeBillSalaryTransferStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{127} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{131} } func (x *RechargeBillSalaryTransferStats) GetTransferCount() int64 { @@ -11789,19 +12083,18 @@ func (x *RechargeBillSalaryTransferStats) GetTransferUsdMinor() int64 { } type GetRechargeBillOverviewResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Daily []*RechargeBillDailyBucket `protobuf:"bytes,1,rep,name=daily,proto3" json:"daily,omitempty"` Regions []*RechargeBillRegionBucket `protobuf:"bytes,2,rep,name=regions,proto3" json:"regions,omitempty"` GooglePaid *RechargeBillGooglePaidStats `protobuf:"bytes,3,opt,name=google_paid,json=googlePaid,proto3" json:"google_paid,omitempty"` SalaryTransfer *RechargeBillSalaryTransferStats `protobuf:"bytes,4,opt,name=salary_transfer,json=salaryTransfer,proto3" json:"salary_transfer,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetRechargeBillOverviewResponse) Reset() { *x = GetRechargeBillOverviewResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11813,7 +12106,7 @@ func (x *GetRechargeBillOverviewResponse) String() string { func (*GetRechargeBillOverviewResponse) ProtoMessage() {} func (x *GetRechargeBillOverviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11826,7 +12119,7 @@ func (x *GetRechargeBillOverviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRechargeBillOverviewResponse.ProtoReflect.Descriptor instead. func (*GetRechargeBillOverviewResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{128} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{132} } func (x *GetRechargeBillOverviewResponse) GetDaily() []*RechargeBillDailyBucket { @@ -11858,18 +12151,17 @@ func (x *GetRechargeBillOverviewResponse) GetSalaryTransfer() *RechargeBillSalar } type RefreshGooglePaymentPricesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TransactionIds []string `protobuf:"bytes,3,rep,name=transaction_ids,json=transactionIds,proto3" json:"transaction_ids,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TransactionIds []string `protobuf:"bytes,3,rep,name=transaction_ids,json=transactionIds,proto3" json:"transaction_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RefreshGooglePaymentPricesRequest) Reset() { *x = RefreshGooglePaymentPricesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11881,7 +12173,7 @@ func (x *RefreshGooglePaymentPricesRequest) String() string { func (*RefreshGooglePaymentPricesRequest) ProtoMessage() {} func (x *RefreshGooglePaymentPricesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11894,7 +12186,7 @@ func (x *RefreshGooglePaymentPricesRequest) ProtoReflect() protoreflect.Message // Deprecated: Use RefreshGooglePaymentPricesRequest.ProtoReflect.Descriptor instead. func (*RefreshGooglePaymentPricesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{129} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{133} } func (x *RefreshGooglePaymentPricesRequest) GetRequestId() string { @@ -11919,22 +12211,21 @@ func (x *RefreshGooglePaymentPricesRequest) GetTransactionIds() []string { } type GooglePaymentPrice struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - PaidAmountMicro int64 `protobuf:"varint,3,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` - TaxMicro int64 `protobuf:"varint,4,opt,name=tax_micro,json=taxMicro,proto3" json:"tax_micro,omitempty"` - NetMicro int64 `protobuf:"varint,5,opt,name=net_micro,json=netMicro,proto3" json:"net_micro,omitempty"` - SyncedAtMs int64 `protobuf:"varint,6,opt,name=synced_at_ms,json=syncedAtMs,proto3" json:"synced_at_ms,omitempty"` - Error string `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + PaidAmountMicro int64 `protobuf:"varint,3,opt,name=paid_amount_micro,json=paidAmountMicro,proto3" json:"paid_amount_micro,omitempty"` + TaxMicro int64 `protobuf:"varint,4,opt,name=tax_micro,json=taxMicro,proto3" json:"tax_micro,omitempty"` + NetMicro int64 `protobuf:"varint,5,opt,name=net_micro,json=netMicro,proto3" json:"net_micro,omitempty"` + SyncedAtMs int64 `protobuf:"varint,6,opt,name=synced_at_ms,json=syncedAtMs,proto3" json:"synced_at_ms,omitempty"` + Error string `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GooglePaymentPrice) Reset() { *x = GooglePaymentPrice{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11946,7 +12237,7 @@ func (x *GooglePaymentPrice) String() string { func (*GooglePaymentPrice) ProtoMessage() {} func (x *GooglePaymentPrice) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11959,7 +12250,7 @@ func (x *GooglePaymentPrice) ProtoReflect() protoreflect.Message { // Deprecated: Use GooglePaymentPrice.ProtoReflect.Descriptor instead. func (*GooglePaymentPrice) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{130} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{134} } func (x *GooglePaymentPrice) GetTransactionId() string { @@ -12012,16 +12303,15 @@ func (x *GooglePaymentPrice) GetError() string { } type RefreshGooglePaymentPricesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Prices []*GooglePaymentPrice `protobuf:"bytes,1,rep,name=prices,proto3" json:"prices,omitempty"` unknownFields protoimpl.UnknownFields - - Prices []*GooglePaymentPrice `protobuf:"bytes,1,rep,name=prices,proto3" json:"prices,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RefreshGooglePaymentPricesResponse) Reset() { *x = RefreshGooglePaymentPricesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12033,7 +12323,7 @@ func (x *RefreshGooglePaymentPricesResponse) String() string { func (*RefreshGooglePaymentPricesResponse) ProtoMessage() {} func (x *RefreshGooglePaymentPricesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12046,7 +12336,7 @@ func (x *RefreshGooglePaymentPricesResponse) ProtoReflect() protoreflect.Message // Deprecated: Use RefreshGooglePaymentPricesResponse.ProtoReflect.Descriptor instead. func (*RefreshGooglePaymentPricesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{131} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{135} } func (x *RefreshGooglePaymentPricesResponse) GetPrices() []*GooglePaymentPrice { @@ -12058,17 +12348,16 @@ func (x *RefreshGooglePaymentPricesResponse) GetPrices() []*GooglePaymentPrice { // WalletFeatureFlags 是我的页和钱包首页使用的操作开关,来源属于 wallet-service。 type WalletFeatureFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RechargeEnabled bool `protobuf:"varint,1,opt,name=recharge_enabled,json=rechargeEnabled,proto3" json:"recharge_enabled,omitempty"` - DiamondExchangeEnabled bool `protobuf:"varint,2,opt,name=diamond_exchange_enabled,json=diamondExchangeEnabled,proto3" json:"diamond_exchange_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RechargeEnabled bool `protobuf:"varint,1,opt,name=recharge_enabled,json=rechargeEnabled,proto3" json:"recharge_enabled,omitempty"` + DiamondExchangeEnabled bool `protobuf:"varint,2,opt,name=diamond_exchange_enabled,json=diamondExchangeEnabled,proto3" json:"diamond_exchange_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WalletFeatureFlags) Reset() { *x = WalletFeatureFlags{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12080,7 +12369,7 @@ func (x *WalletFeatureFlags) String() string { func (*WalletFeatureFlags) ProtoMessage() {} func (x *WalletFeatureFlags) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12093,7 +12382,7 @@ func (x *WalletFeatureFlags) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletFeatureFlags.ProtoReflect.Descriptor instead. func (*WalletFeatureFlags) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{132} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{136} } func (x *WalletFeatureFlags) GetRechargeEnabled() bool { @@ -12111,18 +12400,17 @@ func (x *WalletFeatureFlags) GetDiamondExchangeEnabled() bool { } type GetWalletOverviewRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWalletOverviewRequest) Reset() { *x = GetWalletOverviewRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12134,7 +12422,7 @@ func (x *GetWalletOverviewRequest) String() string { func (*GetWalletOverviewRequest) ProtoMessage() {} func (x *GetWalletOverviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12147,7 +12435,7 @@ func (x *GetWalletOverviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletOverviewRequest.ProtoReflect.Descriptor instead. func (*GetWalletOverviewRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{133} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{137} } func (x *GetWalletOverviewRequest) GetRequestId() string { @@ -12172,17 +12460,16 @@ func (x *GetWalletOverviewRequest) GetUserId() int64 { } type GetWalletOverviewResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Balances []*AssetBalance `protobuf:"bytes,1,rep,name=balances,proto3" json:"balances,omitempty"` + FeatureFlags *WalletFeatureFlags `protobuf:"bytes,2,opt,name=feature_flags,json=featureFlags,proto3" json:"feature_flags,omitempty"` unknownFields protoimpl.UnknownFields - - Balances []*AssetBalance `protobuf:"bytes,1,rep,name=balances,proto3" json:"balances,omitempty"` - FeatureFlags *WalletFeatureFlags `protobuf:"bytes,2,opt,name=feature_flags,json=featureFlags,proto3" json:"feature_flags,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWalletOverviewResponse) Reset() { *x = GetWalletOverviewResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12194,7 +12481,7 @@ func (x *GetWalletOverviewResponse) String() string { func (*GetWalletOverviewResponse) ProtoMessage() {} func (x *GetWalletOverviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12207,7 +12494,7 @@ func (x *GetWalletOverviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletOverviewResponse.ProtoReflect.Descriptor instead. func (*GetWalletOverviewResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{134} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{138} } func (x *GetWalletOverviewResponse) GetBalances() []*AssetBalance { @@ -12226,17 +12513,16 @@ func (x *GetWalletOverviewResponse) GetFeatureFlags() *WalletFeatureFlags { // WalletValueSummary 是我的页钱包价值展示的轻量投影,只返回首屏展示需要的金币余额。 type WalletValueSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CoinAmount int64 `protobuf:"varint,1,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,2,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - CoinAmount int64 `protobuf:"varint,1,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,2,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WalletValueSummary) Reset() { *x = WalletValueSummary{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[135] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12248,7 +12534,7 @@ func (x *WalletValueSummary) String() string { func (*WalletValueSummary) ProtoMessage() {} func (x *WalletValueSummary) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[135] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12261,7 +12547,7 @@ func (x *WalletValueSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletValueSummary.ProtoReflect.Descriptor instead. func (*WalletValueSummary) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{135} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{139} } func (x *WalletValueSummary) GetCoinAmount() int64 { @@ -12279,18 +12565,17 @@ func (x *WalletValueSummary) GetUpdatedAtMs() int64 { } type GetWalletValueSummaryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWalletValueSummaryRequest) Reset() { *x = GetWalletValueSummaryRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[136] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12302,7 +12587,7 @@ func (x *GetWalletValueSummaryRequest) String() string { func (*GetWalletValueSummaryRequest) ProtoMessage() {} func (x *GetWalletValueSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[136] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12315,7 +12600,7 @@ func (x *GetWalletValueSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletValueSummaryRequest.ProtoReflect.Descriptor instead. func (*GetWalletValueSummaryRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{136} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{140} } func (x *GetWalletValueSummaryRequest) GetRequestId() string { @@ -12340,16 +12625,15 @@ func (x *GetWalletValueSummaryRequest) GetUserId() int64 { } type GetWalletValueSummaryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Summary *WalletValueSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` unknownFields protoimpl.UnknownFields - - Summary *WalletValueSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetWalletValueSummaryResponse) Reset() { *x = GetWalletValueSummaryResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[137] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12361,7 +12645,7 @@ func (x *GetWalletValueSummaryResponse) String() string { func (*GetWalletValueSummaryResponse) ProtoMessage() {} func (x *GetWalletValueSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[137] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12374,7 +12658,7 @@ func (x *GetWalletValueSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletValueSummaryResponse.ProtoReflect.Descriptor instead. func (*GetWalletValueSummaryResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{137} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{141} } func (x *GetWalletValueSummaryResponse) GetSummary() *WalletValueSummary { @@ -12386,21 +12670,18 @@ func (x *GetWalletValueSummaryResponse) GetSummary() *WalletValueSummary { // GiftWallItem 是用户礼物墙按礼物类型聚合后的当前投影。 type GiftWallItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftId string `protobuf:"bytes,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - GiftName string `protobuf:"bytes,2,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` - ResourceSnapshotJson string `protobuf:"bytes,5,opt,name=resource_snapshot_json,json=resourceSnapshotJson,proto3" json:"resource_snapshot_json,omitempty"` - GiftTypeCode string `protobuf:"bytes,6,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` - PresentationJson string `protobuf:"bytes,7,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` - GiftCount int64 `protobuf:"varint,8,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` - TotalValue int64 `protobuf:"varint,9,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` - TotalCoinValue int64 `protobuf:"varint,10,opt,name=total_coin_value,json=totalCoinValue,proto3" json:"total_coin_value,omitempty"` - TotalDiamondValue int64 `protobuf:"varint,11,opt,name=total_diamond_value,json=totalDiamondValue,proto3" json:"total_diamond_value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftId string `protobuf:"bytes,1,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + GiftName string `protobuf:"bytes,2,opt,name=gift_name,json=giftName,proto3" json:"gift_name,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + ResourceSnapshotJson string `protobuf:"bytes,5,opt,name=resource_snapshot_json,json=resourceSnapshotJson,proto3" json:"resource_snapshot_json,omitempty"` + GiftTypeCode string `protobuf:"bytes,6,opt,name=gift_type_code,json=giftTypeCode,proto3" json:"gift_type_code,omitempty"` + PresentationJson string `protobuf:"bytes,7,opt,name=presentation_json,json=presentationJson,proto3" json:"presentation_json,omitempty"` + GiftCount int64 `protobuf:"varint,8,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"` + TotalValue int64 `protobuf:"varint,9,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` + TotalCoinValue int64 `protobuf:"varint,10,opt,name=total_coin_value,json=totalCoinValue,proto3" json:"total_coin_value,omitempty"` + TotalDiamondValue int64 `protobuf:"varint,11,opt,name=total_diamond_value,json=totalDiamondValue,proto3" json:"total_diamond_value,omitempty"` // total_gift_point 是历史礼物墙字段;新送礼不再累加。 TotalGiftPoint int64 `protobuf:"varint,12,opt,name=total_gift_point,json=totalGiftPoint,proto3" json:"total_gift_point,omitempty"` TotalHeatValue int64 `protobuf:"varint,13,opt,name=total_heat_value,json=totalHeatValue,proto3" json:"total_heat_value,omitempty"` @@ -12409,11 +12690,13 @@ type GiftWallItem struct { FirstReceivedAtMs int64 `protobuf:"varint,16,opt,name=first_received_at_ms,json=firstReceivedAtMs,proto3" json:"first_received_at_ms,omitempty"` LastReceivedAtMs int64 `protobuf:"varint,17,opt,name=last_received_at_ms,json=lastReceivedAtMs,proto3" json:"last_received_at_ms,omitempty"` SortOrder int32 `protobuf:"varint,18,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GiftWallItem) Reset() { *x = GiftWallItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[138] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12425,7 +12708,7 @@ func (x *GiftWallItem) String() string { func (*GiftWallItem) ProtoMessage() {} func (x *GiftWallItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[138] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12438,7 +12721,7 @@ func (x *GiftWallItem) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftWallItem.ProtoReflect.Descriptor instead. func (*GiftWallItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{138} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{142} } func (x *GiftWallItem) GetGiftId() string { @@ -12568,18 +12851,17 @@ func (x *GiftWallItem) GetSortOrder() int32 { } type GetUserGiftWallRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUserGiftWallRequest) Reset() { *x = GetUserGiftWallRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[139] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12591,7 +12873,7 @@ func (x *GetUserGiftWallRequest) String() string { func (*GetUserGiftWallRequest) ProtoMessage() {} func (x *GetUserGiftWallRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[139] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12604,7 +12886,7 @@ func (x *GetUserGiftWallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserGiftWallRequest.ProtoReflect.Descriptor instead. func (*GetUserGiftWallRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{139} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{143} } func (x *GetUserGiftWallRequest) GetRequestId() string { @@ -12629,24 +12911,23 @@ func (x *GetUserGiftWallRequest) GetUserId() int64 { } type GetUserGiftWallResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*GiftWallItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - GiftKindCount int64 `protobuf:"varint,2,opt,name=gift_kind_count,json=giftKindCount,proto3" json:"gift_kind_count,omitempty"` - GiftTotalCount int64 `protobuf:"varint,3,opt,name=gift_total_count,json=giftTotalCount,proto3" json:"gift_total_count,omitempty"` - TotalValue int64 `protobuf:"varint,4,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` - TotalCoinValue int64 `protobuf:"varint,5,opt,name=total_coin_value,json=totalCoinValue,proto3" json:"total_coin_value,omitempty"` - TotalDiamondValue int64 `protobuf:"varint,6,opt,name=total_diamond_value,json=totalDiamondValue,proto3" json:"total_diamond_value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Items []*GiftWallItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + GiftKindCount int64 `protobuf:"varint,2,opt,name=gift_kind_count,json=giftKindCount,proto3" json:"gift_kind_count,omitempty"` + GiftTotalCount int64 `protobuf:"varint,3,opt,name=gift_total_count,json=giftTotalCount,proto3" json:"gift_total_count,omitempty"` + TotalValue int64 `protobuf:"varint,4,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"` + TotalCoinValue int64 `protobuf:"varint,5,opt,name=total_coin_value,json=totalCoinValue,proto3" json:"total_coin_value,omitempty"` + TotalDiamondValue int64 `protobuf:"varint,6,opt,name=total_diamond_value,json=totalDiamondValue,proto3" json:"total_diamond_value,omitempty"` // total_gift_point 是历史礼物墙汇总字段;新送礼不再累加。 TotalGiftPoint int64 `protobuf:"varint,7,opt,name=total_gift_point,json=totalGiftPoint,proto3" json:"total_gift_point,omitempty"` TotalHeatValue int64 `protobuf:"varint,8,opt,name=total_heat_value,json=totalHeatValue,proto3" json:"total_heat_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetUserGiftWallResponse) Reset() { *x = GetUserGiftWallResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[140] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12658,7 +12939,7 @@ func (x *GetUserGiftWallResponse) String() string { func (*GetUserGiftWallResponse) ProtoMessage() {} func (x *GetUserGiftWallResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[140] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12671,7 +12952,7 @@ func (x *GetUserGiftWallResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserGiftWallResponse.ProtoReflect.Descriptor instead. func (*GetUserGiftWallResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{140} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{144} } func (x *GetUserGiftWallResponse) GetItems() []*GiftWallItem { @@ -12732,40 +13013,39 @@ func (x *GetUserGiftWallResponse) GetTotalHeatValue() int64 { // RechargeProduct 是 App 充值页可展示的区域化充值档位。 type RechargeProduct struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProductId int64 `protobuf:"varint,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - ProductCode string `protobuf:"bytes,2,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` - Channel string `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel,omitempty"` - CurrencyCode string `protobuf:"bytes,4,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - AmountMinor int64 `protobuf:"varint,6,opt,name=amount_minor,json=amountMinor,proto3" json:"amount_minor,omitempty"` - PolicyVersion string `protobuf:"bytes,7,opt,name=policy_version,json=policyVersion,proto3" json:"policy_version,omitempty"` - Enabled bool `protobuf:"varint,8,opt,name=enabled,proto3" json:"enabled,omitempty"` - SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - ProductName string `protobuf:"bytes,10,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` - Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` - Platform string `protobuf:"bytes,12,opt,name=platform,proto3" json:"platform,omitempty"` - RegionIds []int64 `protobuf:"varint,13,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` - ResourceAssetType string `protobuf:"bytes,14,opt,name=resource_asset_type,json=resourceAssetType,proto3" json:"resource_asset_type,omitempty"` - AmountMicro int64 `protobuf:"varint,15,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` - CreatedByUserId int64 `protobuf:"varint,16,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` - UpdatedByUserId int64 `protobuf:"varint,17,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - AppCode string `protobuf:"bytes,20,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,21,opt,name=status,proto3" json:"status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ProductId int64 `protobuf:"varint,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + ProductCode string `protobuf:"bytes,2,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` + Channel string `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel,omitempty"` + CurrencyCode string `protobuf:"bytes,4,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + AmountMinor int64 `protobuf:"varint,6,opt,name=amount_minor,json=amountMinor,proto3" json:"amount_minor,omitempty"` + PolicyVersion string `protobuf:"bytes,7,opt,name=policy_version,json=policyVersion,proto3" json:"policy_version,omitempty"` + Enabled bool `protobuf:"varint,8,opt,name=enabled,proto3" json:"enabled,omitempty"` + SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + ProductName string `protobuf:"bytes,10,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` + Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` + Platform string `protobuf:"bytes,12,opt,name=platform,proto3" json:"platform,omitempty"` + RegionIds []int64 `protobuf:"varint,13,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` + ResourceAssetType string `protobuf:"bytes,14,opt,name=resource_asset_type,json=resourceAssetType,proto3" json:"resource_asset_type,omitempty"` + AmountMicro int64 `protobuf:"varint,15,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` + CreatedByUserId int64 `protobuf:"varint,16,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,17,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,18,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,19,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + AppCode string `protobuf:"bytes,20,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,21,opt,name=status,proto3" json:"status,omitempty"` // audience_type 区分 H5 普通用户档位和币商档位;旧 App 内购默认 normal。 AudienceType string `protobuf:"bytes,22,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` // app_visible 只控制 App 充值列表展示;active 但不可见的 Google SKU 仍可用于服务端验单和历史订单补偿。 - AppVisible bool `protobuf:"varint,23,opt,name=app_visible,json=appVisible,proto3" json:"app_visible,omitempty"` + AppVisible bool `protobuf:"varint,23,opt,name=app_visible,json=appVisible,proto3" json:"app_visible,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RechargeProduct) Reset() { *x = RechargeProduct{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[141] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12777,7 +13057,7 @@ func (x *RechargeProduct) String() string { func (*RechargeProduct) ProtoMessage() {} func (x *RechargeProduct) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[141] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12790,7 +13070,7 @@ func (x *RechargeProduct) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeProduct.ProtoReflect.Descriptor instead. func (*RechargeProduct) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{141} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{145} } func (x *RechargeProduct) GetProductId() int64 { @@ -12955,23 +13235,22 @@ func (x *RechargeProduct) GetAppVisible() bool { } type ListRechargeProductsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` // platform 来自 gateway 解析的 App 平台请求头;为空时返回该区域全部已上架商品。 Platform string `protobuf:"bytes,5,opt,name=platform,proto3" json:"platform,omitempty"` // audience_type 只用于 H5 站外充值;App 旧入口为空时按 normal 兼容。 - AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListRechargeProductsRequest) Reset() { *x = ListRechargeProductsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[142] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12983,7 +13262,7 @@ func (x *ListRechargeProductsRequest) String() string { func (*ListRechargeProductsRequest) ProtoMessage() {} func (x *ListRechargeProductsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[142] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12996,7 +13275,7 @@ func (x *ListRechargeProductsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeProductsRequest.ProtoReflect.Descriptor instead. func (*ListRechargeProductsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{142} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{146} } func (x *ListRechargeProductsRequest) GetRequestId() string { @@ -13042,17 +13321,16 @@ func (x *ListRechargeProductsRequest) GetAudienceType() string { } type ListRechargeProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Products []*RechargeProduct `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` + Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` unknownFields protoimpl.UnknownFields - - Products []*RechargeProduct `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` - Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRechargeProductsResponse) Reset() { *x = ListRechargeProductsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[143] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13064,7 +13342,7 @@ func (x *ListRechargeProductsResponse) String() string { func (*ListRechargeProductsResponse) ProtoMessage() {} func (x *ListRechargeProductsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[143] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13077,7 +13355,7 @@ func (x *ListRechargeProductsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeProductsResponse.ProtoReflect.Descriptor instead. func (*ListRechargeProductsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{143} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{147} } func (x *ListRechargeProductsResponse) GetProducts() []*RechargeProduct { @@ -13095,28 +13373,27 @@ func (x *ListRechargeProductsResponse) GetChannels() []string { } type ConfirmGooglePaymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - ProductId int64 `protobuf:"varint,6,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - ProductCode string `protobuf:"bytes,7,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` - PackageName string `protobuf:"bytes,8,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"` - PurchaseToken string `protobuf:"bytes,9,opt,name=purchase_token,json=purchaseToken,proto3" json:"purchase_token,omitempty"` - OrderId string `protobuf:"bytes,10,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - PurchaseTimeMs int64 `protobuf:"varint,11,opt,name=purchase_time_ms,json=purchaseTimeMs,proto3" json:"purchase_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + ProductId int64 `protobuf:"varint,6,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + ProductCode string `protobuf:"bytes,7,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` + PackageName string `protobuf:"bytes,8,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"` + PurchaseToken string `protobuf:"bytes,9,opt,name=purchase_token,json=purchaseToken,proto3" json:"purchase_token,omitempty"` + OrderId string `protobuf:"bytes,10,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + PurchaseTimeMs int64 `protobuf:"varint,11,opt,name=purchase_time_ms,json=purchaseTimeMs,proto3" json:"purchase_time_ms,omitempty"` // country_id 由 gateway 从 user-service 当前用户资料注入,用于充值事实按真实国家进入 BI。 - CountryId int64 `protobuf:"varint,12,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,12,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConfirmGooglePaymentRequest) Reset() { *x = ConfirmGooglePaymentRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[144] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13128,7 +13405,7 @@ func (x *ConfirmGooglePaymentRequest) String() string { func (*ConfirmGooglePaymentRequest) ProtoMessage() {} func (x *ConfirmGooglePaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[144] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13141,7 +13418,7 @@ func (x *ConfirmGooglePaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmGooglePaymentRequest.ProtoReflect.Descriptor instead. func (*ConfirmGooglePaymentRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{144} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{148} } func (x *ConfirmGooglePaymentRequest) GetRequestId() string { @@ -13229,24 +13506,23 @@ func (x *ConfirmGooglePaymentRequest) GetCountryId() int64 { } type ConfirmGooglePaymentResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PaymentOrderId string `protobuf:"bytes,1,opt,name=payment_order_id,json=paymentOrderId,proto3" json:"payment_order_id,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - ProductId int64 `protobuf:"varint,4,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - ProductCode string `protobuf:"bytes,5,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` - CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - Balance *AssetBalance `protobuf:"bytes,7,opt,name=balance,proto3" json:"balance,omitempty"` - IdempotentReplay bool `protobuf:"varint,8,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` - ConsumeState string `protobuf:"bytes,9,opt,name=consume_state,json=consumeState,proto3" json:"consume_state,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PaymentOrderId string `protobuf:"bytes,1,opt,name=payment_order_id,json=paymentOrderId,proto3" json:"payment_order_id,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ProductId int64 `protobuf:"varint,4,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + ProductCode string `protobuf:"bytes,5,opt,name=product_code,json=productCode,proto3" json:"product_code,omitempty"` + CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + Balance *AssetBalance `protobuf:"bytes,7,opt,name=balance,proto3" json:"balance,omitempty"` + IdempotentReplay bool `protobuf:"varint,8,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` + ConsumeState string `protobuf:"bytes,9,opt,name=consume_state,json=consumeState,proto3" json:"consume_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConfirmGooglePaymentResponse) Reset() { *x = ConfirmGooglePaymentResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[145] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13258,7 +13534,7 @@ func (x *ConfirmGooglePaymentResponse) String() string { func (*ConfirmGooglePaymentResponse) ProtoMessage() {} func (x *ConfirmGooglePaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[145] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13271,7 +13547,7 @@ func (x *ConfirmGooglePaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmGooglePaymentResponse.ProtoReflect.Descriptor instead. func (*ConfirmGooglePaymentResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{145} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{149} } func (x *ConfirmGooglePaymentResponse) GetPaymentOrderId() string { @@ -13339,24 +13615,23 @@ func (x *ConfirmGooglePaymentResponse) GetConsumeState() string { // ListAdminRechargeProductsRequest 是后台内购配置列表查询,不参与用户充值主链路。 type ListAdminRechargeProductsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Platform string `protobuf:"bytes,4,opt,name=platform,proto3" json:"platform,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + Keyword string `protobuf:"bytes,6,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + AudienceType string `protobuf:"bytes,9,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Platform string `protobuf:"bytes,4,opt,name=platform,proto3" json:"platform,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Keyword string `protobuf:"bytes,6,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - AudienceType string `protobuf:"bytes,9,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAdminRechargeProductsRequest) Reset() { *x = ListAdminRechargeProductsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[146] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13368,7 +13643,7 @@ func (x *ListAdminRechargeProductsRequest) String() string { func (*ListAdminRechargeProductsRequest) ProtoMessage() {} func (x *ListAdminRechargeProductsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[146] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13381,7 +13656,7 @@ func (x *ListAdminRechargeProductsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminRechargeProductsRequest.ProtoReflect.Descriptor instead. func (*ListAdminRechargeProductsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{146} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{150} } func (x *ListAdminRechargeProductsRequest) GetRequestId() string { @@ -13448,17 +13723,16 @@ func (x *ListAdminRechargeProductsRequest) GetAudienceType() string { } type ListAdminRechargeProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Products []*RechargeProduct `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Products []*RechargeProduct `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAdminRechargeProductsResponse) Reset() { *x = ListAdminRechargeProductsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[147] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13470,7 +13744,7 @@ func (x *ListAdminRechargeProductsResponse) String() string { func (*ListAdminRechargeProductsResponse) ProtoMessage() {} func (x *ListAdminRechargeProductsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[147] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13483,7 +13757,7 @@ func (x *ListAdminRechargeProductsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ListAdminRechargeProductsResponse.ProtoReflect.Descriptor instead. func (*ListAdminRechargeProductsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{147} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{151} } func (x *ListAdminRechargeProductsResponse) GetProducts() []*RechargeProduct { @@ -13502,28 +13776,27 @@ func (x *ListAdminRechargeProductsResponse) GetTotal() int64 { // CreateRechargeProductRequest 配置一个 App 内购商品;首版资源资产固定为 COIN。 type CreateRechargeProductRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - AmountMicro int64 `protobuf:"varint,3,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ProductName string `protobuf:"bytes,5,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Platform string `protobuf:"bytes,7,opt,name=platform,proto3" json:"platform,omitempty"` - RegionIds []int64 `protobuf:"varint,8,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` - Enabled bool `protobuf:"varint,9,opt,name=enabled,proto3" json:"enabled,omitempty"` - OperatorUserId int64 `protobuf:"varint,10,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - AudienceType string `protobuf:"bytes,11,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + AmountMicro int64 `protobuf:"varint,3,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ProductName string `protobuf:"bytes,5,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Platform string `protobuf:"bytes,7,opt,name=platform,proto3" json:"platform,omitempty"` + RegionIds []int64 `protobuf:"varint,8,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` + Enabled bool `protobuf:"varint,9,opt,name=enabled,proto3" json:"enabled,omitempty"` + OperatorUserId int64 `protobuf:"varint,10,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + AudienceType string `protobuf:"bytes,11,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` // 不传时创建为可见,兼容旧后台;传 false 可保留 Google 验单能力但从 App 普通充值列表隐藏。 - AppVisible *bool `protobuf:"varint,12,opt,name=app_visible,json=appVisible,proto3,oneof" json:"app_visible,omitempty"` + AppVisible *bool `protobuf:"varint,12,opt,name=app_visible,json=appVisible,proto3,oneof" json:"app_visible,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateRechargeProductRequest) Reset() { *x = CreateRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[148] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13535,7 +13808,7 @@ func (x *CreateRechargeProductRequest) String() string { func (*CreateRechargeProductRequest) ProtoMessage() {} func (x *CreateRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[148] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13548,7 +13821,7 @@ func (x *CreateRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRechargeProductRequest.ProtoReflect.Descriptor instead. func (*CreateRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{148} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{152} } func (x *CreateRechargeProductRequest) GetRequestId() string { @@ -13636,29 +13909,28 @@ func (x *CreateRechargeProductRequest) GetAppVisible() bool { } type UpdateRechargeProductRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProductId int64 `protobuf:"varint,3,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - AmountMicro int64 `protobuf:"varint,4,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` - CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - ProductName string `protobuf:"bytes,6,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` - Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` - Platform string `protobuf:"bytes,8,opt,name=platform,proto3" json:"platform,omitempty"` - RegionIds []int64 `protobuf:"varint,9,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` - Enabled bool `protobuf:"varint,10,opt,name=enabled,proto3" json:"enabled,omitempty"` - OperatorUserId int64 `protobuf:"varint,11,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - AudienceType string `protobuf:"bytes,12,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProductId int64 `protobuf:"varint,3,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + AmountMicro int64 `protobuf:"varint,4,opt,name=amount_micro,json=amountMicro,proto3" json:"amount_micro,omitempty"` + CoinAmount int64 `protobuf:"varint,5,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + ProductName string `protobuf:"bytes,6,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` + Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` + Platform string `protobuf:"bytes,8,opt,name=platform,proto3" json:"platform,omitempty"` + RegionIds []int64 `protobuf:"varint,9,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"` + Enabled bool `protobuf:"varint,10,opt,name=enabled,proto3" json:"enabled,omitempty"` + OperatorUserId int64 `protobuf:"varint,11,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + AudienceType string `protobuf:"bytes,12,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` // 不传时保留原可见性,避免旧后台编辑隐藏 SKU 时意外改变展示面。 - AppVisible *bool `protobuf:"varint,13,opt,name=app_visible,json=appVisible,proto3,oneof" json:"app_visible,omitempty"` + AppVisible *bool `protobuf:"varint,13,opt,name=app_visible,json=appVisible,proto3,oneof" json:"app_visible,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRechargeProductRequest) Reset() { *x = UpdateRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[149] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13670,7 +13942,7 @@ func (x *UpdateRechargeProductRequest) String() string { func (*UpdateRechargeProductRequest) ProtoMessage() {} func (x *UpdateRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[149] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13683,7 +13955,7 @@ func (x *UpdateRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRechargeProductRequest.ProtoReflect.Descriptor instead. func (*UpdateRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{149} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{153} } func (x *UpdateRechargeProductRequest) GetRequestId() string { @@ -13778,19 +14050,18 @@ func (x *UpdateRechargeProductRequest) GetAppVisible() bool { } type DeleteRechargeProductRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProductId int64 `protobuf:"varint,3,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProductId int64 `protobuf:"varint,3,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteRechargeProductRequest) Reset() { *x = DeleteRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[150] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13802,7 +14073,7 @@ func (x *DeleteRechargeProductRequest) String() string { func (*DeleteRechargeProductRequest) ProtoMessage() {} func (x *DeleteRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[150] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13815,7 +14086,7 @@ func (x *DeleteRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRechargeProductRequest.ProtoReflect.Descriptor instead. func (*DeleteRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{150} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{154} } func (x *DeleteRechargeProductRequest) GetRequestId() string { @@ -13847,16 +14118,15 @@ func (x *DeleteRechargeProductRequest) GetOperatorUserId() int64 { } type RechargeProductResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Product *RechargeProduct `protobuf:"bytes,1,opt,name=product,proto3" json:"product,omitempty"` unknownFields protoimpl.UnknownFields - - Product *RechargeProduct `protobuf:"bytes,1,opt,name=product,proto3" json:"product,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RechargeProductResponse) Reset() { *x = RechargeProductResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[151] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13868,7 +14138,7 @@ func (x *RechargeProductResponse) String() string { func (*RechargeProductResponse) ProtoMessage() {} func (x *RechargeProductResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[151] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13881,7 +14151,7 @@ func (x *RechargeProductResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeProductResponse.ProtoReflect.Descriptor instead. func (*RechargeProductResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{151} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{155} } func (x *RechargeProductResponse) GetProduct() *RechargeProduct { @@ -13892,16 +14162,15 @@ func (x *RechargeProductResponse) GetProduct() *RechargeProduct { } type DeleteRechargeProductResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` unknownFields protoimpl.UnknownFields - - Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRechargeProductResponse) Reset() { *x = DeleteRechargeProductResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[152] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13913,7 +14182,7 @@ func (x *DeleteRechargeProductResponse) String() string { func (*DeleteRechargeProductResponse) ProtoMessage() {} func (x *DeleteRechargeProductResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[152] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13926,7 +14195,7 @@ func (x *DeleteRechargeProductResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRechargeProductResponse.ProtoReflect.Descriptor instead. func (*DeleteRechargeProductResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{152} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{156} } func (x *DeleteRechargeProductResponse) GetDeleted() bool { @@ -13938,31 +14207,30 @@ func (x *DeleteRechargeProductResponse) GetDeleted() bool { // ThirdPartyPaymentMethod 是后台和 H5 共用的三方支付方式配置快照。 type ThirdPartyPaymentMethod struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MethodId int64 `protobuf:"varint,1,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - ProviderName string `protobuf:"bytes,4,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"` - CountryCode string `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - CountryName string `protobuf:"bytes,6,opt,name=country_name,json=countryName,proto3" json:"country_name,omitempty"` - CurrencyCode string `protobuf:"bytes,7,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - PayWay string `protobuf:"bytes,8,opt,name=pay_way,json=payWay,proto3" json:"pay_way,omitempty"` - PayType string `protobuf:"bytes,9,opt,name=pay_type,json=payType,proto3" json:"pay_type,omitempty"` - MethodName string `protobuf:"bytes,10,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"` - LogoUrl string `protobuf:"bytes,11,opt,name=logo_url,json=logoUrl,proto3" json:"logo_url,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - UsdToCurrencyRate string `protobuf:"bytes,13,opt,name=usd_to_currency_rate,json=usdToCurrencyRate,proto3" json:"usd_to_currency_rate,omitempty"` - SortOrder int32 `protobuf:"varint,14,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MethodId int64 `protobuf:"varint,1,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + ProviderName string `protobuf:"bytes,4,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"` + CountryCode string `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + CountryName string `protobuf:"bytes,6,opt,name=country_name,json=countryName,proto3" json:"country_name,omitempty"` + CurrencyCode string `protobuf:"bytes,7,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + PayWay string `protobuf:"bytes,8,opt,name=pay_way,json=payWay,proto3" json:"pay_way,omitempty"` + PayType string `protobuf:"bytes,9,opt,name=pay_type,json=payType,proto3" json:"pay_type,omitempty"` + MethodName string `protobuf:"bytes,10,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"` + LogoUrl string `protobuf:"bytes,11,opt,name=logo_url,json=logoUrl,proto3" json:"logo_url,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + UsdToCurrencyRate string `protobuf:"bytes,13,opt,name=usd_to_currency_rate,json=usdToCurrencyRate,proto3" json:"usd_to_currency_rate,omitempty"` + SortOrder int32 `protobuf:"varint,14,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ThirdPartyPaymentMethod) Reset() { *x = ThirdPartyPaymentMethod{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[153] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13974,7 +14242,7 @@ func (x *ThirdPartyPaymentMethod) String() string { func (*ThirdPartyPaymentMethod) ProtoMessage() {} func (x *ThirdPartyPaymentMethod) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[153] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13987,7 +14255,7 @@ func (x *ThirdPartyPaymentMethod) ProtoReflect() protoreflect.Message { // Deprecated: Use ThirdPartyPaymentMethod.ProtoReflect.Descriptor instead. func (*ThirdPartyPaymentMethod) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{153} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{157} } func (x *ThirdPartyPaymentMethod) GetMethodId() int64 { @@ -14103,21 +14371,20 @@ func (x *ThirdPartyPaymentMethod) GetUpdatedAtMs() int64 { } type ThirdPartyPaymentChannel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProviderCode string `protobuf:"bytes,2,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + ProviderName string `protobuf:"bytes,3,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + Methods []*ThirdPartyPaymentMethod `protobuf:"bytes,6,rep,name=methods,proto3" json:"methods,omitempty"` unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProviderCode string `protobuf:"bytes,2,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - ProviderName string `protobuf:"bytes,3,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - SortOrder int32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - Methods []*ThirdPartyPaymentMethod `protobuf:"bytes,6,rep,name=methods,proto3" json:"methods,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ThirdPartyPaymentChannel) Reset() { *x = ThirdPartyPaymentChannel{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[154] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14129,7 +14396,7 @@ func (x *ThirdPartyPaymentChannel) String() string { func (*ThirdPartyPaymentChannel) ProtoMessage() {} func (x *ThirdPartyPaymentChannel) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[154] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14142,7 +14409,7 @@ func (x *ThirdPartyPaymentChannel) ProtoReflect() protoreflect.Message { // Deprecated: Use ThirdPartyPaymentChannel.ProtoReflect.Descriptor instead. func (*ThirdPartyPaymentChannel) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{154} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{158} } func (x *ThirdPartyPaymentChannel) GetAppCode() string { @@ -14188,20 +14455,19 @@ func (x *ThirdPartyPaymentChannel) GetMethods() []*ThirdPartyPaymentMethod { } type ListThirdPartyPaymentChannelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - IncludeDisabledMethods bool `protobuf:"varint,5,opt,name=include_disabled_methods,json=includeDisabledMethods,proto3" json:"include_disabled_methods,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + IncludeDisabledMethods bool `protobuf:"varint,5,opt,name=include_disabled_methods,json=includeDisabledMethods,proto3" json:"include_disabled_methods,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListThirdPartyPaymentChannelsRequest) Reset() { *x = ListThirdPartyPaymentChannelsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[155] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14213,7 +14479,7 @@ func (x *ListThirdPartyPaymentChannelsRequest) String() string { func (*ListThirdPartyPaymentChannelsRequest) ProtoMessage() {} func (x *ListThirdPartyPaymentChannelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[155] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14226,7 +14492,7 @@ func (x *ListThirdPartyPaymentChannelsRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use ListThirdPartyPaymentChannelsRequest.ProtoReflect.Descriptor instead. func (*ListThirdPartyPaymentChannelsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{155} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{159} } func (x *ListThirdPartyPaymentChannelsRequest) GetRequestId() string { @@ -14265,16 +14531,15 @@ func (x *ListThirdPartyPaymentChannelsRequest) GetIncludeDisabledMethods() bool } type ListThirdPartyPaymentChannelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Channels []*ThirdPartyPaymentChannel `protobuf:"bytes,1,rep,name=channels,proto3" json:"channels,omitempty"` unknownFields protoimpl.UnknownFields - - Channels []*ThirdPartyPaymentChannel `protobuf:"bytes,1,rep,name=channels,proto3" json:"channels,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListThirdPartyPaymentChannelsResponse) Reset() { *x = ListThirdPartyPaymentChannelsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[156] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14286,7 +14551,7 @@ func (x *ListThirdPartyPaymentChannelsResponse) String() string { func (*ListThirdPartyPaymentChannelsResponse) ProtoMessage() {} func (x *ListThirdPartyPaymentChannelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[156] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14299,7 +14564,7 @@ func (x *ListThirdPartyPaymentChannelsResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use ListThirdPartyPaymentChannelsResponse.ProtoReflect.Descriptor instead. func (*ListThirdPartyPaymentChannelsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{156} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{160} } func (x *ListThirdPartyPaymentChannelsResponse) GetChannels() []*ThirdPartyPaymentChannel { @@ -14310,20 +14575,19 @@ func (x *ListThirdPartyPaymentChannelsResponse) GetChannels() []*ThirdPartyPayme } type SetThirdPartyPaymentMethodStatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - MethodId int64 `protobuf:"varint,3,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + MethodId int64 `protobuf:"varint,3,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetThirdPartyPaymentMethodStatusRequest) Reset() { *x = SetThirdPartyPaymentMethodStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[157] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14335,7 +14599,7 @@ func (x *SetThirdPartyPaymentMethodStatusRequest) String() string { func (*SetThirdPartyPaymentMethodStatusRequest) ProtoMessage() {} func (x *SetThirdPartyPaymentMethodStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[157] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14348,7 +14612,7 @@ func (x *SetThirdPartyPaymentMethodStatusRequest) ProtoReflect() protoreflect.Me // Deprecated: Use SetThirdPartyPaymentMethodStatusRequest.ProtoReflect.Descriptor instead. func (*SetThirdPartyPaymentMethodStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{157} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{161} } func (x *SetThirdPartyPaymentMethodStatusRequest) GetRequestId() string { @@ -14387,16 +14651,15 @@ func (x *SetThirdPartyPaymentMethodStatusRequest) GetOperatorUserId() int64 { } type ThirdPartyPaymentMethodResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Method *ThirdPartyPaymentMethod `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` unknownFields protoimpl.UnknownFields - - Method *ThirdPartyPaymentMethod `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ThirdPartyPaymentMethodResponse) Reset() { *x = ThirdPartyPaymentMethodResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[158] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14408,7 +14671,7 @@ func (x *ThirdPartyPaymentMethodResponse) String() string { func (*ThirdPartyPaymentMethodResponse) ProtoMessage() {} func (x *ThirdPartyPaymentMethodResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[158] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14421,7 +14684,7 @@ func (x *ThirdPartyPaymentMethodResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ThirdPartyPaymentMethodResponse.ProtoReflect.Descriptor instead. func (*ThirdPartyPaymentMethodResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{158} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{162} } func (x *ThirdPartyPaymentMethodResponse) GetMethod() *ThirdPartyPaymentMethod { @@ -14432,20 +14695,19 @@ func (x *ThirdPartyPaymentMethodResponse) GetMethod() *ThirdPartyPaymentMethod { } type UpdateThirdPartyPaymentRateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - MethodId int64 `protobuf:"varint,3,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` - UsdToCurrencyRate string `protobuf:"bytes,4,opt,name=usd_to_currency_rate,json=usdToCurrencyRate,proto3" json:"usd_to_currency_rate,omitempty"` - OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + MethodId int64 `protobuf:"varint,3,opt,name=method_id,json=methodId,proto3" json:"method_id,omitempty"` + UsdToCurrencyRate string `protobuf:"bytes,4,opt,name=usd_to_currency_rate,json=usdToCurrencyRate,proto3" json:"usd_to_currency_rate,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateThirdPartyPaymentRateRequest) Reset() { *x = UpdateThirdPartyPaymentRateRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[159] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14457,7 +14719,7 @@ func (x *UpdateThirdPartyPaymentRateRequest) String() string { func (*UpdateThirdPartyPaymentRateRequest) ProtoMessage() {} func (x *UpdateThirdPartyPaymentRateRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[159] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14470,7 +14732,7 @@ func (x *UpdateThirdPartyPaymentRateRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateThirdPartyPaymentRateRequest.ProtoReflect.Descriptor instead. func (*UpdateThirdPartyPaymentRateRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{159} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{163} } func (x *UpdateThirdPartyPaymentRateRequest) GetRequestId() string { @@ -14509,19 +14771,18 @@ func (x *UpdateThirdPartyPaymentRateRequest) GetOperatorUserId() int64 { } type ThirdPartyPaymentMethodSyncIssue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - CountryCode string `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` - Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ThirdPartyPaymentMethodSyncIssue) Reset() { *x = ThirdPartyPaymentMethodSyncIssue{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[160] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14533,7 +14794,7 @@ func (x *ThirdPartyPaymentMethodSyncIssue) String() string { func (*ThirdPartyPaymentMethodSyncIssue) ProtoMessage() {} func (x *ThirdPartyPaymentMethodSyncIssue) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[160] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14546,7 +14807,7 @@ func (x *ThirdPartyPaymentMethodSyncIssue) ProtoReflect() protoreflect.Message { // Deprecated: Use ThirdPartyPaymentMethodSyncIssue.ProtoReflect.Descriptor instead. func (*ThirdPartyPaymentMethodSyncIssue) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{160} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{164} } func (x *ThirdPartyPaymentMethodSyncIssue) GetCountryCode() string { @@ -14578,19 +14839,18 @@ func (x *ThirdPartyPaymentMethodSyncIssue) GetMessage() string { } type SyncThirdPartyPaymentMethodsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SyncThirdPartyPaymentMethodsRequest) Reset() { *x = SyncThirdPartyPaymentMethodsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[161] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14602,7 +14862,7 @@ func (x *SyncThirdPartyPaymentMethodsRequest) String() string { func (*SyncThirdPartyPaymentMethodsRequest) ProtoMessage() {} func (x *SyncThirdPartyPaymentMethodsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[161] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14615,7 +14875,7 @@ func (x *SyncThirdPartyPaymentMethodsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use SyncThirdPartyPaymentMethodsRequest.ProtoReflect.Descriptor instead. func (*SyncThirdPartyPaymentMethodsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{161} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{165} } func (x *SyncThirdPartyPaymentMethodsRequest) GetRequestId() string { @@ -14647,10 +14907,7 @@ func (x *SyncThirdPartyPaymentMethodsRequest) GetOperatorUserId() int64 { } type SyncThirdPartyPaymentMethodsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ProviderCode string `protobuf:"bytes,1,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` ScannedCountryCount int32 `protobuf:"varint,2,opt,name=scanned_country_count,json=scannedCountryCount,proto3" json:"scanned_country_count,omitempty"` FetchedCountryCount int32 `protobuf:"varint,3,opt,name=fetched_country_count,json=fetchedCountryCount,proto3" json:"fetched_country_count,omitempty"` @@ -14658,11 +14915,13 @@ type SyncThirdPartyPaymentMethodsResponse struct { UpdatedCount int32 `protobuf:"varint,5,opt,name=updated_count,json=updatedCount,proto3" json:"updated_count,omitempty"` SkippedCount int32 `protobuf:"varint,6,opt,name=skipped_count,json=skippedCount,proto3" json:"skipped_count,omitempty"` Issues []*ThirdPartyPaymentMethodSyncIssue `protobuf:"bytes,7,rep,name=issues,proto3" json:"issues,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SyncThirdPartyPaymentMethodsResponse) Reset() { *x = SyncThirdPartyPaymentMethodsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[162] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14674,7 +14933,7 @@ func (x *SyncThirdPartyPaymentMethodsResponse) String() string { func (*SyncThirdPartyPaymentMethodsResponse) ProtoMessage() {} func (x *SyncThirdPartyPaymentMethodsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[162] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14687,7 +14946,7 @@ func (x *SyncThirdPartyPaymentMethodsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use SyncThirdPartyPaymentMethodsResponse.ProtoReflect.Descriptor instead. func (*SyncThirdPartyPaymentMethodsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{162} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{166} } func (x *SyncThirdPartyPaymentMethodsResponse) GetProviderCode() string { @@ -14740,21 +14999,20 @@ func (x *SyncThirdPartyPaymentMethodsResponse) GetIssues() []*ThirdPartyPaymentM } type H5RechargeOptionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - TargetRegionId int64 `protobuf:"varint,4,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` - TargetCountryCode string `protobuf:"bytes,5,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` - AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + TargetRegionId int64 `protobuf:"varint,4,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` + TargetCountryCode string `protobuf:"bytes,5,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` + AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *H5RechargeOptionsRequest) Reset() { *x = H5RechargeOptionsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[163] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14766,7 +15024,7 @@ func (x *H5RechargeOptionsRequest) String() string { func (*H5RechargeOptionsRequest) ProtoMessage() {} func (x *H5RechargeOptionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[163] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14779,7 +15037,7 @@ func (x *H5RechargeOptionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use H5RechargeOptionsRequest.ProtoReflect.Descriptor instead. func (*H5RechargeOptionsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{163} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{167} } func (x *H5RechargeOptionsRequest) GetRequestId() string { @@ -14825,19 +15083,18 @@ func (x *H5RechargeOptionsRequest) GetAudienceType() string { } type H5RechargeOptionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Products []*RechargeProduct `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` PaymentMethods []*ThirdPartyPaymentMethod `protobuf:"bytes,2,rep,name=payment_methods,json=paymentMethods,proto3" json:"payment_methods,omitempty"` UsdtTrc20Enabled bool `protobuf:"varint,3,opt,name=usdt_trc20_enabled,json=usdtTrc20Enabled,proto3" json:"usdt_trc20_enabled,omitempty"` UsdtTrc20Address string `protobuf:"bytes,4,opt,name=usdt_trc20_address,json=usdtTrc20Address,proto3" json:"usdt_trc20_address,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *H5RechargeOptionsResponse) Reset() { *x = H5RechargeOptionsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[164] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14849,7 +15106,7 @@ func (x *H5RechargeOptionsResponse) String() string { func (*H5RechargeOptionsResponse) ProtoMessage() {} func (x *H5RechargeOptionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[164] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14862,7 +15119,7 @@ func (x *H5RechargeOptionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use H5RechargeOptionsResponse.ProtoReflect.Descriptor instead. func (*H5RechargeOptionsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{164} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{168} } func (x *H5RechargeOptionsResponse) GetProducts() []*RechargeProduct { @@ -14894,44 +15151,43 @@ func (x *H5RechargeOptionsResponse) GetUsdtTrc20Address() string { } type ExternalRechargeOrder struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - TargetRegionId int64 `protobuf:"varint,4,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` - TargetCountryCode string `protobuf:"bytes,5,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` - AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` - ProductId int64 `protobuf:"varint,7,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - ProductName string `protobuf:"bytes,8,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` - CoinAmount int64 `protobuf:"varint,9,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,10,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` - ProviderCode string `protobuf:"bytes,11,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - PaymentMethodId int64 `protobuf:"varint,12,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` - CountryCode string `protobuf:"bytes,13,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - CurrencyCode string `protobuf:"bytes,14,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - ProviderAmountMinor int64 `protobuf:"varint,15,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` - PayWay string `protobuf:"bytes,16,opt,name=pay_way,json=payWay,proto3" json:"pay_way,omitempty"` - PayType string `protobuf:"bytes,17,opt,name=pay_type,json=payType,proto3" json:"pay_type,omitempty"` - PayUrl string `protobuf:"bytes,18,opt,name=pay_url,json=payUrl,proto3" json:"pay_url,omitempty"` - ProviderOrderId string `protobuf:"bytes,19,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` - TxHash string `protobuf:"bytes,20,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` - ReceiveAddress string `protobuf:"bytes,21,opt,name=receive_address,json=receiveAddress,proto3" json:"receive_address,omitempty"` - Status string `protobuf:"bytes,22,opt,name=status,proto3" json:"status,omitempty"` - FailureReason string `protobuf:"bytes,23,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - TransactionId string `protobuf:"bytes,24,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,25,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,26,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - IdempotentReplay bool `protobuf:"varint,27,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + TargetRegionId int64 `protobuf:"varint,4,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` + TargetCountryCode string `protobuf:"bytes,5,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` + AudienceType string `protobuf:"bytes,6,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + ProductId int64 `protobuf:"varint,7,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + ProductName string `protobuf:"bytes,8,opt,name=product_name,json=productName,proto3" json:"product_name,omitempty"` + CoinAmount int64 `protobuf:"varint,9,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,10,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + ProviderCode string `protobuf:"bytes,11,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + PaymentMethodId int64 `protobuf:"varint,12,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` + CountryCode string `protobuf:"bytes,13,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + CurrencyCode string `protobuf:"bytes,14,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + ProviderAmountMinor int64 `protobuf:"varint,15,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` + PayWay string `protobuf:"bytes,16,opt,name=pay_way,json=payWay,proto3" json:"pay_way,omitempty"` + PayType string `protobuf:"bytes,17,opt,name=pay_type,json=payType,proto3" json:"pay_type,omitempty"` + PayUrl string `protobuf:"bytes,18,opt,name=pay_url,json=payUrl,proto3" json:"pay_url,omitempty"` + ProviderOrderId string `protobuf:"bytes,19,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` + TxHash string `protobuf:"bytes,20,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` + ReceiveAddress string `protobuf:"bytes,21,opt,name=receive_address,json=receiveAddress,proto3" json:"receive_address,omitempty"` + Status string `protobuf:"bytes,22,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,23,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + TransactionId string `protobuf:"bytes,24,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,25,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,26,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + IdempotentReplay bool `protobuf:"varint,27,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` // target_country_id 是下单时目标用户国家快照,支付回调入账直接复用,避免异步回调再查用户主数据。 TargetCountryId int64 `protobuf:"varint,28,opt,name=target_country_id,json=targetCountryId,proto3" json:"target_country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExternalRechargeOrder) Reset() { *x = ExternalRechargeOrder{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[165] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14943,7 +15199,7 @@ func (x *ExternalRechargeOrder) String() string { func (*ExternalRechargeOrder) ProtoMessage() {} func (x *ExternalRechargeOrder) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[165] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14956,7 +15212,7 @@ func (x *ExternalRechargeOrder) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalRechargeOrder.ProtoReflect.Descriptor instead. func (*ExternalRechargeOrder) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{165} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{169} } func (x *ExternalRechargeOrder) GetOrderId() string { @@ -15156,35 +15412,34 @@ func (x *ExternalRechargeOrder) GetTargetCountryId() int64 { } type CreateH5RechargeOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - TargetRegionId int64 `protobuf:"varint,5,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` - TargetCountryCode string `protobuf:"bytes,6,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` - AudienceType string `protobuf:"bytes,7,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` - ProductId int64 `protobuf:"varint,8,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - ProviderCode string `protobuf:"bytes,9,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - PaymentMethodId int64 `protobuf:"varint,10,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` - ReturnUrl string `protobuf:"bytes,11,opt,name=return_url,json=returnUrl,proto3" json:"return_url,omitempty"` - NotifyUrl string `protobuf:"bytes,12,opt,name=notify_url,json=notifyUrl,proto3" json:"notify_url,omitempty"` - ClientIp string `protobuf:"bytes,13,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` - Language string `protobuf:"bytes,14,opt,name=language,proto3" json:"language,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + TargetRegionId int64 `protobuf:"varint,5,opt,name=target_region_id,json=targetRegionId,proto3" json:"target_region_id,omitempty"` + TargetCountryCode string `protobuf:"bytes,6,opt,name=target_country_code,json=targetCountryCode,proto3" json:"target_country_code,omitempty"` + AudienceType string `protobuf:"bytes,7,opt,name=audience_type,json=audienceType,proto3" json:"audience_type,omitempty"` + ProductId int64 `protobuf:"varint,8,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + ProviderCode string `protobuf:"bytes,9,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + PaymentMethodId int64 `protobuf:"varint,10,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` + ReturnUrl string `protobuf:"bytes,11,opt,name=return_url,json=returnUrl,proto3" json:"return_url,omitempty"` + NotifyUrl string `protobuf:"bytes,12,opt,name=notify_url,json=notifyUrl,proto3" json:"notify_url,omitempty"` + ClientIp string `protobuf:"bytes,13,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` + Language string `protobuf:"bytes,14,opt,name=language,proto3" json:"language,omitempty"` // payer_name / payer_account 来自 gateway 重新解析的目标用户资料,不接受 H5 前端自报。 PayerName string `protobuf:"bytes,15,opt,name=payer_name,json=payerName,proto3" json:"payer_name,omitempty"` PayerAccount string `protobuf:"bytes,16,opt,name=payer_account,json=payerAccount,proto3" json:"payer_account,omitempty"` PayerEmail string `protobuf:"bytes,17,opt,name=payer_email,json=payerEmail,proto3" json:"payer_email,omitempty"` // target_country_id 由 gateway 从 user-service 解析目标用户,不接受 H5 前端自报。 TargetCountryId int64 `protobuf:"varint,18,opt,name=target_country_id,json=targetCountryId,proto3" json:"target_country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateH5RechargeOrderRequest) Reset() { *x = CreateH5RechargeOrderRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[166] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15196,7 +15451,7 @@ func (x *CreateH5RechargeOrderRequest) String() string { func (*CreateH5RechargeOrderRequest) ProtoMessage() {} func (x *CreateH5RechargeOrderRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[166] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15209,7 +15464,7 @@ func (x *CreateH5RechargeOrderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateH5RechargeOrderRequest.ProtoReflect.Descriptor instead. func (*CreateH5RechargeOrderRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{166} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{170} } func (x *CreateH5RechargeOrderRequest) GetRequestId() string { @@ -15339,29 +15594,28 @@ func (x *CreateH5RechargeOrderRequest) GetTargetCountryId() int64 { } type CreateTemporaryRechargeOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,5,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` - ProviderCode string `protobuf:"bytes,6,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - PaymentMethodId int64 `protobuf:"varint,7,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` - ReturnUrl string `protobuf:"bytes,8,opt,name=return_url,json=returnUrl,proto3" json:"return_url,omitempty"` - NotifyUrl string `protobuf:"bytes,9,opt,name=notify_url,json=notifyUrl,proto3" json:"notify_url,omitempty"` - ClientIp string `protobuf:"bytes,10,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` - Language string `protobuf:"bytes,11,opt,name=language,proto3" json:"language,omitempty"` - PayerName string `protobuf:"bytes,12,opt,name=payer_name,json=payerName,proto3" json:"payer_name,omitempty"` - PayerAccount string `protobuf:"bytes,13,opt,name=payer_account,json=payerAccount,proto3" json:"payer_account,omitempty"` - PayerEmail string `protobuf:"bytes,14,opt,name=payer_email,json=payerEmail,proto3" json:"payer_email,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + CoinAmount int64 `protobuf:"varint,4,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,5,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + ProviderCode string `protobuf:"bytes,6,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + PaymentMethodId int64 `protobuf:"varint,7,opt,name=payment_method_id,json=paymentMethodId,proto3" json:"payment_method_id,omitempty"` + ReturnUrl string `protobuf:"bytes,8,opt,name=return_url,json=returnUrl,proto3" json:"return_url,omitempty"` + NotifyUrl string `protobuf:"bytes,9,opt,name=notify_url,json=notifyUrl,proto3" json:"notify_url,omitempty"` + ClientIp string `protobuf:"bytes,10,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` + Language string `protobuf:"bytes,11,opt,name=language,proto3" json:"language,omitempty"` + PayerName string `protobuf:"bytes,12,opt,name=payer_name,json=payerName,proto3" json:"payer_name,omitempty"` + PayerAccount string `protobuf:"bytes,13,opt,name=payer_account,json=payerAccount,proto3" json:"payer_account,omitempty"` + PayerEmail string `protobuf:"bytes,14,opt,name=payer_email,json=payerEmail,proto3" json:"payer_email,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateTemporaryRechargeOrderRequest) Reset() { *x = CreateTemporaryRechargeOrderRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[167] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15373,7 +15627,7 @@ func (x *CreateTemporaryRechargeOrderRequest) String() string { func (*CreateTemporaryRechargeOrderRequest) ProtoMessage() {} func (x *CreateTemporaryRechargeOrderRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[167] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15386,7 +15640,7 @@ func (x *CreateTemporaryRechargeOrderRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use CreateTemporaryRechargeOrderRequest.ProtoReflect.Descriptor instead. func (*CreateTemporaryRechargeOrderRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{167} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{171} } func (x *CreateTemporaryRechargeOrderRequest) GetRequestId() string { @@ -15488,18 +15742,17 @@ func (x *CreateTemporaryRechargeOrderRequest) GetPayerEmail() string { } type GetTemporaryRechargeOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTemporaryRechargeOrderRequest) Reset() { *x = GetTemporaryRechargeOrderRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[168] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15511,7 +15764,7 @@ func (x *GetTemporaryRechargeOrderRequest) String() string { func (*GetTemporaryRechargeOrderRequest) ProtoMessage() {} func (x *GetTemporaryRechargeOrderRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[168] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15524,7 +15777,7 @@ func (x *GetTemporaryRechargeOrderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTemporaryRechargeOrderRequest.ProtoReflect.Descriptor instead. func (*GetTemporaryRechargeOrderRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{168} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{172} } func (x *GetTemporaryRechargeOrderRequest) GetRequestId() string { @@ -15549,22 +15802,21 @@ func (x *GetTemporaryRechargeOrderRequest) GetOrderId() string { } type ListTemporaryRechargeOrdersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + ProviderCode string `protobuf:"bytes,4,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - ProviderCode string `protobuf:"bytes,4,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListTemporaryRechargeOrdersRequest) Reset() { *x = ListTemporaryRechargeOrdersRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[169] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15576,7 +15828,7 @@ func (x *ListTemporaryRechargeOrdersRequest) String() string { func (*ListTemporaryRechargeOrdersRequest) ProtoMessage() {} func (x *ListTemporaryRechargeOrdersRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[169] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15589,7 +15841,7 @@ func (x *ListTemporaryRechargeOrdersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ListTemporaryRechargeOrdersRequest.ProtoReflect.Descriptor instead. func (*ListTemporaryRechargeOrdersRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{169} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{173} } func (x *ListTemporaryRechargeOrdersRequest) GetRequestId() string { @@ -15642,17 +15894,16 @@ func (x *ListTemporaryRechargeOrdersRequest) GetPageSize() int32 { } type ListTemporaryRechargeOrdersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Orders []*ExternalRechargeOrder `protobuf:"bytes,1,rep,name=orders,proto3" json:"orders,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Orders []*ExternalRechargeOrder `protobuf:"bytes,1,rep,name=orders,proto3" json:"orders,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListTemporaryRechargeOrdersResponse) Reset() { *x = ListTemporaryRechargeOrdersResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[170] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15664,7 +15915,7 @@ func (x *ListTemporaryRechargeOrdersResponse) String() string { func (*ListTemporaryRechargeOrdersResponse) ProtoMessage() {} func (x *ListTemporaryRechargeOrdersResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[170] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15677,7 +15928,7 @@ func (x *ListTemporaryRechargeOrdersResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use ListTemporaryRechargeOrdersResponse.ProtoReflect.Descriptor instead. func (*ListTemporaryRechargeOrdersResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{170} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{174} } func (x *ListTemporaryRechargeOrdersResponse) GetOrders() []*ExternalRechargeOrder { @@ -15695,20 +15946,19 @@ func (x *ListTemporaryRechargeOrdersResponse) GetTotal() int64 { } type SubmitH5RechargeTxRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + TxHash string `protobuf:"bytes,5,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - TxHash string `protobuf:"bytes,5,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubmitH5RechargeTxRequest) Reset() { *x = SubmitH5RechargeTxRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[171] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15720,7 +15970,7 @@ func (x *SubmitH5RechargeTxRequest) String() string { func (*SubmitH5RechargeTxRequest) ProtoMessage() {} func (x *SubmitH5RechargeTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[171] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15733,7 +15983,7 @@ func (x *SubmitH5RechargeTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitH5RechargeTxRequest.ProtoReflect.Descriptor instead. func (*SubmitH5RechargeTxRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{171} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{175} } func (x *SubmitH5RechargeTxRequest) GetRequestId() string { @@ -15772,19 +16022,18 @@ func (x *SubmitH5RechargeTxRequest) GetTxHash() string { } type GetH5RechargeOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetH5RechargeOrderRequest) Reset() { *x = GetH5RechargeOrderRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[172] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15796,7 +16045,7 @@ func (x *GetH5RechargeOrderRequest) String() string { func (*GetH5RechargeOrderRequest) ProtoMessage() {} func (x *GetH5RechargeOrderRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[172] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15809,7 +16058,7 @@ func (x *GetH5RechargeOrderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetH5RechargeOrderRequest.ProtoReflect.Descriptor instead. func (*GetH5RechargeOrderRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{172} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{176} } func (x *GetH5RechargeOrderRequest) GetRequestId() string { @@ -15841,16 +16090,15 @@ func (x *GetH5RechargeOrderRequest) GetTargetUserId() int64 { } type H5RechargeOrderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Order *ExternalRechargeOrder `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` unknownFields protoimpl.UnknownFields - - Order *ExternalRechargeOrder `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *H5RechargeOrderResponse) Reset() { *x = H5RechargeOrderResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[173] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15862,7 +16110,7 @@ func (x *H5RechargeOrderResponse) String() string { func (*H5RechargeOrderResponse) ProtoMessage() {} func (x *H5RechargeOrderResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[173] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15875,7 +16123,7 @@ func (x *H5RechargeOrderResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use H5RechargeOrderResponse.ProtoReflect.Descriptor instead. func (*H5RechargeOrderResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{173} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{177} } func (x *H5RechargeOrderResponse) GetOrder() *ExternalRechargeOrder { @@ -15886,26 +16134,28 @@ func (x *H5RechargeOrderResponse) GetOrder() *ExternalRechargeOrder { } type VerifyCoinSellerRechargeReceiptRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - ExternalOrderNo string `protobuf:"bytes,4,opt,name=external_order_no,json=externalOrderNo,proto3" json:"external_order_no,omitempty"` - Chain string `protobuf:"bytes,5,opt,name=chain,proto3" json:"chain,omitempty"` - UsdMinorAmount int64 `protobuf:"varint,6,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` - OrderDateMs int64 `protobuf:"varint,7,opt,name=order_date_ms,json=orderDateMs,proto3" json:"order_date_ms,omitempty"` - ProviderCountryCode string `protobuf:"bytes,8,opt,name=provider_country_code,json=providerCountryCode,proto3" json:"provider_country_code,omitempty"` - ProviderCurrencyCode string `protobuf:"bytes,9,opt,name=provider_currency_code,json=providerCurrencyCode,proto3" json:"provider_currency_code,omitempty"` - ProviderPayType string `protobuf:"bytes,10,opt,name=provider_pay_type,json=providerPayType,proto3" json:"provider_pay_type,omitempty"` - ProviderAmountMinor int64 `protobuf:"varint,11,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ProviderCode string `protobuf:"bytes,3,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + ExternalOrderNo string `protobuf:"bytes,4,opt,name=external_order_no,json=externalOrderNo,proto3" json:"external_order_no,omitempty"` + Chain string `protobuf:"bytes,5,opt,name=chain,proto3" json:"chain,omitempty"` + UsdMinorAmount int64 `protobuf:"varint,6,opt,name=usd_minor_amount,json=usdMinorAmount,proto3" json:"usd_minor_amount,omitempty"` + OrderDateMs int64 `protobuf:"varint,7,opt,name=order_date_ms,json=orderDateMs,proto3" json:"order_date_ms,omitempty"` + ProviderCountryCode string `protobuf:"bytes,8,opt,name=provider_country_code,json=providerCountryCode,proto3" json:"provider_country_code,omitempty"` + ProviderCurrencyCode string `protobuf:"bytes,9,opt,name=provider_currency_code,json=providerCurrencyCode,proto3" json:"provider_currency_code,omitempty"` + ProviderPayType string `protobuf:"bytes,10,opt,name=provider_pay_type,json=providerPayType,proto3" json:"provider_pay_type,omitempty"` + ProviderAmountMinor int64 `protobuf:"varint,11,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` + // receive_address 由可信后台从 app-scoped SQL 配置读取;非空时覆盖 wallet YAML, + // 让运营修改收款地址后立即按新地址校验,同时避免 wallet-service 反向直连 admin 数据库。 + ReceiveAddress string `protobuf:"bytes,12,opt,name=receive_address,json=receiveAddress,proto3" json:"receive_address,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifyCoinSellerRechargeReceiptRequest) Reset() { *x = VerifyCoinSellerRechargeReceiptRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[174] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15917,7 +16167,7 @@ func (x *VerifyCoinSellerRechargeReceiptRequest) String() string { func (*VerifyCoinSellerRechargeReceiptRequest) ProtoMessage() {} func (x *VerifyCoinSellerRechargeReceiptRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[174] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15930,7 +16180,7 @@ func (x *VerifyCoinSellerRechargeReceiptRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use VerifyCoinSellerRechargeReceiptRequest.ProtoReflect.Descriptor instead. func (*VerifyCoinSellerRechargeReceiptRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{174} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{178} } func (x *VerifyCoinSellerRechargeReceiptRequest) GetRequestId() string { @@ -16010,28 +16260,34 @@ func (x *VerifyCoinSellerRechargeReceiptRequest) GetProviderAmountMinor() int64 return 0 } -type VerifyCoinSellerRechargeReceiptResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *VerifyCoinSellerRechargeReceiptRequest) GetReceiveAddress() string { + if x != nil { + return x.ReceiveAddress + } + return "" +} - Verified bool `protobuf:"varint,1,opt,name=verified,proto3" json:"verified,omitempty"` - ProviderCode string `protobuf:"bytes,2,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` - ExternalOrderNo string `protobuf:"bytes,3,opt,name=external_order_no,json=externalOrderNo,proto3" json:"external_order_no,omitempty"` - ProviderOrderId string `protobuf:"bytes,4,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - CurrencyCode string `protobuf:"bytes,6,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` - ProviderAmountMinor int64 `protobuf:"varint,7,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` - RawJson string `protobuf:"bytes,8,opt,name=raw_json,json=rawJson,proto3" json:"raw_json,omitempty"` - Chain string `protobuf:"bytes,9,opt,name=chain,proto3" json:"chain,omitempty"` - ReceiveAddress string `protobuf:"bytes,10,opt,name=receive_address,json=receiveAddress,proto3" json:"receive_address,omitempty"` - VerifiedAtMs int64 `protobuf:"varint,11,opt,name=verified_at_ms,json=verifiedAtMs,proto3" json:"verified_at_ms,omitempty"` - FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` +type VerifyCoinSellerRechargeReceiptResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Verified bool `protobuf:"varint,1,opt,name=verified,proto3" json:"verified,omitempty"` + ProviderCode string `protobuf:"bytes,2,opt,name=provider_code,json=providerCode,proto3" json:"provider_code,omitempty"` + ExternalOrderNo string `protobuf:"bytes,3,opt,name=external_order_no,json=externalOrderNo,proto3" json:"external_order_no,omitempty"` + ProviderOrderId string `protobuf:"bytes,4,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + CurrencyCode string `protobuf:"bytes,6,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + ProviderAmountMinor int64 `protobuf:"varint,7,opt,name=provider_amount_minor,json=providerAmountMinor,proto3" json:"provider_amount_minor,omitempty"` + RawJson string `protobuf:"bytes,8,opt,name=raw_json,json=rawJson,proto3" json:"raw_json,omitempty"` + Chain string `protobuf:"bytes,9,opt,name=chain,proto3" json:"chain,omitempty"` + ReceiveAddress string `protobuf:"bytes,10,opt,name=receive_address,json=receiveAddress,proto3" json:"receive_address,omitempty"` + VerifiedAtMs int64 `protobuf:"varint,11,opt,name=verified_at_ms,json=verifiedAtMs,proto3" json:"verified_at_ms,omitempty"` + FailureReason string `protobuf:"bytes,12,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifyCoinSellerRechargeReceiptResponse) Reset() { *x = VerifyCoinSellerRechargeReceiptResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[175] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16043,7 +16299,7 @@ func (x *VerifyCoinSellerRechargeReceiptResponse) String() string { func (*VerifyCoinSellerRechargeReceiptResponse) ProtoMessage() {} func (x *VerifyCoinSellerRechargeReceiptResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[175] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16056,7 +16312,7 @@ func (x *VerifyCoinSellerRechargeReceiptResponse) ProtoReflect() protoreflect.Me // Deprecated: Use VerifyCoinSellerRechargeReceiptResponse.ProtoReflect.Descriptor instead. func (*VerifyCoinSellerRechargeReceiptResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{175} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{179} } func (x *VerifyCoinSellerRechargeReceiptResponse) GetVerified() bool { @@ -16144,20 +16400,19 @@ func (x *VerifyCoinSellerRechargeReceiptResponse) GetFailureReason() string { } type HandleMifapayNotifyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + MerAccount string `protobuf:"bytes,3,opt,name=mer_account,json=merAccount,proto3" json:"mer_account,omitempty"` + Data string `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + Sign string `protobuf:"bytes,5,opt,name=sign,proto3" json:"sign,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - MerAccount string `protobuf:"bytes,3,opt,name=mer_account,json=merAccount,proto3" json:"mer_account,omitempty"` - Data string `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` - Sign string `protobuf:"bytes,5,opt,name=sign,proto3" json:"sign,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HandleMifapayNotifyRequest) Reset() { *x = HandleMifapayNotifyRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[176] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16169,7 +16424,7 @@ func (x *HandleMifapayNotifyRequest) String() string { func (*HandleMifapayNotifyRequest) ProtoMessage() {} func (x *HandleMifapayNotifyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[176] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16182,7 +16437,7 @@ func (x *HandleMifapayNotifyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleMifapayNotifyRequest.ProtoReflect.Descriptor instead. func (*HandleMifapayNotifyRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{176} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{180} } func (x *HandleMifapayNotifyRequest) GetRequestId() string { @@ -16221,18 +16476,17 @@ func (x *HandleMifapayNotifyRequest) GetSign() string { } type HandleMifapayNotifyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` + ResponseText string `protobuf:"bytes,2,opt,name=response_text,json=responseText,proto3" json:"response_text,omitempty"` + OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` unknownFields protoimpl.UnknownFields - - Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` - ResponseText string `protobuf:"bytes,2,opt,name=response_text,json=responseText,proto3" json:"response_text,omitempty"` - OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HandleMifapayNotifyResponse) Reset() { *x = HandleMifapayNotifyResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[177] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16244,7 +16498,7 @@ func (x *HandleMifapayNotifyResponse) String() string { func (*HandleMifapayNotifyResponse) ProtoMessage() {} func (x *HandleMifapayNotifyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[177] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16257,7 +16511,7 @@ func (x *HandleMifapayNotifyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleMifapayNotifyResponse.ProtoReflect.Descriptor instead. func (*HandleMifapayNotifyResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{177} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{181} } func (x *HandleMifapayNotifyResponse) GetAccepted() bool { @@ -16282,19 +16536,18 @@ func (x *HandleMifapayNotifyResponse) GetOrderId() string { } type HandleV5PayNotifyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RawJson string `protobuf:"bytes,3,opt,name=raw_json,json=rawJson,proto3" json:"raw_json,omitempty"` + Fields map[string]string `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RawJson string `protobuf:"bytes,3,opt,name=raw_json,json=rawJson,proto3" json:"raw_json,omitempty"` - Fields map[string]string `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + sizeCache protoimpl.SizeCache } func (x *HandleV5PayNotifyRequest) Reset() { *x = HandleV5PayNotifyRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[178] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16306,7 +16559,7 @@ func (x *HandleV5PayNotifyRequest) String() string { func (*HandleV5PayNotifyRequest) ProtoMessage() {} func (x *HandleV5PayNotifyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[178] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16319,7 +16572,7 @@ func (x *HandleV5PayNotifyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleV5PayNotifyRequest.ProtoReflect.Descriptor instead. func (*HandleV5PayNotifyRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{178} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{182} } func (x *HandleV5PayNotifyRequest) GetRequestId() string { @@ -16351,18 +16604,17 @@ func (x *HandleV5PayNotifyRequest) GetFields() map[string]string { } type HandleV5PayNotifyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` + ResponseText string `protobuf:"bytes,2,opt,name=response_text,json=responseText,proto3" json:"response_text,omitempty"` + OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` unknownFields protoimpl.UnknownFields - - Accepted bool `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` - ResponseText string `protobuf:"bytes,2,opt,name=response_text,json=responseText,proto3" json:"response_text,omitempty"` - OrderId string `protobuf:"bytes,3,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HandleV5PayNotifyResponse) Reset() { *x = HandleV5PayNotifyResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[179] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16374,7 +16626,7 @@ func (x *HandleV5PayNotifyResponse) String() string { func (*HandleV5PayNotifyResponse) ProtoMessage() {} func (x *HandleV5PayNotifyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[179] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16387,7 +16639,7 @@ func (x *HandleV5PayNotifyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleV5PayNotifyResponse.ProtoReflect.Descriptor instead. func (*HandleV5PayNotifyResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{179} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{183} } func (x *HandleV5PayNotifyResponse) GetAccepted() bool { @@ -16412,21 +16664,20 @@ func (x *HandleV5PayNotifyResponse) GetOrderId() string { } type DiamondExchangeRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ExchangeType string `protobuf:"bytes,1,opt,name=exchange_type,json=exchangeType,proto3" json:"exchange_type,omitempty"` + FromAssetType string `protobuf:"bytes,2,opt,name=from_asset_type,json=fromAssetType,proto3" json:"from_asset_type,omitempty"` + ToAssetType string `protobuf:"bytes,3,opt,name=to_asset_type,json=toAssetType,proto3" json:"to_asset_type,omitempty"` + FromAmount int64 `protobuf:"varint,4,opt,name=from_amount,json=fromAmount,proto3" json:"from_amount,omitempty"` + ToAmount int64 `protobuf:"varint,5,opt,name=to_amount,json=toAmount,proto3" json:"to_amount,omitempty"` + Enabled bool `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - ExchangeType string `protobuf:"bytes,1,opt,name=exchange_type,json=exchangeType,proto3" json:"exchange_type,omitempty"` - FromAssetType string `protobuf:"bytes,2,opt,name=from_asset_type,json=fromAssetType,proto3" json:"from_asset_type,omitempty"` - ToAssetType string `protobuf:"bytes,3,opt,name=to_asset_type,json=toAssetType,proto3" json:"to_asset_type,omitempty"` - FromAmount int64 `protobuf:"varint,4,opt,name=from_amount,json=fromAmount,proto3" json:"from_amount,omitempty"` - ToAmount int64 `protobuf:"varint,5,opt,name=to_amount,json=toAmount,proto3" json:"to_amount,omitempty"` - Enabled bool `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiamondExchangeRule) Reset() { *x = DiamondExchangeRule{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[180] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16438,7 +16689,7 @@ func (x *DiamondExchangeRule) String() string { func (*DiamondExchangeRule) ProtoMessage() {} func (x *DiamondExchangeRule) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[180] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16451,7 +16702,7 @@ func (x *DiamondExchangeRule) ProtoReflect() protoreflect.Message { // Deprecated: Use DiamondExchangeRule.ProtoReflect.Descriptor instead. func (*DiamondExchangeRule) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{180} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{184} } func (x *DiamondExchangeRule) GetExchangeType() string { @@ -16497,18 +16748,17 @@ func (x *DiamondExchangeRule) GetEnabled() bool { } type GetDiamondExchangeConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDiamondExchangeConfigRequest) Reset() { *x = GetDiamondExchangeConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[181] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16520,7 +16770,7 @@ func (x *GetDiamondExchangeConfigRequest) String() string { func (*GetDiamondExchangeConfigRequest) ProtoMessage() {} func (x *GetDiamondExchangeConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[181] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16533,7 +16783,7 @@ func (x *GetDiamondExchangeConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiamondExchangeConfigRequest.ProtoReflect.Descriptor instead. func (*GetDiamondExchangeConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{181} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{185} } func (x *GetDiamondExchangeConfigRequest) GetRequestId() string { @@ -16558,16 +16808,15 @@ func (x *GetDiamondExchangeConfigRequest) GetUserId() int64 { } type GetDiamondExchangeConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rules []*DiamondExchangeRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` unknownFields protoimpl.UnknownFields - - Rules []*DiamondExchangeRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDiamondExchangeConfigResponse) Reset() { *x = GetDiamondExchangeConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[182] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16579,7 +16828,7 @@ func (x *GetDiamondExchangeConfigResponse) String() string { func (*GetDiamondExchangeConfigResponse) ProtoMessage() {} func (x *GetDiamondExchangeConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[182] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16592,7 +16841,7 @@ func (x *GetDiamondExchangeConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiamondExchangeConfigResponse.ProtoReflect.Descriptor instead. func (*GetDiamondExchangeConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{182} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{186} } func (x *GetDiamondExchangeConfigResponse) GetRules() []*DiamondExchangeRule { @@ -16604,28 +16853,27 @@ func (x *GetDiamondExchangeConfigResponse) GetRules() []*DiamondExchangeRule { // WalletTransaction 是用户钱包流水页使用的分录级投影。 type WalletTransaction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EntryId int64 `protobuf:"varint,1,opt,name=entry_id,json=entryId,proto3" json:"entry_id,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - BizType string `protobuf:"bytes,3,opt,name=biz_type,json=bizType,proto3" json:"biz_type,omitempty"` - AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - AvailableDelta int64 `protobuf:"varint,5,opt,name=available_delta,json=availableDelta,proto3" json:"available_delta,omitempty"` - FrozenDelta int64 `protobuf:"varint,6,opt,name=frozen_delta,json=frozenDelta,proto3" json:"frozen_delta,omitempty"` - AvailableAfter int64 `protobuf:"varint,7,opt,name=available_after,json=availableAfter,proto3" json:"available_after,omitempty"` - FrozenAfter int64 `protobuf:"varint,8,opt,name=frozen_after,json=frozenAfter,proto3" json:"frozen_after,omitempty"` - CounterpartyUserId int64 `protobuf:"varint,9,opt,name=counterparty_user_id,json=counterpartyUserId,proto3" json:"counterparty_user_id,omitempty"` - RoomId string `protobuf:"bytes,10,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - TransferUsdMinor int64 `protobuf:"varint,12,opt,name=transfer_usd_minor,json=transferUsdMinor,proto3" json:"transfer_usd_minor,omitempty"` - TransferCurrencyCode string `protobuf:"bytes,13,opt,name=transfer_currency_code,json=transferCurrencyCode,proto3" json:"transfer_currency_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EntryId int64 `protobuf:"varint,1,opt,name=entry_id,json=entryId,proto3" json:"entry_id,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + BizType string `protobuf:"bytes,3,opt,name=biz_type,json=bizType,proto3" json:"biz_type,omitempty"` + AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + AvailableDelta int64 `protobuf:"varint,5,opt,name=available_delta,json=availableDelta,proto3" json:"available_delta,omitempty"` + FrozenDelta int64 `protobuf:"varint,6,opt,name=frozen_delta,json=frozenDelta,proto3" json:"frozen_delta,omitempty"` + AvailableAfter int64 `protobuf:"varint,7,opt,name=available_after,json=availableAfter,proto3" json:"available_after,omitempty"` + FrozenAfter int64 `protobuf:"varint,8,opt,name=frozen_after,json=frozenAfter,proto3" json:"frozen_after,omitempty"` + CounterpartyUserId int64 `protobuf:"varint,9,opt,name=counterparty_user_id,json=counterpartyUserId,proto3" json:"counterparty_user_id,omitempty"` + RoomId string `protobuf:"bytes,10,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + TransferUsdMinor int64 `protobuf:"varint,12,opt,name=transfer_usd_minor,json=transferUsdMinor,proto3" json:"transfer_usd_minor,omitempty"` + TransferCurrencyCode string `protobuf:"bytes,13,opt,name=transfer_currency_code,json=transferCurrencyCode,proto3" json:"transfer_currency_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WalletTransaction) Reset() { *x = WalletTransaction{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[183] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16637,7 +16885,7 @@ func (x *WalletTransaction) String() string { func (*WalletTransaction) ProtoMessage() {} func (x *WalletTransaction) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[183] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16650,7 +16898,7 @@ func (x *WalletTransaction) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletTransaction.ProtoReflect.Descriptor instead. func (*WalletTransaction) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{183} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{187} } func (x *WalletTransaction) GetEntryId() int64 { @@ -16745,21 +16993,20 @@ func (x *WalletTransaction) GetTransferCurrencyCode() string { } type ListWalletTransactionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWalletTransactionsRequest) Reset() { *x = ListWalletTransactionsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[184] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16771,7 +17018,7 @@ func (x *ListWalletTransactionsRequest) String() string { func (*ListWalletTransactionsRequest) ProtoMessage() {} func (x *ListWalletTransactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[184] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16784,7 +17031,7 @@ func (x *ListWalletTransactionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWalletTransactionsRequest.ProtoReflect.Descriptor instead. func (*ListWalletTransactionsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{184} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{188} } func (x *ListWalletTransactionsRequest) GetRequestId() string { @@ -16830,17 +17077,16 @@ func (x *ListWalletTransactionsRequest) GetPageSize() int32 { } type ListWalletTransactionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Transactions []*WalletTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Transactions []*WalletTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListWalletTransactionsResponse) Reset() { *x = ListWalletTransactionsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[185] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16852,7 +17098,7 @@ func (x *ListWalletTransactionsResponse) String() string { func (*ListWalletTransactionsResponse) ProtoMessage() {} func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[185] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16865,7 +17111,7 @@ func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWalletTransactionsResponse.ProtoReflect.Descriptor instead. func (*ListWalletTransactionsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{185} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{189} } func (x *ListWalletTransactionsResponse) GetTransactions() []*WalletTransaction { @@ -16883,24 +17129,23 @@ func (x *ListWalletTransactionsResponse) GetTotal() int64 { } type VipRewardItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` + ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,6,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + AssetUrl string `protobuf:"bytes,7,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` + PreviewUrl string `protobuf:"bytes,8,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` + AnimationUrl string `protobuf:"bytes,9,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` unknownFields protoimpl.UnknownFields - - ResourceId int64 `protobuf:"varint,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceCode string `protobuf:"bytes,2,opt,name=resource_code,json=resourceCode,proto3" json:"resource_code,omitempty"` - ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Quantity int64 `protobuf:"varint,5,opt,name=quantity,proto3" json:"quantity,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,6,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - AssetUrl string `protobuf:"bytes,7,opt,name=asset_url,json=assetUrl,proto3" json:"asset_url,omitempty"` - PreviewUrl string `protobuf:"bytes,8,opt,name=preview_url,json=previewUrl,proto3" json:"preview_url,omitempty"` - AnimationUrl string `protobuf:"bytes,9,opt,name=animation_url,json=animationUrl,proto3" json:"animation_url,omitempty"` + sizeCache protoimpl.SizeCache } func (x *VipRewardItem) Reset() { *x = VipRewardItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[186] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16912,7 +17157,7 @@ func (x *VipRewardItem) String() string { func (*VipRewardItem) ProtoMessage() {} func (x *VipRewardItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[186] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16925,7 +17170,7 @@ func (x *VipRewardItem) ProtoReflect() protoreflect.Message { // Deprecated: Use VipRewardItem.ProtoReflect.Descriptor instead. func (*VipRewardItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{186} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{190} } func (x *VipRewardItem) GetResourceId() int64 { @@ -16994,11 +17239,8 @@ func (x *VipRewardItem) GetAnimationUrl() string { // VipProgramConfig 是按 App 隔离的 VIP 规则开关。业务服务只能依据这些显式策略执行, // 禁止通过 app_code 分支推断升级有效期、权益继承或后台发放语义。 type VipProgramConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // program_type: legacy_timed/tiered_privilege_v1。 ProgramType string `protobuf:"bytes,2,opt,name=program_type,json=programType,proto3" json:"program_type,omitempty"` LevelCount int32 `protobuf:"varint,3,opt,name=level_count,json=levelCount,proto3" json:"level_count,omitempty"` @@ -17018,11 +17260,13 @@ type VipProgramConfig struct { UpdatedByAdminId int64 `protobuf:"varint,12,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipProgramConfig) Reset() { *x = VipProgramConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[187] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17034,7 +17278,7 @@ func (x *VipProgramConfig) String() string { func (*VipProgramConfig) ProtoMessage() {} func (x *VipProgramConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[187] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17047,7 +17291,7 @@ func (x *VipProgramConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use VipProgramConfig.ProtoReflect.Descriptor instead. func (*VipProgramConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{187} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{191} } func (x *VipProgramConfig) GetAppCode() string { @@ -17151,12 +17395,9 @@ func (x *VipProgramConfig) GetUpdatedAtMs() int64 { // VipBenefit 是服务端可执行的权益事实。resource_id 为 0 表示纯功能特权,非 0 时 // 指向钱包资源;trial_enabled=false 的权益不会进入体验卡产生的 effective_benefits。 type VipBenefit struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BenefitCode string `protobuf:"bytes,1,opt,name=benefit_code,json=benefitCode,proto3" json:"benefit_code,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + BenefitCode string `protobuf:"bytes,1,opt,name=benefit_code,json=benefitCode,proto3" json:"benefit_code,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // benefit_type: decoration/function。 BenefitType string `protobuf:"bytes,3,opt,name=benefit_type,json=benefitType,proto3" json:"benefit_type,omitempty"` // unlock_level 只作为 P1 默认矩阵的来源信息;后台仍按每个等级提交完整权益集合, @@ -17173,11 +17414,13 @@ type VipBenefit struct { MetadataJson string `protobuf:"bytes,12,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"` CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipBenefit) Reset() { *x = VipBenefit{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[188] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17189,7 +17432,7 @@ func (x *VipBenefit) String() string { func (*VipBenefit) ProtoMessage() {} func (x *VipBenefit) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[188] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17202,7 +17445,7 @@ func (x *VipBenefit) ProtoReflect() protoreflect.Message { // Deprecated: Use VipBenefit.ProtoReflect.Descriptor instead. func (*VipBenefit) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{188} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{192} } func (x *VipBenefit) GetBenefitCode() string { @@ -17304,33 +17547,32 @@ func (x *VipBenefit) GetUpdatedAtMs() int64 { } type VipLevel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PriceCoin int64 `protobuf:"varint,4,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` - DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - RewardItems []*VipRewardItem `protobuf:"bytes,7,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` - CanPurchase bool `protobuf:"varint,8,opt,name=can_purchase,json=canPurchase,proto3" json:"can_purchase,omitempty"` - SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - RechargeGateRequired bool `protobuf:"varint,10,opt,name=recharge_gate_required,json=rechargeGateRequired,proto3" json:"recharge_gate_required,omitempty"` - RequiredRechargeCoinAmount int64 `protobuf:"varint,11,opt,name=required_recharge_coin_amount,json=requiredRechargeCoinAmount,proto3" json:"required_recharge_coin_amount,omitempty"` - UserRechargeCoinAmount int64 `protobuf:"varint,12,opt,name=user_recharge_coin_amount,json=userRechargeCoinAmount,proto3" json:"user_recharge_coin_amount,omitempty"` - PurchaseLockedReason string `protobuf:"bytes,13,opt,name=purchase_locked_reason,json=purchaseLockedReason,proto3" json:"purchase_locked_reason,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PriceCoin int64 `protobuf:"varint,4,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` + DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + RewardItems []*VipRewardItem `protobuf:"bytes,7,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + CanPurchase bool `protobuf:"varint,8,opt,name=can_purchase,json=canPurchase,proto3" json:"can_purchase,omitempty"` + SortOrder int32 `protobuf:"varint,9,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + RechargeGateRequired bool `protobuf:"varint,10,opt,name=recharge_gate_required,json=rechargeGateRequired,proto3" json:"recharge_gate_required,omitempty"` + RequiredRechargeCoinAmount int64 `protobuf:"varint,11,opt,name=required_recharge_coin_amount,json=requiredRechargeCoinAmount,proto3" json:"required_recharge_coin_amount,omitempty"` + UserRechargeCoinAmount int64 `protobuf:"varint,12,opt,name=user_recharge_coin_amount,json=userRechargeCoinAmount,proto3" json:"user_recharge_coin_amount,omitempty"` + PurchaseLockedReason string `protobuf:"bytes,13,opt,name=purchase_locked_reason,json=purchaseLockedReason,proto3" json:"purchase_locked_reason,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` // benefits 是后台为该等级显式保存的最终权益集合,运行时不按 unlock_level 自动继承。 Benefits []*VipBenefit `protobuf:"bytes,16,rep,name=benefits,proto3" json:"benefits,omitempty"` ConfigVersion int64 `protobuf:"varint,17,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipLevel) Reset() { *x = VipLevel{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[189] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17342,7 +17584,7 @@ func (x *VipLevel) String() string { func (*VipLevel) ProtoMessage() {} func (x *VipLevel) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[189] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17355,7 +17597,7 @@ func (x *VipLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use VipLevel.ProtoReflect.Descriptor instead. func (*VipLevel) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{189} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{193} } func (x *VipLevel) GetLevel() int32 { @@ -17478,24 +17720,23 @@ func (x *VipLevel) GetConfigVersion() int64 { } type UserVip struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Active bool `protobuf:"varint,4,opt,name=active,proto3" json:"active,omitempty"` + StartedAtMs int64 `protobuf:"varint,5,opt,name=started_at_ms,json=startedAtMs,proto3" json:"started_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,6,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ProgramType string `protobuf:"bytes,8,opt,name=program_type,json=programType,proto3" json:"program_type,omitempty"` + ConfigVersion int64 `protobuf:"varint,9,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` unknownFields protoimpl.UnknownFields - - UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Active bool `protobuf:"varint,4,opt,name=active,proto3" json:"active,omitempty"` - StartedAtMs int64 `protobuf:"varint,5,opt,name=started_at_ms,json=startedAtMs,proto3" json:"started_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,6,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,7,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ProgramType string `protobuf:"bytes,8,opt,name=program_type,json=programType,proto3" json:"program_type,omitempty"` - ConfigVersion int64 `protobuf:"varint,9,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UserVip) Reset() { *x = UserVip{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[190] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17507,7 +17748,7 @@ func (x *UserVip) String() string { func (*UserVip) ProtoMessage() {} func (x *UserVip) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[190] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17520,7 +17761,7 @@ func (x *UserVip) ProtoReflect() protoreflect.Message { // Deprecated: Use UserVip.ProtoReflect.Descriptor instead. func (*UserVip) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{190} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{194} } func (x *UserVip) GetUserId() int64 { @@ -17589,31 +17830,30 @@ func (x *UserVip) GetConfigVersion() int64 { // VipTrialCard 是体验卡背包权益的 VIP 投影。entitlement_id 复用通用背包佩戴事实, // 切换卡片只改变装备记录,不修改任何卡片自身的 expires_at_ms。 type VipTrialCard struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TrialCardId string `protobuf:"bytes,1,opt,name=trial_card_id,json=trialCardId,proto3" json:"trial_card_id,omitempty"` - EntitlementId string `protobuf:"bytes,2,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Equipped bool `protobuf:"varint,8,opt,name=equipped,proto3" json:"equipped,omitempty"` - DurationMs int64 `protobuf:"varint,9,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - EffectiveAtMs int64 `protobuf:"varint,10,opt,name=effective_at_ms,json=effectiveAtMs,proto3" json:"effective_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,11,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - RemainingDurationMs int64 `protobuf:"varint,12,opt,name=remaining_duration_ms,json=remainingDurationMs,proto3" json:"remaining_duration_ms,omitempty"` - GrantSource string `protobuf:"bytes,13,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` - SourceGrantId string `protobuf:"bytes,14,opt,name=source_grant_id,json=sourceGrantId,proto3" json:"source_grant_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TrialCardId string `protobuf:"bytes,1,opt,name=trial_card_id,json=trialCardId,proto3" json:"trial_card_id,omitempty"` + EntitlementId string `protobuf:"bytes,2,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Equipped bool `protobuf:"varint,8,opt,name=equipped,proto3" json:"equipped,omitempty"` + DurationMs int64 `protobuf:"varint,9,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + EffectiveAtMs int64 `protobuf:"varint,10,opt,name=effective_at_ms,json=effectiveAtMs,proto3" json:"effective_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,11,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + RemainingDurationMs int64 `protobuf:"varint,12,opt,name=remaining_duration_ms,json=remainingDurationMs,proto3" json:"remaining_duration_ms,omitempty"` + GrantSource string `protobuf:"bytes,13,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + SourceGrantId string `protobuf:"bytes,14,opt,name=source_grant_id,json=sourceGrantId,proto3" json:"source_grant_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipTrialCard) Reset() { *x = VipTrialCard{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[191] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17625,7 +17865,7 @@ func (x *VipTrialCard) String() string { func (*VipTrialCard) ProtoMessage() {} func (x *VipTrialCard) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[191] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17638,7 +17878,7 @@ func (x *VipTrialCard) ProtoReflect() protoreflect.Message { // Deprecated: Use VipTrialCard.ProtoReflect.Descriptor instead. func (*VipTrialCard) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{191} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{195} } func (x *VipTrialCard) GetTrialCardId() string { @@ -17756,20 +17996,19 @@ func (x *VipTrialCard) GetUpdatedAtMs() int64 { // VipUserSettings 是用户按 App 隔离的可关闭 VIP 功能偏好。没有持久记录时 wallet // 仍返回两个默认开启值,updated_at_ms=0;设置本身不授予任何 VIP 权益。 type VipUserSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomEntryNoticeEnabled bool `protobuf:"varint,3,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3" json:"room_entry_notice_enabled,omitempty"` - OnlineGlobalNoticeEnabled bool `protobuf:"varint,4,opt,name=online_global_notice_enabled,json=onlineGlobalNoticeEnabled,proto3" json:"online_global_notice_enabled,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,5,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomEntryNoticeEnabled bool `protobuf:"varint,3,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3" json:"room_entry_notice_enabled,omitempty"` + OnlineGlobalNoticeEnabled bool `protobuf:"varint,4,opt,name=online_global_notice_enabled,json=onlineGlobalNoticeEnabled,proto3" json:"online_global_notice_enabled,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,5,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipUserSettings) Reset() { *x = VipUserSettings{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[192] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17781,7 +18020,7 @@ func (x *VipUserSettings) String() string { func (*VipUserSettings) ProtoMessage() {} func (x *VipUserSettings) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[192] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17794,7 +18033,7 @@ func (x *VipUserSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use VipUserSettings.ProtoReflect.Descriptor instead. func (*VipUserSettings) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{192} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{196} } func (x *VipUserSettings) GetAppCode() string { @@ -17836,24 +18075,23 @@ func (x *VipUserSettings) GetUpdatedAtMs() int64 { // effective_benefits 是钱包按 paid/trial 来源、该等级显式矩阵和 trial_enabled 过滤后的资格事实; // 对可关闭通知,执行方还必须结合 user_settings 或调用 CheckVipBenefit。 type VipState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PaidVip *UserVip `protobuf:"bytes,1,opt,name=paid_vip,json=paidVip,proto3" json:"paid_vip,omitempty"` - EquippedTrialCard *VipTrialCard `protobuf:"bytes,2,opt,name=equipped_trial_card,json=equippedTrialCard,proto3" json:"equipped_trial_card,omitempty"` - EffectiveVip *UserVip `protobuf:"bytes,3,opt,name=effective_vip,json=effectiveVip,proto3" json:"effective_vip,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PaidVip *UserVip `protobuf:"bytes,1,opt,name=paid_vip,json=paidVip,proto3" json:"paid_vip,omitempty"` + EquippedTrialCard *VipTrialCard `protobuf:"bytes,2,opt,name=equipped_trial_card,json=equippedTrialCard,proto3" json:"equipped_trial_card,omitempty"` + EffectiveVip *UserVip `protobuf:"bytes,3,opt,name=effective_vip,json=effectiveVip,proto3" json:"effective_vip,omitempty"` // effective_source: paid/trial/none。 EffectiveSource string `protobuf:"bytes,4,opt,name=effective_source,json=effectiveSource,proto3" json:"effective_source,omitempty"` EffectiveBenefits []*VipBenefit `protobuf:"bytes,5,rep,name=effective_benefits,json=effectiveBenefits,proto3" json:"effective_benefits,omitempty"` EvaluatedAtMs int64 `protobuf:"varint,6,opt,name=evaluated_at_ms,json=evaluatedAtMs,proto3" json:"evaluated_at_ms,omitempty"` ProgramConfig *VipProgramConfig `protobuf:"bytes,7,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` UserSettings *VipUserSettings `protobuf:"bytes,8,opt,name=user_settings,json=userSettings,proto3" json:"user_settings,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipState) Reset() { *x = VipState{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[193] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17865,7 +18103,7 @@ func (x *VipState) String() string { func (*VipState) ProtoMessage() {} func (x *VipState) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[193] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17878,7 +18116,7 @@ func (x *VipState) ProtoReflect() protoreflect.Message { // Deprecated: Use VipState.ProtoReflect.Descriptor instead. func (*VipState) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{193} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{197} } func (x *VipState) GetPaidVip() *UserVip { @@ -17938,18 +18176,17 @@ func (x *VipState) GetUserSettings() *VipUserSettings { } type ListVipPackagesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListVipPackagesRequest) Reset() { *x = ListVipPackagesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[194] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17961,7 +18198,7 @@ func (x *ListVipPackagesRequest) String() string { func (*ListVipPackagesRequest) ProtoMessage() {} func (x *ListVipPackagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[194] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17974,7 +18211,7 @@ func (x *ListVipPackagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVipPackagesRequest.ProtoReflect.Descriptor instead. func (*ListVipPackagesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{194} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{198} } func (x *ListVipPackagesRequest) GetRequestId() string { @@ -17999,19 +18236,18 @@ func (x *ListVipPackagesRequest) GetUserId() int64 { } type ListVipPackagesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CurrentVip *UserVip `protobuf:"bytes,1,opt,name=current_vip,json=currentVip,proto3" json:"current_vip,omitempty"` + Packages []*VipLevel `protobuf:"bytes,2,rep,name=packages,proto3" json:"packages,omitempty"` + State *VipState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + ProgramConfig *VipProgramConfig `protobuf:"bytes,4,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` unknownFields protoimpl.UnknownFields - - CurrentVip *UserVip `protobuf:"bytes,1,opt,name=current_vip,json=currentVip,proto3" json:"current_vip,omitempty"` - Packages []*VipLevel `protobuf:"bytes,2,rep,name=packages,proto3" json:"packages,omitempty"` - State *VipState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - ProgramConfig *VipProgramConfig `protobuf:"bytes,4,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListVipPackagesResponse) Reset() { *x = ListVipPackagesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[195] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18023,7 +18259,7 @@ func (x *ListVipPackagesResponse) String() string { func (*ListVipPackagesResponse) ProtoMessage() {} func (x *ListVipPackagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[195] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18036,7 +18272,7 @@ func (x *ListVipPackagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVipPackagesResponse.ProtoReflect.Descriptor instead. func (*ListVipPackagesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{195} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{199} } func (x *ListVipPackagesResponse) GetCurrentVip() *UserVip { @@ -18068,18 +18304,17 @@ func (x *ListVipPackagesResponse) GetProgramConfig() *VipProgramConfig { } type GetMyVipRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyVipRequest) Reset() { *x = GetMyVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[196] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18091,7 +18326,7 @@ func (x *GetMyVipRequest) String() string { func (*GetMyVipRequest) ProtoMessage() {} func (x *GetMyVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[196] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18104,7 +18339,7 @@ func (x *GetMyVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyVipRequest.ProtoReflect.Descriptor instead. func (*GetMyVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{196} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{200} } func (x *GetMyVipRequest) GetRequestId() string { @@ -18129,17 +18364,16 @@ func (x *GetMyVipRequest) GetUserId() int64 { } type GetMyVipResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Vip *UserVip `protobuf:"bytes,1,opt,name=vip,proto3" json:"vip,omitempty"` + State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` unknownFields protoimpl.UnknownFields - - Vip *UserVip `protobuf:"bytes,1,opt,name=vip,proto3" json:"vip,omitempty"` - State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyVipResponse) Reset() { *x = GetMyVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[197] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18151,7 +18385,7 @@ func (x *GetMyVipResponse) String() string { func (*GetMyVipResponse) ProtoMessage() {} func (x *GetMyVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[197] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18164,7 +18398,7 @@ func (x *GetMyVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyVipResponse.ProtoReflect.Descriptor instead. func (*GetMyVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{197} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{201} } func (x *GetMyVipResponse) GetVip() *UserVip { @@ -18182,19 +18416,18 @@ func (x *GetMyVipResponse) GetState() *VipState { } type PurchaseVipRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PurchaseVipRequest) Reset() { *x = PurchaseVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[198] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[202] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18206,7 +18439,7 @@ func (x *PurchaseVipRequest) String() string { func (*PurchaseVipRequest) ProtoMessage() {} func (x *PurchaseVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[198] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[202] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18219,7 +18452,7 @@ func (x *PurchaseVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseVipRequest.ProtoReflect.Descriptor instead. func (*PurchaseVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{198} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{202} } func (x *PurchaseVipRequest) GetCommandId() string { @@ -18251,22 +18484,21 @@ func (x *PurchaseVipRequest) GetLevel() int32 { } type PurchaseVipResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Vip *UserVip `protobuf:"bytes,3,opt,name=vip,proto3" json:"vip,omitempty"` - CoinSpent int64 `protobuf:"varint,4,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,5,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - RewardItems []*VipRewardItem `protobuf:"bytes,6,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` - State *VipState `protobuf:"bytes,7,opt,name=state,proto3" json:"state,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Vip *UserVip `protobuf:"bytes,3,opt,name=vip,proto3" json:"vip,omitempty"` + CoinSpent int64 `protobuf:"varint,4,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,5,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + RewardItems []*VipRewardItem `protobuf:"bytes,6,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + State *VipState `protobuf:"bytes,7,opt,name=state,proto3" json:"state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PurchaseVipResponse) Reset() { *x = PurchaseVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[199] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[203] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18278,7 +18510,7 @@ func (x *PurchaseVipResponse) String() string { func (*PurchaseVipResponse) ProtoMessage() {} func (x *PurchaseVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[199] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[203] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18291,7 +18523,7 @@ func (x *PurchaseVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseVipResponse.ProtoReflect.Descriptor instead. func (*PurchaseVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{199} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{203} } func (x *PurchaseVipResponse) GetOrderId() string { @@ -18344,21 +18576,20 @@ func (x *PurchaseVipResponse) GetState() *VipState { } type DebitCPBreakupFeeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RelationshipId string `protobuf:"bytes,4,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` - RelationType string `protobuf:"bytes,5,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` - Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RelationshipId string `protobuf:"bytes,4,opt,name=relationship_id,json=relationshipId,proto3" json:"relationship_id,omitempty"` + RelationType string `protobuf:"bytes,5,opt,name=relation_type,json=relationType,proto3" json:"relation_type,omitempty"` + Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitCPBreakupFeeRequest) Reset() { *x = DebitCPBreakupFeeRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[200] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[204] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18370,7 +18601,7 @@ func (x *DebitCPBreakupFeeRequest) String() string { func (*DebitCPBreakupFeeRequest) ProtoMessage() {} func (x *DebitCPBreakupFeeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[200] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[204] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18383,7 +18614,7 @@ func (x *DebitCPBreakupFeeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebitCPBreakupFeeRequest.ProtoReflect.Descriptor instead. func (*DebitCPBreakupFeeRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{200} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{204} } func (x *DebitCPBreakupFeeRequest) GetCommandId() string { @@ -18429,19 +18660,18 @@ func (x *DebitCPBreakupFeeRequest) GetAmount() int64 { } type DebitCPBreakupFeeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CoinSpent int64 `protobuf:"varint,2,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - Balance *AssetBalance `protobuf:"bytes,4,opt,name=balance,proto3" json:"balance,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CoinSpent int64 `protobuf:"varint,2,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + Balance *AssetBalance `protobuf:"bytes,4,opt,name=balance,proto3" json:"balance,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitCPBreakupFeeResponse) Reset() { *x = DebitCPBreakupFeeResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[201] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[205] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18453,7 +18683,7 @@ func (x *DebitCPBreakupFeeResponse) String() string { func (*DebitCPBreakupFeeResponse) ProtoMessage() {} func (x *DebitCPBreakupFeeResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[201] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[205] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18466,7 +18696,7 @@ func (x *DebitCPBreakupFeeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebitCPBreakupFeeResponse.ProtoReflect.Descriptor instead. func (*DebitCPBreakupFeeResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{201} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{205} } func (x *DebitCPBreakupFeeResponse) GetTransactionId() string { @@ -18498,21 +18728,20 @@ func (x *DebitCPBreakupFeeResponse) GetBalance() *AssetBalance { } type DebitWheelDrawRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + WheelId string `protobuf:"bytes,4,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + DrawCount int32 `protobuf:"varint,5,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"` + Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - WheelId string `protobuf:"bytes,4,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - DrawCount int32 `protobuf:"varint,5,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"` - Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DebitWheelDrawRequest) Reset() { *x = DebitWheelDrawRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[202] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[206] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18524,7 +18753,7 @@ func (x *DebitWheelDrawRequest) String() string { func (*DebitWheelDrawRequest) ProtoMessage() {} func (x *DebitWheelDrawRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[202] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[206] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18537,7 +18766,7 @@ func (x *DebitWheelDrawRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebitWheelDrawRequest.ProtoReflect.Descriptor instead. func (*DebitWheelDrawRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{202} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{206} } func (x *DebitWheelDrawRequest) GetCommandId() string { @@ -18583,19 +18812,18 @@ func (x *DebitWheelDrawRequest) GetAmount() int64 { } type DebitWheelDrawResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CoinSpent int64 `protobuf:"varint,2,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` - Balance *AssetBalance `protobuf:"bytes,4,opt,name=balance,proto3" json:"balance,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CoinSpent int64 `protobuf:"varint,2,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + CoinBalanceAfter int64 `protobuf:"varint,3,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"` + Balance *AssetBalance `protobuf:"bytes,4,opt,name=balance,proto3" json:"balance,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DebitWheelDrawResponse) Reset() { *x = DebitWheelDrawResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[203] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[207] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18607,7 +18835,7 @@ func (x *DebitWheelDrawResponse) String() string { func (*DebitWheelDrawResponse) ProtoMessage() {} func (x *DebitWheelDrawResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[203] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[207] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18620,7 +18848,7 @@ func (x *DebitWheelDrawResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebitWheelDrawResponse.ProtoReflect.Descriptor instead. func (*DebitWheelDrawResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{203} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{207} } func (x *DebitWheelDrawResponse) GetTransactionId() string { @@ -18652,22 +18880,21 @@ func (x *DebitWheelDrawResponse) GetBalance() *AssetBalance { } type GrantVipRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` - GrantSource string `protobuf:"bytes,5,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` - OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` + GrantSource string `protobuf:"bytes,5,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + OperatorUserId int64 `protobuf:"varint,6,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GrantVipRequest) Reset() { *x = GrantVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[204] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18679,7 +18906,7 @@ func (x *GrantVipRequest) String() string { func (*GrantVipRequest) ProtoMessage() {} func (x *GrantVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[204] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[208] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18692,7 +18919,7 @@ func (x *GrantVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipRequest.ProtoReflect.Descriptor instead. func (*GrantVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{204} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{208} } func (x *GrantVipRequest) GetCommandId() string { @@ -18745,20 +18972,19 @@ func (x *GrantVipRequest) GetReason() string { } type GrantVipResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Vip *UserVip `protobuf:"bytes,2,opt,name=vip,proto3" json:"vip,omitempty"` + RewardItems []*VipRewardItem `protobuf:"bytes,3,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + State *VipState `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Vip *UserVip `protobuf:"bytes,2,opt,name=vip,proto3" json:"vip,omitempty"` - RewardItems []*VipRewardItem `protobuf:"bytes,3,rep,name=reward_items,json=rewardItems,proto3" json:"reward_items,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - State *VipState `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GrantVipResponse) Reset() { *x = GrantVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[205] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18770,7 +18996,7 @@ func (x *GrantVipResponse) String() string { func (*GrantVipResponse) ProtoMessage() {} func (x *GrantVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[205] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[209] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18783,7 +19009,7 @@ func (x *GrantVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipResponse.ProtoReflect.Descriptor instead. func (*GrantVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{205} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{209} } func (x *GrantVipResponse) GetTransactionId() string { @@ -18822,17 +19048,16 @@ func (x *GrantVipResponse) GetState() *VipState { } type GetVipProgramConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetVipProgramConfigRequest) Reset() { *x = GetVipProgramConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[206] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18844,7 +19069,7 @@ func (x *GetVipProgramConfigRequest) String() string { func (*GetVipProgramConfigRequest) ProtoMessage() {} func (x *GetVipProgramConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[206] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[210] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18857,7 +19082,7 @@ func (x *GetVipProgramConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVipProgramConfigRequest.ProtoReflect.Descriptor instead. func (*GetVipProgramConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{206} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{210} } func (x *GetVipProgramConfigRequest) GetRequestId() string { @@ -18875,18 +19100,17 @@ func (x *GetVipProgramConfigRequest) GetAppCode() string { } type GetVipProgramConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *VipProgramConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + Benefits []*VipBenefit `protobuf:"bytes,2,rep,name=benefits,proto3" json:"benefits,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *VipProgramConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - Benefits []*VipBenefit `protobuf:"bytes,2,rep,name=benefits,proto3" json:"benefits,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetVipProgramConfigResponse) Reset() { *x = GetVipProgramConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[207] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18898,7 +19122,7 @@ func (x *GetVipProgramConfigResponse) String() string { func (*GetVipProgramConfigResponse) ProtoMessage() {} func (x *GetVipProgramConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[207] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[211] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18911,7 +19135,7 @@ func (x *GetVipProgramConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVipProgramConfigResponse.ProtoReflect.Descriptor instead. func (*GetVipProgramConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{207} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{211} } func (x *GetVipProgramConfigResponse) GetConfig() *VipProgramConfig { @@ -18938,19 +19162,18 @@ func (x *GetVipProgramConfigResponse) GetServerTimeMs() int64 { // UpdateAdminVipProgramConfigRequest 以完整配置替换单 App 当前规则;config_version 由服务端递增, // 客户端提交的审计时间和操作者字段不会被信任。 type UpdateAdminVipProgramConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Config *VipProgramConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Config *VipProgramConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateAdminVipProgramConfigRequest) Reset() { *x = UpdateAdminVipProgramConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[208] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[212] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18962,7 +19185,7 @@ func (x *UpdateAdminVipProgramConfigRequest) String() string { func (*UpdateAdminVipProgramConfigRequest) ProtoMessage() {} func (x *UpdateAdminVipProgramConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[208] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[212] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18975,7 +19198,7 @@ func (x *UpdateAdminVipProgramConfigRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateAdminVipProgramConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateAdminVipProgramConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{208} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{212} } func (x *UpdateAdminVipProgramConfigRequest) GetRequestId() string { @@ -19007,17 +19230,16 @@ func (x *UpdateAdminVipProgramConfigRequest) GetOperatorUserId() int64 { } type UpdateAdminVipProgramConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *VipProgramConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *VipProgramConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateAdminVipProgramConfigResponse) Reset() { *x = UpdateAdminVipProgramConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[209] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19029,7 +19251,7 @@ func (x *UpdateAdminVipProgramConfigResponse) String() string { func (*UpdateAdminVipProgramConfigResponse) ProtoMessage() {} func (x *UpdateAdminVipProgramConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[209] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[213] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19042,7 +19264,7 @@ func (x *UpdateAdminVipProgramConfigResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use UpdateAdminVipProgramConfigResponse.ProtoReflect.Descriptor instead. func (*UpdateAdminVipProgramConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{209} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{213} } func (x *UpdateAdminVipProgramConfigResponse) GetConfig() *VipProgramConfig { @@ -19061,20 +19283,19 @@ func (x *UpdateAdminVipProgramConfigResponse) GetServerTimeMs() int64 { // UpdateMyVipSettingsRequest 使用 optional 保留 PATCH 语义;显式 false 不能被当成未提交。 type UpdateMyVipSettingsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RoomEntryNoticeEnabled *bool `protobuf:"varint,4,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3,oneof" json:"room_entry_notice_enabled,omitempty"` - OnlineGlobalNoticeEnabled *bool `protobuf:"varint,5,opt,name=online_global_notice_enabled,json=onlineGlobalNoticeEnabled,proto3,oneof" json:"online_global_notice_enabled,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RoomEntryNoticeEnabled *bool `protobuf:"varint,4,opt,name=room_entry_notice_enabled,json=roomEntryNoticeEnabled,proto3,oneof" json:"room_entry_notice_enabled,omitempty"` + OnlineGlobalNoticeEnabled *bool `protobuf:"varint,5,opt,name=online_global_notice_enabled,json=onlineGlobalNoticeEnabled,proto3,oneof" json:"online_global_notice_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateMyVipSettingsRequest) Reset() { *x = UpdateMyVipSettingsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[210] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19086,7 +19307,7 @@ func (x *UpdateMyVipSettingsRequest) String() string { func (*UpdateMyVipSettingsRequest) ProtoMessage() {} func (x *UpdateMyVipSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[210] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[214] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19099,7 +19320,7 @@ func (x *UpdateMyVipSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateMyVipSettingsRequest.ProtoReflect.Descriptor instead. func (*UpdateMyVipSettingsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{210} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{214} } func (x *UpdateMyVipSettingsRequest) GetRequestId() string { @@ -19138,17 +19359,16 @@ func (x *UpdateMyVipSettingsRequest) GetOnlineGlobalNoticeEnabled() bool { } type UpdateMyVipSettingsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Settings *VipUserSettings `protobuf:"bytes,1,opt,name=settings,proto3" json:"settings,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Settings *VipUserSettings `protobuf:"bytes,1,opt,name=settings,proto3" json:"settings,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateMyVipSettingsResponse) Reset() { *x = UpdateMyVipSettingsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[211] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19160,7 +19380,7 @@ func (x *UpdateMyVipSettingsResponse) String() string { func (*UpdateMyVipSettingsResponse) ProtoMessage() {} func (x *UpdateMyVipSettingsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[211] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[215] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19173,7 +19393,7 @@ func (x *UpdateMyVipSettingsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateMyVipSettingsResponse.ProtoReflect.Descriptor instead. func (*UpdateMyVipSettingsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{211} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{215} } func (x *UpdateMyVipSettingsResponse) GetSettings() *VipUserSettings { @@ -19193,28 +19413,27 @@ func (x *UpdateMyVipSettingsResponse) GetServerTimeMs() int64 { // VipDailyCoinRebateRun 固化某个 UTC 自然日的返现金额矩阵。批任务开始后即使后台 // 修改等级权益,后续分页也只能复用本 run 的 config_version/level_amounts_json。 type VipDailyCoinRebateRun struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskDay string `protobuf:"bytes,2,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - DayStartMs int64 `protobuf:"varint,3,opt,name=day_start_ms,json=dayStartMs,proto3" json:"day_start_ms,omitempty"` - DayEndMs int64 `protobuf:"varint,4,opt,name=day_end_ms,json=dayEndMs,proto3" json:"day_end_ms,omitempty"` - ConfigVersion int64 `protobuf:"varint,5,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` - LevelAmountsJson string `protobuf:"bytes,6,opt,name=level_amounts_json,json=levelAmountsJson,proto3" json:"level_amounts_json,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - LastUserId int64 `protobuf:"varint,8,opt,name=last_user_id,json=lastUserId,proto3" json:"last_user_id,omitempty"` - ScannedCount int64 `protobuf:"varint,9,opt,name=scanned_count,json=scannedCount,proto3" json:"scanned_count,omitempty"` - CreatedCount int64 `protobuf:"varint,10,opt,name=created_count,json=createdCount,proto3" json:"created_count,omitempty"` - CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - CompletedAtMs int64 `protobuf:"varint,13,opt,name=completed_at_ms,json=completedAtMs,proto3" json:"completed_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskDay string `protobuf:"bytes,2,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + DayStartMs int64 `protobuf:"varint,3,opt,name=day_start_ms,json=dayStartMs,proto3" json:"day_start_ms,omitempty"` + DayEndMs int64 `protobuf:"varint,4,opt,name=day_end_ms,json=dayEndMs,proto3" json:"day_end_ms,omitempty"` + ConfigVersion int64 `protobuf:"varint,5,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + LevelAmountsJson string `protobuf:"bytes,6,opt,name=level_amounts_json,json=levelAmountsJson,proto3" json:"level_amounts_json,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + LastUserId int64 `protobuf:"varint,8,opt,name=last_user_id,json=lastUserId,proto3" json:"last_user_id,omitempty"` + ScannedCount int64 `protobuf:"varint,9,opt,name=scanned_count,json=scannedCount,proto3" json:"scanned_count,omitempty"` + CreatedCount int64 `protobuf:"varint,10,opt,name=created_count,json=createdCount,proto3" json:"created_count,omitempty"` + CreatedAtMs int64 `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,12,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + CompletedAtMs int64 `protobuf:"varint,13,opt,name=completed_at_ms,json=completedAtMs,proto3" json:"completed_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipDailyCoinRebateRun) Reset() { *x = VipDailyCoinRebateRun{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[212] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19226,7 +19445,7 @@ func (x *VipDailyCoinRebateRun) String() string { func (*VipDailyCoinRebateRun) ProtoMessage() {} func (x *VipDailyCoinRebateRun) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[212] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[216] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19239,7 +19458,7 @@ func (x *VipDailyCoinRebateRun) ProtoReflect() protoreflect.Message { // Deprecated: Use VipDailyCoinRebateRun.ProtoReflect.Descriptor instead. func (*VipDailyCoinRebateRun) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{212} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{216} } func (x *VipDailyCoinRebateRun) GetRunId() string { @@ -19336,29 +19555,28 @@ func (x *VipDailyCoinRebateRun) GetCompletedAtMs() int64 { // VipDailyCoinRebate 是付费 VIP 在 UTC 日切时生成的可领取金币事实。体验卡不会生成; // status 返回 claimable/claimed/expired,expired 可由查询时钟投影而不改写历史行。 type VipDailyCoinRebate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RebateId string `protobuf:"bytes,1,opt,name=rebate_id,json=rebateId,proto3" json:"rebate_id,omitempty"` - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - TaskDay string `protobuf:"bytes,3,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - VipLevel int32 `protobuf:"varint,4,opt,name=vip_level,json=vipLevel,proto3" json:"vip_level,omitempty"` - VipName string `protobuf:"bytes,5,opt,name=vip_name,json=vipName,proto3" json:"vip_name,omitempty"` - CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - AvailableAtMs int64 `protobuf:"varint,8,opt,name=available_at_ms,json=availableAtMs,proto3" json:"available_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - ConfigVersion int64 `protobuf:"varint,10,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` - ClaimedAtMs int64 `protobuf:"varint,11,opt,name=claimed_at_ms,json=claimedAtMs,proto3" json:"claimed_at_ms,omitempty"` - WalletTransactionId string `protobuf:"bytes,12,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RebateId string `protobuf:"bytes,1,opt,name=rebate_id,json=rebateId,proto3" json:"rebate_id,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + TaskDay string `protobuf:"bytes,3,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + VipLevel int32 `protobuf:"varint,4,opt,name=vip_level,json=vipLevel,proto3" json:"vip_level,omitempty"` + VipName string `protobuf:"bytes,5,opt,name=vip_name,json=vipName,proto3" json:"vip_name,omitempty"` + CoinAmount int64 `protobuf:"varint,6,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + AvailableAtMs int64 `protobuf:"varint,8,opt,name=available_at_ms,json=availableAtMs,proto3" json:"available_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,9,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + ConfigVersion int64 `protobuf:"varint,10,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` + ClaimedAtMs int64 `protobuf:"varint,11,opt,name=claimed_at_ms,json=claimedAtMs,proto3" json:"claimed_at_ms,omitempty"` + WalletTransactionId string `protobuf:"bytes,12,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VipDailyCoinRebate) Reset() { *x = VipDailyCoinRebate{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[213] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19370,7 +19588,7 @@ func (x *VipDailyCoinRebate) String() string { func (*VipDailyCoinRebate) ProtoMessage() {} func (x *VipDailyCoinRebate) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[213] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[217] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19383,7 +19601,7 @@ func (x *VipDailyCoinRebate) ProtoReflect() protoreflect.Message { // Deprecated: Use VipDailyCoinRebate.ProtoReflect.Descriptor instead. func (*VipDailyCoinRebate) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{213} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{217} } func (x *VipDailyCoinRebate) GetRebateId() string { @@ -19487,19 +19705,18 @@ func (x *VipDailyCoinRebate) GetUpdatedAtMs() int64 { // ProcessVipDailyCoinRebateBatchRequest 由 WalletCronService 接收。task_day 为空时按 // wallet-service 当前 UTC 日期处理;同 App+task_day 始终创建或复用同一个 run。 type ProcessVipDailyCoinRebateBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TaskDay string `protobuf:"bytes,3,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` + BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TaskDay string `protobuf:"bytes,3,opt,name=task_day,json=taskDay,proto3" json:"task_day,omitempty"` - BatchSize int32 `protobuf:"varint,4,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ProcessVipDailyCoinRebateBatchRequest) Reset() { *x = ProcessVipDailyCoinRebateBatchRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[214] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[218] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19511,7 +19728,7 @@ func (x *ProcessVipDailyCoinRebateBatchRequest) String() string { func (*ProcessVipDailyCoinRebateBatchRequest) ProtoMessage() {} func (x *ProcessVipDailyCoinRebateBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[214] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[218] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19524,7 +19741,7 @@ func (x *ProcessVipDailyCoinRebateBatchRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use ProcessVipDailyCoinRebateBatchRequest.ProtoReflect.Descriptor instead. func (*ProcessVipDailyCoinRebateBatchRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{214} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{218} } func (x *ProcessVipDailyCoinRebateBatchRequest) GetRequestId() string { @@ -19556,20 +19773,19 @@ func (x *ProcessVipDailyCoinRebateBatchRequest) GetBatchSize() int32 { } type ProcessVipDailyCoinRebateBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Run *VipDailyCoinRebateRun `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` + ScannedCount int32 `protobuf:"varint,2,opt,name=scanned_count,json=scannedCount,proto3" json:"scanned_count,omitempty"` + CreatedCount int32 `protobuf:"varint,3,opt,name=created_count,json=createdCount,proto3" json:"created_count,omitempty"` + HasMore bool `protobuf:"varint,4,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Run *VipDailyCoinRebateRun `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` - ScannedCount int32 `protobuf:"varint,2,opt,name=scanned_count,json=scannedCount,proto3" json:"scanned_count,omitempty"` - CreatedCount int32 `protobuf:"varint,3,opt,name=created_count,json=createdCount,proto3" json:"created_count,omitempty"` - HasMore bool `protobuf:"varint,4,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` - ServerTimeMs int64 `protobuf:"varint,5,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ProcessVipDailyCoinRebateBatchResponse) Reset() { *x = ProcessVipDailyCoinRebateBatchResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[215] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19581,7 +19797,7 @@ func (x *ProcessVipDailyCoinRebateBatchResponse) String() string { func (*ProcessVipDailyCoinRebateBatchResponse) ProtoMessage() {} func (x *ProcessVipDailyCoinRebateBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[215] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[219] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19594,7 +19810,7 @@ func (x *ProcessVipDailyCoinRebateBatchResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use ProcessVipDailyCoinRebateBatchResponse.ProtoReflect.Descriptor instead. func (*ProcessVipDailyCoinRebateBatchResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{215} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{219} } func (x *ProcessVipDailyCoinRebateBatchResponse) GetRun() *VipDailyCoinRebateRun { @@ -19633,18 +19849,17 @@ func (x *ProcessVipDailyCoinRebateBatchResponse) GetServerTimeMs() int64 { } type GetMyCurrentVipDailyCoinRebateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyCurrentVipDailyCoinRebateRequest) Reset() { *x = GetMyCurrentVipDailyCoinRebateRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[216] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[220] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19656,7 +19871,7 @@ func (x *GetMyCurrentVipDailyCoinRebateRequest) String() string { func (*GetMyCurrentVipDailyCoinRebateRequest) ProtoMessage() {} func (x *GetMyCurrentVipDailyCoinRebateRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[216] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[220] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19669,7 +19884,7 @@ func (x *GetMyCurrentVipDailyCoinRebateRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use GetMyCurrentVipDailyCoinRebateRequest.ProtoReflect.Descriptor instead. func (*GetMyCurrentVipDailyCoinRebateRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{216} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{220} } func (x *GetMyCurrentVipDailyCoinRebateRequest) GetRequestId() string { @@ -19694,18 +19909,17 @@ func (x *GetMyCurrentVipDailyCoinRebateRequest) GetUserId() int64 { } type GetMyCurrentVipDailyCoinRebateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` + Rebate *VipDailyCoinRebate `protobuf:"bytes,2,opt,name=rebate,proto3" json:"rebate,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` - Rebate *VipDailyCoinRebate `protobuf:"bytes,2,opt,name=rebate,proto3" json:"rebate,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetMyCurrentVipDailyCoinRebateResponse) Reset() { *x = GetMyCurrentVipDailyCoinRebateResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[217] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19717,7 +19931,7 @@ func (x *GetMyCurrentVipDailyCoinRebateResponse) String() string { func (*GetMyCurrentVipDailyCoinRebateResponse) ProtoMessage() {} func (x *GetMyCurrentVipDailyCoinRebateResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[217] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[221] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19730,7 +19944,7 @@ func (x *GetMyCurrentVipDailyCoinRebateResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use GetMyCurrentVipDailyCoinRebateResponse.ProtoReflect.Descriptor instead. func (*GetMyCurrentVipDailyCoinRebateResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{217} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{221} } func (x *GetMyCurrentVipDailyCoinRebateResponse) GetFound() bool { @@ -19755,22 +19969,21 @@ func (x *GetMyCurrentVipDailyCoinRebateResponse) GetServerTimeMs() int64 { } type ListMyVipDailyCoinRebateStatusesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Page int32 `protobuf:"varint,4,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // rebate_ids 非空时精确恢复指定通知的领取状态,最多 100 个;仍强制按 user_id 隔离。 - RebateIds []string `protobuf:"bytes,6,rep,name=rebate_ids,json=rebateIds,proto3" json:"rebate_ids,omitempty"` + RebateIds []string `protobuf:"bytes,6,rep,name=rebate_ids,json=rebateIds,proto3" json:"rebate_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListMyVipDailyCoinRebateStatusesRequest) Reset() { *x = ListMyVipDailyCoinRebateStatusesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[218] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19782,7 +19995,7 @@ func (x *ListMyVipDailyCoinRebateStatusesRequest) String() string { func (*ListMyVipDailyCoinRebateStatusesRequest) ProtoMessage() {} func (x *ListMyVipDailyCoinRebateStatusesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[218] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[222] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19795,7 +20008,7 @@ func (x *ListMyVipDailyCoinRebateStatusesRequest) ProtoReflect() protoreflect.Me // Deprecated: Use ListMyVipDailyCoinRebateStatusesRequest.ProtoReflect.Descriptor instead. func (*ListMyVipDailyCoinRebateStatusesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{218} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{222} } func (x *ListMyVipDailyCoinRebateStatusesRequest) GetRequestId() string { @@ -19841,18 +20054,17 @@ func (x *ListMyVipDailyCoinRebateStatusesRequest) GetRebateIds() []string { } type ListMyVipDailyCoinRebateStatusesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rebates []*VipDailyCoinRebate `protobuf:"bytes,1,rep,name=rebates,proto3" json:"rebates,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rebates []*VipDailyCoinRebate `protobuf:"bytes,1,rep,name=rebates,proto3" json:"rebates,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListMyVipDailyCoinRebateStatusesResponse) Reset() { *x = ListMyVipDailyCoinRebateStatusesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[219] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[223] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19864,7 +20076,7 @@ func (x *ListMyVipDailyCoinRebateStatusesResponse) String() string { func (*ListMyVipDailyCoinRebateStatusesResponse) ProtoMessage() {} func (x *ListMyVipDailyCoinRebateStatusesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[219] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[223] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19877,7 +20089,7 @@ func (x *ListMyVipDailyCoinRebateStatusesResponse) ProtoReflect() protoreflect.M // Deprecated: Use ListMyVipDailyCoinRebateStatusesResponse.ProtoReflect.Descriptor instead. func (*ListMyVipDailyCoinRebateStatusesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{219} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{223} } func (x *ListMyVipDailyCoinRebateStatusesResponse) GetRebates() []*VipDailyCoinRebate { @@ -19902,19 +20114,18 @@ func (x *ListMyVipDailyCoinRebateStatusesResponse) GetServerTimeMs() int64 { } type ClaimVipDailyCoinRebateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + RebateId string `protobuf:"bytes,4,opt,name=rebate_id,json=rebateId,proto3" json:"rebate_id,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - RebateId string `protobuf:"bytes,4,opt,name=rebate_id,json=rebateId,proto3" json:"rebate_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimVipDailyCoinRebateRequest) Reset() { *x = ClaimVipDailyCoinRebateRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[220] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19926,7 +20137,7 @@ func (x *ClaimVipDailyCoinRebateRequest) String() string { func (*ClaimVipDailyCoinRebateRequest) ProtoMessage() {} func (x *ClaimVipDailyCoinRebateRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[220] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[224] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19939,7 +20150,7 @@ func (x *ClaimVipDailyCoinRebateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimVipDailyCoinRebateRequest.ProtoReflect.Descriptor instead. func (*ClaimVipDailyCoinRebateRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{220} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{224} } func (x *ClaimVipDailyCoinRebateRequest) GetCommandId() string { @@ -19971,19 +20182,18 @@ func (x *ClaimVipDailyCoinRebateRequest) GetRebateId() string { } type ClaimVipDailyCoinRebateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Rebate *VipDailyCoinRebate `protobuf:"bytes,1,opt,name=rebate,proto3" json:"rebate,omitempty"` + TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + CoinBalance *AssetBalance `protobuf:"bytes,3,opt,name=coin_balance,json=coinBalance,proto3" json:"coin_balance,omitempty"` + ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Rebate *VipDailyCoinRebate `protobuf:"bytes,1,opt,name=rebate,proto3" json:"rebate,omitempty"` - TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - CoinBalance *AssetBalance `protobuf:"bytes,3,opt,name=coin_balance,json=coinBalance,proto3" json:"coin_balance,omitempty"` - ServerTimeMs int64 `protobuf:"varint,4,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimVipDailyCoinRebateResponse) Reset() { *x = ClaimVipDailyCoinRebateResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[221] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19995,7 +20205,7 @@ func (x *ClaimVipDailyCoinRebateResponse) String() string { func (*ClaimVipDailyCoinRebateResponse) ProtoMessage() {} func (x *ClaimVipDailyCoinRebateResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[221] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[225] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20008,7 +20218,7 @@ func (x *ClaimVipDailyCoinRebateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimVipDailyCoinRebateResponse.ProtoReflect.Descriptor instead. func (*ClaimVipDailyCoinRebateResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{221} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{225} } func (x *ClaimVipDailyCoinRebateResponse) GetRebate() *VipDailyCoinRebate { @@ -20042,24 +20252,23 @@ func (x *ClaimVipDailyCoinRebateResponse) GetServerTimeMs() int64 { // GrantVipTrialCardRequest 允许后台直接按 level+duration_ms 发卡;resource_id 为空时按 // vip_trial_card_{level} 解析同 App 预置资源,非空时也必须匹配该等级。 type GrantVipTrialCardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` - DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - ResourceId *int64 `protobuf:"varint,6,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"` - GrantSource string `protobuf:"bytes,7,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` - OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` + DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + ResourceId *int64 `protobuf:"varint,6,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"` + GrantSource string `protobuf:"bytes,7,opt,name=grant_source,json=grantSource,proto3" json:"grant_source,omitempty"` + OperatorUserId int64 `protobuf:"varint,8,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GrantVipTrialCardRequest) Reset() { *x = GrantVipTrialCardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[222] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20071,7 +20280,7 @@ func (x *GrantVipTrialCardRequest) String() string { func (*GrantVipTrialCardRequest) ProtoMessage() {} func (x *GrantVipTrialCardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[222] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[226] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20084,7 +20293,7 @@ func (x *GrantVipTrialCardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipTrialCardRequest.ProtoReflect.Descriptor instead. func (*GrantVipTrialCardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{222} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{226} } func (x *GrantVipTrialCardRequest) GetCommandId() string { @@ -20151,18 +20360,17 @@ func (x *GrantVipTrialCardRequest) GetReason() string { } type GrantVipTrialCardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TrialCard *VipTrialCard `protobuf:"bytes,1,opt,name=trial_card,json=trialCard,proto3" json:"trial_card,omitempty"` + State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TrialCard *VipTrialCard `protobuf:"bytes,1,opt,name=trial_card,json=trialCard,proto3" json:"trial_card,omitempty"` - State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GrantVipTrialCardResponse) Reset() { *x = GrantVipTrialCardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[223] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20174,7 +20382,7 @@ func (x *GrantVipTrialCardResponse) String() string { func (*GrantVipTrialCardResponse) ProtoMessage() {} func (x *GrantVipTrialCardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[223] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[227] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20187,7 +20395,7 @@ func (x *GrantVipTrialCardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipTrialCardResponse.ProtoReflect.Descriptor instead. func (*GrantVipTrialCardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{223} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{227} } func (x *GrantVipTrialCardResponse) GetTrialCard() *VipTrialCard { @@ -20212,20 +20420,19 @@ func (x *GrantVipTrialCardResponse) GetServerTimeMs() int64 { } type EquipVipTrialCardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // entitlement_id 是背包实例标识,保证同资源的多张卡也能被精确佩戴。 EntitlementId string `protobuf:"bytes,4,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EquipVipTrialCardRequest) Reset() { *x = EquipVipTrialCardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[224] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20237,7 +20444,7 @@ func (x *EquipVipTrialCardRequest) String() string { func (*EquipVipTrialCardRequest) ProtoMessage() {} func (x *EquipVipTrialCardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[224] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[228] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20250,7 +20457,7 @@ func (x *EquipVipTrialCardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipVipTrialCardRequest.ProtoReflect.Descriptor instead. func (*EquipVipTrialCardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{224} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{228} } func (x *EquipVipTrialCardRequest) GetRequestId() string { @@ -20282,18 +20489,17 @@ func (x *EquipVipTrialCardRequest) GetEntitlementId() string { } type EquipVipTrialCardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TrialCard *VipTrialCard `protobuf:"bytes,1,opt,name=trial_card,json=trialCard,proto3" json:"trial_card,omitempty"` + State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TrialCard *VipTrialCard `protobuf:"bytes,1,opt,name=trial_card,json=trialCard,proto3" json:"trial_card,omitempty"` - State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EquipVipTrialCardResponse) Reset() { *x = EquipVipTrialCardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[225] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[229] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20305,7 +20511,7 @@ func (x *EquipVipTrialCardResponse) String() string { func (*EquipVipTrialCardResponse) ProtoMessage() {} func (x *EquipVipTrialCardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[225] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[229] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20318,7 +20524,7 @@ func (x *EquipVipTrialCardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipVipTrialCardResponse.ProtoReflect.Descriptor instead. func (*EquipVipTrialCardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{225} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{229} } func (x *EquipVipTrialCardResponse) GetTrialCard() *VipTrialCard { @@ -20343,18 +20549,17 @@ func (x *EquipVipTrialCardResponse) GetServerTimeMs() int64 { } type UnequipVipTrialCardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnequipVipTrialCardRequest) Reset() { *x = UnequipVipTrialCardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[226] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[230] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20366,7 +20571,7 @@ func (x *UnequipVipTrialCardRequest) String() string { func (*UnequipVipTrialCardRequest) ProtoMessage() {} func (x *UnequipVipTrialCardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[226] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[230] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20379,7 +20584,7 @@ func (x *UnequipVipTrialCardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnequipVipTrialCardRequest.ProtoReflect.Descriptor instead. func (*UnequipVipTrialCardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{226} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{230} } func (x *UnequipVipTrialCardRequest) GetRequestId() string { @@ -20404,18 +20609,17 @@ func (x *UnequipVipTrialCardRequest) GetUserId() int64 { } type UnequipVipTrialCardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Unequipped bool `protobuf:"varint,1,opt,name=unequipped,proto3" json:"unequipped,omitempty"` + State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Unequipped bool `protobuf:"varint,1,opt,name=unequipped,proto3" json:"unequipped,omitempty"` - State *VipState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnequipVipTrialCardResponse) Reset() { *x = UnequipVipTrialCardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[227] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20427,7 +20631,7 @@ func (x *UnequipVipTrialCardResponse) String() string { func (*UnequipVipTrialCardResponse) ProtoMessage() {} func (x *UnequipVipTrialCardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[227] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[231] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20440,7 +20644,7 @@ func (x *UnequipVipTrialCardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnequipVipTrialCardResponse.ProtoReflect.Descriptor instead. func (*UnequipVipTrialCardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{227} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{231} } func (x *UnequipVipTrialCardResponse) GetUnequipped() bool { @@ -20467,19 +20671,18 @@ func (x *UnequipVipTrialCardResponse) GetServerTimeMs() int64 { // CheckVipBenefit 供 room/user 等权益执行方校验单个特权。调用方不能只比较 VIP level, // 因为体验卡排除项和 App 配置会改变最终可执行权益集合。 type CheckVipBenefitRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + BenefitCode string `protobuf:"bytes,4,opt,name=benefit_code,json=benefitCode,proto3" json:"benefit_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - BenefitCode string `protobuf:"bytes,4,opt,name=benefit_code,json=benefitCode,proto3" json:"benefit_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckVipBenefitRequest) Reset() { *x = CheckVipBenefitRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[228] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20491,7 +20694,7 @@ func (x *CheckVipBenefitRequest) String() string { func (*CheckVipBenefitRequest) ProtoMessage() {} func (x *CheckVipBenefitRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[228] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[232] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20504,7 +20707,7 @@ func (x *CheckVipBenefitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckVipBenefitRequest.ProtoReflect.Descriptor instead. func (*CheckVipBenefitRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{228} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{232} } func (x *CheckVipBenefitRequest) GetRequestId() string { @@ -20536,20 +20739,19 @@ func (x *CheckVipBenefitRequest) GetBenefitCode() string { } type CheckVipBenefitResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + Benefit *VipBenefit `protobuf:"bytes,2,opt,name=benefit,proto3" json:"benefit,omitempty"` + State *VipState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + DenialReason string `protobuf:"bytes,4,opt,name=denial_reason,json=denialReason,proto3" json:"denial_reason,omitempty"` + EvaluatedAtMs int64 `protobuf:"varint,5,opt,name=evaluated_at_ms,json=evaluatedAtMs,proto3" json:"evaluated_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` - Benefit *VipBenefit `protobuf:"bytes,2,opt,name=benefit,proto3" json:"benefit,omitempty"` - State *VipState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - DenialReason string `protobuf:"bytes,4,opt,name=denial_reason,json=denialReason,proto3" json:"denial_reason,omitempty"` - EvaluatedAtMs int64 `protobuf:"varint,5,opt,name=evaluated_at_ms,json=evaluatedAtMs,proto3" json:"evaluated_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckVipBenefitResponse) Reset() { *x = CheckVipBenefitResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[229] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[233] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20561,7 +20763,7 @@ func (x *CheckVipBenefitResponse) String() string { func (*CheckVipBenefitResponse) ProtoMessage() {} func (x *CheckVipBenefitResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[229] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[233] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20574,7 +20776,7 @@ func (x *CheckVipBenefitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckVipBenefitResponse.ProtoReflect.Descriptor instead. func (*CheckVipBenefitResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{229} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{233} } func (x *CheckVipBenefitResponse) GetAllowed() bool { @@ -20613,25 +20815,24 @@ func (x *CheckVipBenefitResponse) GetEvaluatedAtMs() int64 { } type AdminVipLevelInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - PriceCoin int64 `protobuf:"varint,4,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` - DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` - RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` - SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - RequiredRechargeCoinAmount int64 `protobuf:"varint,8,opt,name=required_recharge_coin_amount,json=requiredRechargeCoinAmount,proto3" json:"required_recharge_coin_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PriceCoin int64 `protobuf:"varint,4,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` + DurationMs int64 `protobuf:"varint,5,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` + RewardResourceGroupId int64 `protobuf:"varint,6,opt,name=reward_resource_group_id,json=rewardResourceGroupId,proto3" json:"reward_resource_group_id,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + RequiredRechargeCoinAmount int64 `protobuf:"varint,8,opt,name=required_recharge_coin_amount,json=requiredRechargeCoinAmount,proto3" json:"required_recharge_coin_amount,omitempty"` // benefits 是该等级完整、显式的权益集合;服务端不根据 unlock_level 自动继承。 - Benefits []*VipBenefit `protobuf:"bytes,9,rep,name=benefits,proto3" json:"benefits,omitempty"` + Benefits []*VipBenefit `protobuf:"bytes,9,rep,name=benefits,proto3" json:"benefits,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdminVipLevelInput) Reset() { *x = AdminVipLevelInput{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[230] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[234] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20643,7 +20844,7 @@ func (x *AdminVipLevelInput) String() string { func (*AdminVipLevelInput) ProtoMessage() {} func (x *AdminVipLevelInput) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[230] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[234] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20656,7 +20857,7 @@ func (x *AdminVipLevelInput) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminVipLevelInput.ProtoReflect.Descriptor instead. func (*AdminVipLevelInput) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{230} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{234} } func (x *AdminVipLevelInput) GetLevel() int32 { @@ -20723,17 +20924,16 @@ func (x *AdminVipLevelInput) GetBenefits() []*VipBenefit { } type ListAdminVipLevelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAdminVipLevelsRequest) Reset() { *x = ListAdminVipLevelsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[231] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[235] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20745,7 +20945,7 @@ func (x *ListAdminVipLevelsRequest) String() string { func (*ListAdminVipLevelsRequest) ProtoMessage() {} func (x *ListAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[231] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[235] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20758,7 +20958,7 @@ func (x *ListAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminVipLevelsRequest.ProtoReflect.Descriptor instead. func (*ListAdminVipLevelsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{231} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{235} } func (x *ListAdminVipLevelsRequest) GetRequestId() string { @@ -20776,18 +20976,17 @@ func (x *ListAdminVipLevelsRequest) GetAppCode() string { } type ListAdminVipLevelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Levels []*VipLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + ProgramConfig *VipProgramConfig `protobuf:"bytes,3,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` unknownFields protoimpl.UnknownFields - - Levels []*VipLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - ProgramConfig *VipProgramConfig `protobuf:"bytes,3,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListAdminVipLevelsResponse) Reset() { *x = ListAdminVipLevelsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[232] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20799,7 +20998,7 @@ func (x *ListAdminVipLevelsResponse) String() string { func (*ListAdminVipLevelsResponse) ProtoMessage() {} func (x *ListAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[232] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[236] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20812,7 +21011,7 @@ func (x *ListAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminVipLevelsResponse.ProtoReflect.Descriptor instead. func (*ListAdminVipLevelsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{232} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{236} } func (x *ListAdminVipLevelsResponse) GetLevels() []*VipLevel { @@ -20837,19 +21036,18 @@ func (x *ListAdminVipLevelsResponse) GetProgramConfig() *VipProgramConfig { } type UpdateAdminVipLevelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Levels []*AdminVipLevelInput `protobuf:"bytes,3,rep,name=levels,proto3" json:"levels,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Levels []*AdminVipLevelInput `protobuf:"bytes,3,rep,name=levels,proto3" json:"levels,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateAdminVipLevelsRequest) Reset() { *x = UpdateAdminVipLevelsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[233] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20861,7 +21059,7 @@ func (x *UpdateAdminVipLevelsRequest) String() string { func (*UpdateAdminVipLevelsRequest) ProtoMessage() {} func (x *UpdateAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[233] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[237] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20874,7 +21072,7 @@ func (x *UpdateAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAdminVipLevelsRequest.ProtoReflect.Descriptor instead. func (*UpdateAdminVipLevelsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{233} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{237} } func (x *UpdateAdminVipLevelsRequest) GetRequestId() string { @@ -20906,18 +21104,17 @@ func (x *UpdateAdminVipLevelsRequest) GetOperatorUserId() int64 { } type UpdateAdminVipLevelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Levels []*VipLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + ProgramConfig *VipProgramConfig `protobuf:"bytes,3,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` unknownFields protoimpl.UnknownFields - - Levels []*VipLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - ProgramConfig *VipProgramConfig `protobuf:"bytes,3,opt,name=program_config,json=programConfig,proto3" json:"program_config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateAdminVipLevelsResponse) Reset() { *x = UpdateAdminVipLevelsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[234] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[238] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20929,7 +21126,7 @@ func (x *UpdateAdminVipLevelsResponse) String() string { func (*UpdateAdminVipLevelsResponse) ProtoMessage() {} func (x *UpdateAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[234] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[238] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20942,7 +21139,7 @@ func (x *UpdateAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAdminVipLevelsResponse.ProtoReflect.Descriptor instead. func (*UpdateAdminVipLevelsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{234} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{238} } func (x *UpdateAdminVipLevelsResponse) GetLevels() []*VipLevel { @@ -20968,24 +21165,23 @@ func (x *UpdateAdminVipLevelsResponse) GetProgramConfig() *VipProgramConfig { // CreditTaskRewardRequest 是 activity-service 领取任务奖励时调用的钱包入账命令。 type CreditTaskRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - TaskType string `protobuf:"bytes,5,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` - TaskId string `protobuf:"bytes,6,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - CycleKey string `protobuf:"bytes,7,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` - RewardAssetType string `protobuf:"bytes,9,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + TaskType string `protobuf:"bytes,5,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` + TaskId string `protobuf:"bytes,6,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + CycleKey string `protobuf:"bytes,7,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` + RewardAssetType string `protobuf:"bytes,9,opt,name=reward_asset_type,json=rewardAssetType,proto3" json:"reward_asset_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreditTaskRewardRequest) Reset() { *x = CreditTaskRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[235] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[239] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20997,7 +21193,7 @@ func (x *CreditTaskRewardRequest) String() string { func (*CreditTaskRewardRequest) ProtoMessage() {} func (x *CreditTaskRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[235] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[239] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21010,7 +21206,7 @@ func (x *CreditTaskRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditTaskRewardRequest.ProtoReflect.Descriptor instead. func (*CreditTaskRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{235} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{239} } func (x *CreditTaskRewardRequest) GetCommandId() string { @@ -21078,19 +21274,18 @@ func (x *CreditTaskRewardRequest) GetRewardAssetType() string { // CreditTaskRewardResponse 返回任务奖励入账流水和用户奖励资产账后余额。 type CreditTaskRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditTaskRewardResponse) Reset() { *x = CreditTaskRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[236] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[240] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21102,7 +21297,7 @@ func (x *CreditTaskRewardResponse) String() string { func (*CreditTaskRewardResponse) ProtoMessage() {} func (x *CreditTaskRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[236] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[240] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21115,7 +21310,7 @@ func (x *CreditTaskRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditTaskRewardResponse.ProtoReflect.Descriptor instead. func (*CreditTaskRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{236} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{240} } func (x *CreditTaskRewardResponse) GetTransactionId() string { @@ -21148,27 +21343,26 @@ func (x *CreditTaskRewardResponse) GetGrantedAtMs() int64 { // CreditLuckyGiftRewardRequest 是 activity-service 抽奖 outbox 补偿 worker 调用的钱包入账命令。 type CreditLuckyGiftRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - DrawId string `protobuf:"bytes,5,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - GiftId string `protobuf:"bytes,7,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` - PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` - VisibleRegionId int64 `protobuf:"varint,10,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + DrawId string `protobuf:"bytes,5,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + GiftId string `protobuf:"bytes,7,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + PoolId string `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` + VisibleRegionId int64 `protobuf:"varint,10,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` // country_id 是中奖用户所属国家,钱包 outbox 原样发布给统计服务,避免返奖只落到区域未知国家。 - CountryId int64 `protobuf:"varint,11,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryId int64 `protobuf:"varint,11,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreditLuckyGiftRewardRequest) Reset() { *x = CreditLuckyGiftRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[237] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21180,7 +21374,7 @@ func (x *CreditLuckyGiftRewardRequest) String() string { func (*CreditLuckyGiftRewardRequest) ProtoMessage() {} func (x *CreditLuckyGiftRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[237] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[241] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21193,7 +21387,7 @@ func (x *CreditLuckyGiftRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditLuckyGiftRewardRequest.ProtoReflect.Descriptor instead. func (*CreditLuckyGiftRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{237} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{241} } func (x *CreditLuckyGiftRewardRequest) GetCommandId() string { @@ -21275,19 +21469,18 @@ func (x *CreditLuckyGiftRewardRequest) GetCountryId() int64 { // CreditLuckyGiftRewardResponse 返回幸运礼物返奖入账流水和用户 COIN 账后余额。 type CreditLuckyGiftRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditLuckyGiftRewardResponse) Reset() { *x = CreditLuckyGiftRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[238] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21299,7 +21492,7 @@ func (x *CreditLuckyGiftRewardResponse) String() string { func (*CreditLuckyGiftRewardResponse) ProtoMessage() {} func (x *CreditLuckyGiftRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[238] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[242] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21312,7 +21505,7 @@ func (x *CreditLuckyGiftRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditLuckyGiftRewardResponse.ProtoReflect.Descriptor instead. func (*CreditLuckyGiftRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{238} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{242} } func (x *CreditLuckyGiftRewardResponse) GetTransactionId() string { @@ -21345,24 +21538,23 @@ func (x *CreditLuckyGiftRewardResponse) GetGrantedAtMs() int64 { // CreditWheelRewardRequest 是 activity-service 转盘金币奖品 outbox 调用的钱包入账命令。 type CreditWheelRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - DrawId string `protobuf:"bytes,5,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` - WheelId string `protobuf:"bytes,6,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` - SelectedTierId string `protobuf:"bytes,7,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` - Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` - VisibleRegionId int64 `protobuf:"varint,9,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + DrawId string `protobuf:"bytes,5,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"` + WheelId string `protobuf:"bytes,6,opt,name=wheel_id,json=wheelId,proto3" json:"wheel_id,omitempty"` + SelectedTierId string `protobuf:"bytes,7,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"` + Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` + VisibleRegionId int64 `protobuf:"varint,9,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreditWheelRewardRequest) Reset() { *x = CreditWheelRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[239] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[243] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21374,7 +21566,7 @@ func (x *CreditWheelRewardRequest) String() string { func (*CreditWheelRewardRequest) ProtoMessage() {} func (x *CreditWheelRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[239] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[243] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21387,7 +21579,7 @@ func (x *CreditWheelRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditWheelRewardRequest.ProtoReflect.Descriptor instead. func (*CreditWheelRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{239} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{243} } func (x *CreditWheelRewardRequest) GetCommandId() string { @@ -21455,19 +21647,18 @@ func (x *CreditWheelRewardRequest) GetVisibleRegionId() int64 { // CreditWheelRewardResponse 返回转盘金币奖品入账流水和用户 COIN 账后余额。 type CreditWheelRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditWheelRewardResponse) Reset() { *x = CreditWheelRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[240] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21479,7 +21670,7 @@ func (x *CreditWheelRewardResponse) String() string { func (*CreditWheelRewardResponse) ProtoMessage() {} func (x *CreditWheelRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[240] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[244] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21492,7 +21683,7 @@ func (x *CreditWheelRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditWheelRewardResponse.ProtoReflect.Descriptor instead. func (*CreditWheelRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{240} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{244} } func (x *CreditWheelRewardResponse) GetTransactionId() string { @@ -21525,27 +21716,26 @@ func (x *CreditWheelRewardResponse) GetGrantedAtMs() int64 { // CreditRoomTurnoverRewardRequest 是 activity-service 每周房间流水奖励结算后的金币入账命令。 type CreditRoomTurnoverRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + SettlementId string `protobuf:"bytes,5,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` + RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + PeriodStartMs int64 `protobuf:"varint,7,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` + PeriodEndMs int64 `protobuf:"varint,8,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` + CoinSpent int64 `protobuf:"varint,9,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` + TierId int64 `protobuf:"varint,10,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,11,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + Reason string `protobuf:"bytes,12,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - SettlementId string `protobuf:"bytes,5,opt,name=settlement_id,json=settlementId,proto3" json:"settlement_id,omitempty"` - RoomId string `protobuf:"bytes,6,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - PeriodStartMs int64 `protobuf:"varint,7,opt,name=period_start_ms,json=periodStartMs,proto3" json:"period_start_ms,omitempty"` - PeriodEndMs int64 `protobuf:"varint,8,opt,name=period_end_ms,json=periodEndMs,proto3" json:"period_end_ms,omitempty"` - CoinSpent int64 `protobuf:"varint,9,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"` - TierId int64 `protobuf:"varint,10,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,11,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - Reason string `protobuf:"bytes,12,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditRoomTurnoverRewardRequest) Reset() { *x = CreditRoomTurnoverRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[241] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21557,7 +21747,7 @@ func (x *CreditRoomTurnoverRewardRequest) String() string { func (*CreditRoomTurnoverRewardRequest) ProtoMessage() {} func (x *CreditRoomTurnoverRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[241] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[245] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21570,7 +21760,7 @@ func (x *CreditRoomTurnoverRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditRoomTurnoverRewardRequest.ProtoReflect.Descriptor instead. func (*CreditRoomTurnoverRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{241} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{245} } func (x *CreditRoomTurnoverRewardRequest) GetCommandId() string { @@ -21659,19 +21849,18 @@ func (x *CreditRoomTurnoverRewardRequest) GetReason() string { // CreditRoomTurnoverRewardResponse 返回房间流水奖励入账流水和用户 COIN 账后余额。 type CreditRoomTurnoverRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditRoomTurnoverRewardResponse) Reset() { *x = CreditRoomTurnoverRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[242] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21683,7 +21872,7 @@ func (x *CreditRoomTurnoverRewardResponse) String() string { func (*CreditRoomTurnoverRewardResponse) ProtoMessage() {} func (x *CreditRoomTurnoverRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[242] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[246] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21696,7 +21885,7 @@ func (x *CreditRoomTurnoverRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditRoomTurnoverRewardResponse.ProtoReflect.Descriptor instead. func (*CreditRoomTurnoverRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{242} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{246} } func (x *CreditRoomTurnoverRewardResponse) GetTransactionId() string { @@ -21729,26 +21918,25 @@ func (x *CreditRoomTurnoverRewardResponse) GetGrantedAtMs() int64 { // CreditInviteActivityRewardRequest 是 activity-service 邀请活动达标后发起的 COIN 奖励入账命令。 type CreditInviteActivityRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + ClaimId string `protobuf:"bytes,5,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + RewardType string `protobuf:"bytes,6,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` + TierId int64 `protobuf:"varint,7,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` + TierCode string `protobuf:"bytes,8,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` + CycleKey string `protobuf:"bytes,9,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` + ReachedValue int64 `protobuf:"varint,10,opt,name=reached_value,json=reachedValue,proto3" json:"reached_value,omitempty"` + Reason string `protobuf:"bytes,11,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - ClaimId string `protobuf:"bytes,5,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - RewardType string `protobuf:"bytes,6,opt,name=reward_type,json=rewardType,proto3" json:"reward_type,omitempty"` - TierId int64 `protobuf:"varint,7,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` - TierCode string `protobuf:"bytes,8,opt,name=tier_code,json=tierCode,proto3" json:"tier_code,omitempty"` - CycleKey string `protobuf:"bytes,9,opt,name=cycle_key,json=cycleKey,proto3" json:"cycle_key,omitempty"` - ReachedValue int64 `protobuf:"varint,10,opt,name=reached_value,json=reachedValue,proto3" json:"reached_value,omitempty"` - Reason string `protobuf:"bytes,11,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditInviteActivityRewardRequest) Reset() { *x = CreditInviteActivityRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[243] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[247] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21760,7 +21948,7 @@ func (x *CreditInviteActivityRewardRequest) String() string { func (*CreditInviteActivityRewardRequest) ProtoMessage() {} func (x *CreditInviteActivityRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[243] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[247] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21773,7 +21961,7 @@ func (x *CreditInviteActivityRewardRequest) ProtoReflect() protoreflect.Message // Deprecated: Use CreditInviteActivityRewardRequest.ProtoReflect.Descriptor instead. func (*CreditInviteActivityRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{243} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{247} } func (x *CreditInviteActivityRewardRequest) GetCommandId() string { @@ -21855,19 +22043,18 @@ func (x *CreditInviteActivityRewardRequest) GetReason() string { // CreditInviteActivityRewardResponse 返回邀请活动奖励入账流水和用户 COIN 账后余额。 type CreditInviteActivityRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditInviteActivityRewardResponse) Reset() { *x = CreditInviteActivityRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[244] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[248] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21879,7 +22066,7 @@ func (x *CreditInviteActivityRewardResponse) String() string { func (*CreditInviteActivityRewardResponse) ProtoMessage() {} func (x *CreditInviteActivityRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[244] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[248] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21892,7 +22079,7 @@ func (x *CreditInviteActivityRewardResponse) ProtoReflect() protoreflect.Message // Deprecated: Use CreditInviteActivityRewardResponse.ProtoReflect.Descriptor instead. func (*CreditInviteActivityRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{244} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{248} } func (x *CreditInviteActivityRewardResponse) GetTransactionId() string { @@ -21925,25 +22112,24 @@ func (x *CreditInviteActivityRewardResponse) GetGrantedAtMs() int64 { // CreditAgencyOpeningRewardRequest 是 activity-service 代理开业流水档位结算后的 COIN 入账命令。 type CreditAgencyOpeningRewardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + ApplicationId string `protobuf:"bytes,5,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + CycleId string `protobuf:"bytes,6,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` + AgencyId int64 `protobuf:"varint,7,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` + RankNo int32 `protobuf:"varint,8,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` + ScoreCoins int64 `protobuf:"varint,9,opt,name=score_coins,json=scoreCoins,proto3" json:"score_coins,omitempty"` + Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - TargetUserId int64 `protobuf:"varint,3,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` - Amount int64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` - ApplicationId string `protobuf:"bytes,5,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` - CycleId string `protobuf:"bytes,6,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` - AgencyId int64 `protobuf:"varint,7,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` - RankNo int32 `protobuf:"varint,8,opt,name=rank_no,json=rankNo,proto3" json:"rank_no,omitempty"` - ScoreCoins int64 `protobuf:"varint,9,opt,name=score_coins,json=scoreCoins,proto3" json:"score_coins,omitempty"` - Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditAgencyOpeningRewardRequest) Reset() { *x = CreditAgencyOpeningRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[245] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[249] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21955,7 +22141,7 @@ func (x *CreditAgencyOpeningRewardRequest) String() string { func (*CreditAgencyOpeningRewardRequest) ProtoMessage() {} func (x *CreditAgencyOpeningRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[245] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[249] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21968,7 +22154,7 @@ func (x *CreditAgencyOpeningRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditAgencyOpeningRewardRequest.ProtoReflect.Descriptor instead. func (*CreditAgencyOpeningRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{245} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{249} } func (x *CreditAgencyOpeningRewardRequest) GetCommandId() string { @@ -22043,19 +22229,18 @@ func (x *CreditAgencyOpeningRewardRequest) GetReason() string { // CreditAgencyOpeningRewardResponse 返回代理开业奖励入账流水和用户 COIN 账后余额。 type CreditAgencyOpeningRewardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - Balance *AssetBalance `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` - GrantedAtMs int64 `protobuf:"varint,4,opt,name=granted_at_ms,json=grantedAtMs,proto3" json:"granted_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreditAgencyOpeningRewardResponse) Reset() { *x = CreditAgencyOpeningRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[246] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[250] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22067,7 +22252,7 @@ func (x *CreditAgencyOpeningRewardResponse) String() string { func (*CreditAgencyOpeningRewardResponse) ProtoMessage() {} func (x *CreditAgencyOpeningRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[246] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[250] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22080,7 +22265,7 @@ func (x *CreditAgencyOpeningRewardResponse) ProtoReflect() protoreflect.Message // Deprecated: Use CreditAgencyOpeningRewardResponse.ProtoReflect.Descriptor instead. func (*CreditAgencyOpeningRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{246} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{250} } func (x *CreditAgencyOpeningRewardResponse) GetTransactionId() string { @@ -22113,27 +22298,26 @@ func (x *CreditAgencyOpeningRewardResponse) GetGrantedAtMs() int64 { // ApplyGameCoinChangeRequest 是 game-service 唯一可以调用的钱包游戏改账入口。 type ApplyGameCoinChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - PlatformCode string `protobuf:"bytes,5,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` - GameId string `protobuf:"bytes,6,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` - ProviderOrderId string `protobuf:"bytes,7,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` - ProviderRoundId string `protobuf:"bytes,8,opt,name=provider_round_id,json=providerRoundId,proto3" json:"provider_round_id,omitempty"` - OpType string `protobuf:"bytes,9,opt,name=op_type,json=opType,proto3" json:"op_type,omitempty"` - CoinAmount int64 `protobuf:"varint,10,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` - RoomId string `protobuf:"bytes,11,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RequestHash string `protobuf:"bytes,12,opt,name=request_hash,json=requestHash,proto3" json:"request_hash,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + PlatformCode string `protobuf:"bytes,5,opt,name=platform_code,json=platformCode,proto3" json:"platform_code,omitempty"` + GameId string `protobuf:"bytes,6,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"` + ProviderOrderId string `protobuf:"bytes,7,opt,name=provider_order_id,json=providerOrderId,proto3" json:"provider_order_id,omitempty"` + ProviderRoundId string `protobuf:"bytes,8,opt,name=provider_round_id,json=providerRoundId,proto3" json:"provider_round_id,omitempty"` + OpType string `protobuf:"bytes,9,opt,name=op_type,json=opType,proto3" json:"op_type,omitempty"` + CoinAmount int64 `protobuf:"varint,10,opt,name=coin_amount,json=coinAmount,proto3" json:"coin_amount,omitempty"` + RoomId string `protobuf:"bytes,11,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RequestHash string `protobuf:"bytes,12,opt,name=request_hash,json=requestHash,proto3" json:"request_hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ApplyGameCoinChangeRequest) Reset() { *x = ApplyGameCoinChangeRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[247] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[251] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22145,7 +22329,7 @@ func (x *ApplyGameCoinChangeRequest) String() string { func (*ApplyGameCoinChangeRequest) ProtoMessage() {} func (x *ApplyGameCoinChangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[247] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[251] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22158,7 +22342,7 @@ func (x *ApplyGameCoinChangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyGameCoinChangeRequest.ProtoReflect.Descriptor instead. func (*ApplyGameCoinChangeRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{247} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{251} } func (x *ApplyGameCoinChangeRequest) GetRequestId() string { @@ -22247,18 +22431,17 @@ func (x *ApplyGameCoinChangeRequest) GetRequestHash() string { // ApplyGameCoinChangeResponse 返回游戏改账流水和用户 COIN 账后余额。 type ApplyGameCoinChangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WalletTransactionId string `protobuf:"bytes,1,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - IdempotentReplay bool `protobuf:"varint,3,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + WalletTransactionId string `protobuf:"bytes,1,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + IdempotentReplay bool `protobuf:"varint,3,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ApplyGameCoinChangeResponse) Reset() { *x = ApplyGameCoinChangeResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[248] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[252] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22270,7 +22453,7 @@ func (x *ApplyGameCoinChangeResponse) String() string { func (*ApplyGameCoinChangeResponse) ProtoMessage() {} func (x *ApplyGameCoinChangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[248] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[252] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22283,7 +22466,7 @@ func (x *ApplyGameCoinChangeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyGameCoinChangeResponse.ProtoReflect.Descriptor instead. func (*ApplyGameCoinChangeResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{248} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{252} } func (x *ApplyGameCoinChangeResponse) GetWalletTransactionId() string { @@ -22308,26 +22491,25 @@ func (x *ApplyGameCoinChangeResponse) GetIdempotentReplay() bool { } type RedPacketConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - CountTiers []int32 `protobuf:"varint,3,rep,packed,name=count_tiers,json=countTiers,proto3" json:"count_tiers,omitempty"` - AmountTiers []int64 `protobuf:"varint,4,rep,packed,name=amount_tiers,json=amountTiers,proto3" json:"amount_tiers,omitempty"` - DelayedOpenSeconds int32 `protobuf:"varint,5,opt,name=delayed_open_seconds,json=delayedOpenSeconds,proto3" json:"delayed_open_seconds,omitempty"` - ExpireSeconds int32 `protobuf:"varint,6,opt,name=expire_seconds,json=expireSeconds,proto3" json:"expire_seconds,omitempty"` - DailySendLimit int32 `protobuf:"varint,7,opt,name=daily_send_limit,json=dailySendLimit,proto3" json:"daily_send_limit,omitempty"` - UpdatedByAdminId int64 `protobuf:"varint,8,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - RuleUrl string `protobuf:"bytes,11,opt,name=rule_url,json=ruleUrl,proto3" json:"rule_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + CountTiers []int32 `protobuf:"varint,3,rep,packed,name=count_tiers,json=countTiers,proto3" json:"count_tiers,omitempty"` + AmountTiers []int64 `protobuf:"varint,4,rep,packed,name=amount_tiers,json=amountTiers,proto3" json:"amount_tiers,omitempty"` + DelayedOpenSeconds int32 `protobuf:"varint,5,opt,name=delayed_open_seconds,json=delayedOpenSeconds,proto3" json:"delayed_open_seconds,omitempty"` + ExpireSeconds int32 `protobuf:"varint,6,opt,name=expire_seconds,json=expireSeconds,proto3" json:"expire_seconds,omitempty"` + DailySendLimit int32 `protobuf:"varint,7,opt,name=daily_send_limit,json=dailySendLimit,proto3" json:"daily_send_limit,omitempty"` + UpdatedByAdminId int64 `protobuf:"varint,8,opt,name=updated_by_admin_id,json=updatedByAdminId,proto3" json:"updated_by_admin_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,9,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,10,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + RuleUrl string `protobuf:"bytes,11,opt,name=rule_url,json=ruleUrl,proto3" json:"rule_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RedPacketConfig) Reset() { *x = RedPacketConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[249] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[253] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22339,7 +22521,7 @@ func (x *RedPacketConfig) String() string { func (*RedPacketConfig) ProtoMessage() {} func (x *RedPacketConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[249] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[253] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22352,7 +22534,7 @@ func (x *RedPacketConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacketConfig.ProtoReflect.Descriptor instead. func (*RedPacketConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{249} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{253} } func (x *RedPacketConfig) GetAppCode() string { @@ -22433,26 +22615,25 @@ func (x *RedPacketConfig) GetRuleUrl() string { } type RedPacketClaim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - ClaimId string `protobuf:"bytes,2,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PacketId string `protobuf:"bytes,4,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` - WalletTransactionId string `protobuf:"bytes,7,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - FailureReason string `protobuf:"bytes,9,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` - CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ClaimId string `protobuf:"bytes,2,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PacketId string `protobuf:"bytes,4,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Amount int64 `protobuf:"varint,6,opt,name=amount,proto3" json:"amount,omitempty"` + WalletTransactionId string `protobuf:"bytes,7,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` + FailureReason string `protobuf:"bytes,9,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` + CreatedAtMs int64 `protobuf:"varint,10,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,11,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RedPacketClaim) Reset() { *x = RedPacketClaim{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[250] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[254] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22464,7 +22645,7 @@ func (x *RedPacketClaim) String() string { func (*RedPacketClaim) ProtoMessage() {} func (x *RedPacketClaim) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[250] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[254] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22477,7 +22658,7 @@ func (x *RedPacketClaim) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacketClaim.ProtoReflect.Descriptor instead. func (*RedPacketClaim) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{250} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{254} } func (x *RedPacketClaim) GetAppCode() string { @@ -22558,37 +22739,36 @@ func (x *RedPacketClaim) GetUpdatedAtMs() int64 { } type RedPacket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PacketId string `protobuf:"bytes,2,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - PacketType string `protobuf:"bytes,7,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` - TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` - PacketCount int32 `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"` - RemainingAmount int64 `protobuf:"varint,10,opt,name=remaining_amount,json=remainingAmount,proto3" json:"remaining_amount,omitempty"` - RemainingCount int32 `protobuf:"varint,11,opt,name=remaining_count,json=remainingCount,proto3" json:"remaining_count,omitempty"` - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - OpenAtMs int64 `protobuf:"varint,13,opt,name=open_at_ms,json=openAtMs,proto3" json:"open_at_ms,omitempty"` - ExpiresAtMs int64 `protobuf:"varint,14,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` - CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` - ClaimedByViewer bool `protobuf:"varint,17,opt,name=claimed_by_viewer,json=claimedByViewer,proto3" json:"claimed_by_viewer,omitempty"` - ViewerClaimAmount int64 `protobuf:"varint,18,opt,name=viewer_claim_amount,json=viewerClaimAmount,proto3" json:"viewer_claim_amount,omitempty"` - Claims []*RedPacketClaim `protobuf:"bytes,19,rep,name=claims,proto3" json:"claims,omitempty"` - RefundAmount int64 `protobuf:"varint,20,opt,name=refund_amount,json=refundAmount,proto3" json:"refund_amount,omitempty"` - RefundStatus string `protobuf:"bytes,21,opt,name=refund_status,json=refundStatus,proto3" json:"refund_status,omitempty"` - RefundedAtMs int64 `protobuf:"varint,22,opt,name=refunded_at_ms,json=refundedAtMs,proto3" json:"refunded_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PacketId string `protobuf:"bytes,2,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + PacketType string `protobuf:"bytes,7,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` + TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` + PacketCount int32 `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"` + RemainingAmount int64 `protobuf:"varint,10,opt,name=remaining_amount,json=remainingAmount,proto3" json:"remaining_amount,omitempty"` + RemainingCount int32 `protobuf:"varint,11,opt,name=remaining_count,json=remainingCount,proto3" json:"remaining_count,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + OpenAtMs int64 `protobuf:"varint,13,opt,name=open_at_ms,json=openAtMs,proto3" json:"open_at_ms,omitempty"` + ExpiresAtMs int64 `protobuf:"varint,14,opt,name=expires_at_ms,json=expiresAtMs,proto3" json:"expires_at_ms,omitempty"` + CreatedAtMs int64 `protobuf:"varint,15,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + ClaimedByViewer bool `protobuf:"varint,17,opt,name=claimed_by_viewer,json=claimedByViewer,proto3" json:"claimed_by_viewer,omitempty"` + ViewerClaimAmount int64 `protobuf:"varint,18,opt,name=viewer_claim_amount,json=viewerClaimAmount,proto3" json:"viewer_claim_amount,omitempty"` + Claims []*RedPacketClaim `protobuf:"bytes,19,rep,name=claims,proto3" json:"claims,omitempty"` + RefundAmount int64 `protobuf:"varint,20,opt,name=refund_amount,json=refundAmount,proto3" json:"refund_amount,omitempty"` + RefundStatus string `protobuf:"bytes,21,opt,name=refund_status,json=refundStatus,proto3" json:"refund_status,omitempty"` + RefundedAtMs int64 `protobuf:"varint,22,opt,name=refunded_at_ms,json=refundedAtMs,proto3" json:"refunded_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RedPacket) Reset() { *x = RedPacket{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[251] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[255] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22600,7 +22780,7 @@ func (x *RedPacket) String() string { func (*RedPacket) ProtoMessage() {} func (x *RedPacket) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[251] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[255] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22613,7 +22793,7 @@ func (x *RedPacket) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacket.ProtoReflect.Descriptor instead. func (*RedPacket) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{251} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{255} } func (x *RedPacket) GetAppCode() string { @@ -22771,17 +22951,16 @@ func (x *RedPacket) GetRefundedAtMs() int64 { } type GetRedPacketConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRedPacketConfigRequest) Reset() { *x = GetRedPacketConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[252] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[256] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22793,7 +22972,7 @@ func (x *GetRedPacketConfigRequest) String() string { func (*GetRedPacketConfigRequest) ProtoMessage() {} func (x *GetRedPacketConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[252] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[256] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22806,7 +22985,7 @@ func (x *GetRedPacketConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketConfigRequest.ProtoReflect.Descriptor instead. func (*GetRedPacketConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{252} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{256} } func (x *GetRedPacketConfigRequest) GetRequestId() string { @@ -22824,17 +23003,16 @@ func (x *GetRedPacketConfigRequest) GetAppCode() string { } type GetRedPacketConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RedPacketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RedPacketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRedPacketConfigResponse) Reset() { *x = GetRedPacketConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[253] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[257] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22846,7 +23024,7 @@ func (x *GetRedPacketConfigResponse) String() string { func (*GetRedPacketConfigResponse) ProtoMessage() {} func (x *GetRedPacketConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[253] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[257] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22859,7 +23037,7 @@ func (x *GetRedPacketConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketConfigResponse.ProtoReflect.Descriptor instead. func (*GetRedPacketConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{253} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{257} } func (x *GetRedPacketConfigResponse) GetConfig() *RedPacketConfig { @@ -22877,25 +23055,24 @@ func (x *GetRedPacketConfigResponse) GetServerTimeMs() int64 { } type UpdateRedPacketConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` - CountTiers []int32 `protobuf:"varint,4,rep,packed,name=count_tiers,json=countTiers,proto3" json:"count_tiers,omitempty"` - AmountTiers []int64 `protobuf:"varint,5,rep,packed,name=amount_tiers,json=amountTiers,proto3" json:"amount_tiers,omitempty"` - DelayedOpenSeconds int32 `protobuf:"varint,6,opt,name=delayed_open_seconds,json=delayedOpenSeconds,proto3" json:"delayed_open_seconds,omitempty"` - ExpireSeconds int32 `protobuf:"varint,7,opt,name=expire_seconds,json=expireSeconds,proto3" json:"expire_seconds,omitempty"` - DailySendLimit int32 `protobuf:"varint,8,opt,name=daily_send_limit,json=dailySendLimit,proto3" json:"daily_send_limit,omitempty"` - OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` - RuleUrl string `protobuf:"bytes,10,opt,name=rule_url,json=ruleUrl,proto3" json:"rule_url,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + CountTiers []int32 `protobuf:"varint,4,rep,packed,name=count_tiers,json=countTiers,proto3" json:"count_tiers,omitempty"` + AmountTiers []int64 `protobuf:"varint,5,rep,packed,name=amount_tiers,json=amountTiers,proto3" json:"amount_tiers,omitempty"` + DelayedOpenSeconds int32 `protobuf:"varint,6,opt,name=delayed_open_seconds,json=delayedOpenSeconds,proto3" json:"delayed_open_seconds,omitempty"` + ExpireSeconds int32 `protobuf:"varint,7,opt,name=expire_seconds,json=expireSeconds,proto3" json:"expire_seconds,omitempty"` + DailySendLimit int32 `protobuf:"varint,8,opt,name=daily_send_limit,json=dailySendLimit,proto3" json:"daily_send_limit,omitempty"` + OperatorUserId int64 `protobuf:"varint,9,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + RuleUrl string `protobuf:"bytes,10,opt,name=rule_url,json=ruleUrl,proto3" json:"rule_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateRedPacketConfigRequest) Reset() { *x = UpdateRedPacketConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[254] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[258] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22907,7 +23084,7 @@ func (x *UpdateRedPacketConfigRequest) String() string { func (*UpdateRedPacketConfigRequest) ProtoMessage() {} func (x *UpdateRedPacketConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[254] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[258] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22920,7 +23097,7 @@ func (x *UpdateRedPacketConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRedPacketConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateRedPacketConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{254} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{258} } func (x *UpdateRedPacketConfigRequest) GetRequestId() string { @@ -22994,17 +23171,16 @@ func (x *UpdateRedPacketConfigRequest) GetRuleUrl() string { } type UpdateRedPacketConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Config *RedPacketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Config *RedPacketConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRedPacketConfigResponse) Reset() { *x = UpdateRedPacketConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[255] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[259] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23016,7 +23192,7 @@ func (x *UpdateRedPacketConfigResponse) String() string { func (*UpdateRedPacketConfigResponse) ProtoMessage() {} func (x *UpdateRedPacketConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[255] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[259] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23029,7 +23205,7 @@ func (x *UpdateRedPacketConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRedPacketConfigResponse.ProtoReflect.Descriptor instead. func (*UpdateRedPacketConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{255} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{259} } func (x *UpdateRedPacketConfigResponse) GetConfig() *RedPacketConfig { @@ -23047,24 +23223,23 @@ func (x *UpdateRedPacketConfigResponse) GetServerTimeMs() int64 { } type CreateRedPacketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + PacketType string `protobuf:"bytes,7,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` + TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` + PacketCount int32 `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - RoomId string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - RegionId int64 `protobuf:"varint,6,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - PacketType string `protobuf:"bytes,7,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` - TotalAmount int64 `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"` - PacketCount int32 `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRedPacketRequest) Reset() { *x = CreateRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[256] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[260] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23076,7 +23251,7 @@ func (x *CreateRedPacketRequest) String() string { func (*CreateRedPacketRequest) ProtoMessage() {} func (x *CreateRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[256] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[260] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23089,7 +23264,7 @@ func (x *CreateRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRedPacketRequest.ProtoReflect.Descriptor instead. func (*CreateRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{256} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{260} } func (x *CreateRedPacketRequest) GetRequestId() string { @@ -23156,18 +23331,17 @@ func (x *CreateRedPacketRequest) GetPacketCount() int32 { } type CreateRedPacketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` + BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` - BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRedPacketResponse) Reset() { *x = CreateRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[257] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[261] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23179,7 +23353,7 @@ func (x *CreateRedPacketResponse) String() string { func (*CreateRedPacketResponse) ProtoMessage() {} func (x *CreateRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[257] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[261] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23192,7 +23366,7 @@ func (x *CreateRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRedPacketResponse.ProtoReflect.Descriptor instead. func (*CreateRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{257} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{261} } func (x *CreateRedPacketResponse) GetPacket() *RedPacket { @@ -23217,20 +23391,19 @@ func (x *CreateRedPacketResponse) GetServerTimeMs() int64 { } type ClaimRedPacketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + PacketId string `protobuf:"bytes,4,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` + UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - PacketId string `protobuf:"bytes,4,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` - UserId int64 `protobuf:"varint,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimRedPacketRequest) Reset() { *x = ClaimRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[258] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[262] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23242,7 +23415,7 @@ func (x *ClaimRedPacketRequest) String() string { func (*ClaimRedPacketRequest) ProtoMessage() {} func (x *ClaimRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[258] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[262] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23255,7 +23428,7 @@ func (x *ClaimRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimRedPacketRequest.ProtoReflect.Descriptor instead. func (*ClaimRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{258} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{262} } func (x *ClaimRedPacketRequest) GetRequestId() string { @@ -23294,19 +23467,18 @@ func (x *ClaimRedPacketRequest) GetUserId() int64 { } type ClaimRedPacketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claim *RedPacketClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + Packet *RedPacket `protobuf:"bytes,4,opt,name=packet,proto3" json:"packet,omitempty"` unknownFields protoimpl.UnknownFields - - Claim *RedPacketClaim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` - BalanceAfter int64 `protobuf:"varint,2,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` - Packet *RedPacket `protobuf:"bytes,4,opt,name=packet,proto3" json:"packet,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClaimRedPacketResponse) Reset() { *x = ClaimRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[259] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[263] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23318,7 +23490,7 @@ func (x *ClaimRedPacketResponse) String() string { func (*ClaimRedPacketResponse) ProtoMessage() {} func (x *ClaimRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[259] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[263] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23331,7 +23503,7 @@ func (x *ClaimRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimRedPacketResponse.ProtoReflect.Descriptor instead. func (*ClaimRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{259} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{263} } func (x *ClaimRedPacketResponse) GetClaim() *RedPacketClaim { @@ -23363,27 +23535,26 @@ func (x *ClaimRedPacketResponse) GetPacket() *RedPacket { } type ListRedPacketsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` + RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + PacketType string `protobuf:"bytes,6,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + ViewerUserId int64 `protobuf:"varint,8,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + Page int32 `protobuf:"varint,11,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,12,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - SenderUserId int64 `protobuf:"varint,4,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"` - RegionId int64 `protobuf:"varint,5,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - PacketType string `protobuf:"bytes,6,opt,name=packet_type,json=packetType,proto3" json:"packet_type,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - ViewerUserId int64 `protobuf:"varint,8,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - StartAtMs int64 `protobuf:"varint,9,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,10,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` - Page int32 `protobuf:"varint,11,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,12,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRedPacketsRequest) Reset() { *x = ListRedPacketsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[260] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[264] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23395,7 +23566,7 @@ func (x *ListRedPacketsRequest) String() string { func (*ListRedPacketsRequest) ProtoMessage() {} func (x *ListRedPacketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[260] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[264] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23408,7 +23579,7 @@ func (x *ListRedPacketsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRedPacketsRequest.ProtoReflect.Descriptor instead. func (*ListRedPacketsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{260} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{264} } func (x *ListRedPacketsRequest) GetRequestId() string { @@ -23496,18 +23667,17 @@ func (x *ListRedPacketsRequest) GetPageSize() int32 { } type ListRedPacketsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Packets []*RedPacket `protobuf:"bytes,1,rep,name=packets,proto3" json:"packets,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Packets []*RedPacket `protobuf:"bytes,1,rep,name=packets,proto3" json:"packets,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRedPacketsResponse) Reset() { *x = ListRedPacketsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[261] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[265] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23519,7 +23689,7 @@ func (x *ListRedPacketsResponse) String() string { func (*ListRedPacketsResponse) ProtoMessage() {} func (x *ListRedPacketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[261] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[265] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23532,7 +23702,7 @@ func (x *ListRedPacketsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRedPacketsResponse.ProtoReflect.Descriptor instead. func (*ListRedPacketsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{261} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{265} } func (x *ListRedPacketsResponse) GetPackets() []*RedPacket { @@ -23557,20 +23727,19 @@ func (x *ListRedPacketsResponse) GetServerTimeMs() int64 { } type GetRedPacketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PacketId string `protobuf:"bytes,3,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` + ViewerUserId int64 `protobuf:"varint,4,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` + IncludeClaims bool `protobuf:"varint,5,opt,name=include_claims,json=includeClaims,proto3" json:"include_claims,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PacketId string `protobuf:"bytes,3,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` - ViewerUserId int64 `protobuf:"varint,4,opt,name=viewer_user_id,json=viewerUserId,proto3" json:"viewer_user_id,omitempty"` - IncludeClaims bool `protobuf:"varint,5,opt,name=include_claims,json=includeClaims,proto3" json:"include_claims,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRedPacketRequest) Reset() { *x = GetRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[262] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[266] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23582,7 +23751,7 @@ func (x *GetRedPacketRequest) String() string { func (*GetRedPacketRequest) ProtoMessage() {} func (x *GetRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[262] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[266] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23595,7 +23764,7 @@ func (x *GetRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketRequest.ProtoReflect.Descriptor instead. func (*GetRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{262} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{266} } func (x *GetRedPacketRequest) GetRequestId() string { @@ -23634,17 +23803,16 @@ func (x *GetRedPacketRequest) GetIncludeClaims() bool { } type GetRedPacketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` + ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` unknownFields protoimpl.UnknownFields - - Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` - ServerTimeMs int64 `protobuf:"varint,2,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRedPacketResponse) Reset() { *x = GetRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[263] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[267] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23656,7 +23824,7 @@ func (x *GetRedPacketResponse) String() string { func (*GetRedPacketResponse) ProtoMessage() {} func (x *GetRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[263] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[267] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23669,7 +23837,7 @@ func (x *GetRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketResponse.ProtoReflect.Descriptor instead. func (*GetRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{263} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{267} } func (x *GetRedPacketResponse) GetPacket() *RedPacket { @@ -23687,18 +23855,17 @@ func (x *GetRedPacketResponse) GetServerTimeMs() int64 { } type ExpireRedPacketsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + BatchSize int32 `protobuf:"varint,3,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - BatchSize int32 `protobuf:"varint,3,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExpireRedPacketsRequest) Reset() { *x = ExpireRedPacketsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[264] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[268] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23710,7 +23877,7 @@ func (x *ExpireRedPacketsRequest) String() string { func (*ExpireRedPacketsRequest) ProtoMessage() {} func (x *ExpireRedPacketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[264] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[268] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23723,7 +23890,7 @@ func (x *ExpireRedPacketsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireRedPacketsRequest.ProtoReflect.Descriptor instead. func (*ExpireRedPacketsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{264} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{268} } func (x *ExpireRedPacketsRequest) GetRequestId() string { @@ -23748,18 +23915,17 @@ func (x *ExpireRedPacketsRequest) GetBatchSize() int32 { } type ExpireRedPacketsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ExpiredCount int32 `protobuf:"varint,1,opt,name=expired_count,json=expiredCount,proto3" json:"expired_count,omitempty"` - RefundedAmount int64 `protobuf:"varint,2,opt,name=refunded_amount,json=refundedAmount,proto3" json:"refunded_amount,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ExpiredCount int32 `protobuf:"varint,1,opt,name=expired_count,json=expiredCount,proto3" json:"expired_count,omitempty"` + RefundedAmount int64 `protobuf:"varint,2,opt,name=refunded_amount,json=refundedAmount,proto3" json:"refunded_amount,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExpireRedPacketsResponse) Reset() { *x = ExpireRedPacketsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[265] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[269] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23771,7 +23937,7 @@ func (x *ExpireRedPacketsResponse) String() string { func (*ExpireRedPacketsResponse) ProtoMessage() {} func (x *ExpireRedPacketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[265] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[269] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23784,7 +23950,7 @@ func (x *ExpireRedPacketsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireRedPacketsResponse.ProtoReflect.Descriptor instead. func (*ExpireRedPacketsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{265} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{269} } func (x *ExpireRedPacketsResponse) GetExpiredCount() int32 { @@ -23809,19 +23975,18 @@ func (x *ExpireRedPacketsResponse) GetServerTimeMs() int64 { } type RetryRedPacketRefundRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - PacketId string `protobuf:"bytes,3,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` - OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + PacketId string `protobuf:"bytes,3,opt,name=packet_id,json=packetId,proto3" json:"packet_id,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RetryRedPacketRefundRequest) Reset() { *x = RetryRedPacketRefundRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[266] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[270] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23833,7 +23998,7 @@ func (x *RetryRedPacketRefundRequest) String() string { func (*RetryRedPacketRefundRequest) ProtoMessage() {} func (x *RetryRedPacketRefundRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[266] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[270] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23846,7 +24011,7 @@ func (x *RetryRedPacketRefundRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RetryRedPacketRefundRequest.ProtoReflect.Descriptor instead. func (*RetryRedPacketRefundRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{266} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{270} } func (x *RetryRedPacketRefundRequest) GetRequestId() string { @@ -23878,18 +24043,17 @@ func (x *RetryRedPacketRefundRequest) GetOperatorUserId() int64 { } type RetryRedPacketRefundResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` - RefundedAmount int64 `protobuf:"varint,2,opt,name=refunded_amount,json=refundedAmount,proto3" json:"refunded_amount,omitempty"` - ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Packet *RedPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"` + RefundedAmount int64 `protobuf:"varint,2,opt,name=refunded_amount,json=refundedAmount,proto3" json:"refunded_amount,omitempty"` + ServerTimeMs int64 `protobuf:"varint,3,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RetryRedPacketRefundResponse) Reset() { *x = RetryRedPacketRefundResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[267] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[271] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23901,7 +24065,7 @@ func (x *RetryRedPacketRefundResponse) String() string { func (*RetryRedPacketRefundResponse) ProtoMessage() {} func (x *RetryRedPacketRefundResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[267] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[271] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23914,7 +24078,7 @@ func (x *RetryRedPacketRefundResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RetryRedPacketRefundResponse.ProtoReflect.Descriptor instead. func (*RetryRedPacketRefundResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{267} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{271} } func (x *RetryRedPacketRefundResponse) GetPacket() *RedPacket { @@ -23940,16 +24104,13 @@ func (x *RetryRedPacketRefundResponse) GetServerTimeMs() int64 { // CronBatchRequest 是 cron-service 触发 wallet-service 后台批处理的统一请求。 type CronBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - WorkerId string `protobuf:"bytes,4,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` - BatchSize int32 `protobuf:"varint,5,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - LockTtlMs int64 `protobuf:"varint,6,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + WorkerId string `protobuf:"bytes,4,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"` + BatchSize int32 `protobuf:"varint,5,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + LockTtlMs int64 `protobuf:"varint,6,opt,name=lock_ttl_ms,json=lockTtlMs,proto3" json:"lock_ttl_ms,omitempty"` // trigger_mode 为空时由 wallet-service 按 automatic 处理;后台手动结算显式传 manual。 TriggerMode string `protobuf:"bytes,7,opt,name=trigger_mode,json=triggerMode,proto3" json:"trigger_mode,omitempty"` // cycle_key 为空时由 wallet-service 按当前 UTC 月处理;后台手动补结可指定周期。 @@ -23958,11 +24119,13 @@ type CronBatchRequest struct { UserIds []int64 `protobuf:"varint,9,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // settlement_role 为空时结算完整 Host/Agency 权益;后台人工入口可传 host 或 agency 拆分钱包。 SettlementRole string `protobuf:"bytes,10,opt,name=settlement_role,json=settlementRole,proto3" json:"settlement_role,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CronBatchRequest) Reset() { *x = CronBatchRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[268] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[272] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23974,7 +24137,7 @@ func (x *CronBatchRequest) String() string { func (*CronBatchRequest) ProtoMessage() {} func (x *CronBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[268] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[272] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23987,7 +24150,7 @@ func (x *CronBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CronBatchRequest.ProtoReflect.Descriptor instead. func (*CronBatchRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{268} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{272} } func (x *CronBatchRequest) GetRequestId() string { @@ -24062,20 +24225,19 @@ func (x *CronBatchRequest) GetSettlementRole() string { // CronBatchResponse 返回一个批处理 run 的执行摘要。 type CronBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` - ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` - SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` - FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` - HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClaimedCount int32 `protobuf:"varint,1,opt,name=claimed_count,json=claimedCount,proto3" json:"claimed_count,omitempty"` + ProcessedCount int32 `protobuf:"varint,2,opt,name=processed_count,json=processedCount,proto3" json:"processed_count,omitempty"` + SuccessCount int32 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` + FailureCount int32 `protobuf:"varint,4,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` + HasMore bool `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CronBatchResponse) Reset() { *x = CronBatchResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[269] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[273] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24087,7 +24249,7 @@ func (x *CronBatchResponse) String() string { func (*CronBatchResponse) ProtoMessage() {} func (x *CronBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[269] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[273] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24100,7 +24262,7 @@ func (x *CronBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CronBatchResponse.ProtoReflect.Descriptor instead. func (*CronBatchResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{269} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{273} } func (x *CronBatchResponse) GetClaimedCount() int32 { @@ -24139,30 +24301,29 @@ func (x *CronBatchResponse) GetHasMore() bool { } type ResourceShopPurchaseOrder struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - OrderId string `protobuf:"bytes,2,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ShopItemId int64 `protobuf:"varint,5,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` - ResourceId int64 `protobuf:"varint,6,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - Resource *Resource `protobuf:"bytes,7,opt,name=resource,proto3" json:"resource,omitempty"` - DurationDays int32 `protobuf:"varint,8,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` - PriceCoin int64 `protobuf:"varint,9,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` - Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` - WalletTransactionId string `protobuf:"bytes,11,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` - ResourceGrantId string `protobuf:"bytes,12,opt,name=resource_grant_id,json=resourceGrantId,proto3" json:"resource_grant_id,omitempty"` - EntitlementId string `protobuf:"bytes,13,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` - CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + OrderId string `protobuf:"bytes,2,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + CommandId string `protobuf:"bytes,3,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + UserId int64 `protobuf:"varint,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ShopItemId int64 `protobuf:"varint,5,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + ResourceId int64 `protobuf:"varint,6,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,7,opt,name=resource,proto3" json:"resource,omitempty"` + DurationDays int32 `protobuf:"varint,8,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + PriceCoin int64 `protobuf:"varint,9,opt,name=price_coin,json=priceCoin,proto3" json:"price_coin,omitempty"` + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` + WalletTransactionId string `protobuf:"bytes,11,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"` + ResourceGrantId string `protobuf:"bytes,12,opt,name=resource_grant_id,json=resourceGrantId,proto3" json:"resource_grant_id,omitempty"` + EntitlementId string `protobuf:"bytes,13,opt,name=entitlement_id,json=entitlementId,proto3" json:"entitlement_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceShopPurchaseOrder) Reset() { *x = ResourceShopPurchaseOrder{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[270] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[274] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24174,7 +24335,7 @@ func (x *ResourceShopPurchaseOrder) String() string { func (*ResourceShopPurchaseOrder) ProtoMessage() {} func (x *ResourceShopPurchaseOrder) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[270] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[274] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24187,7 +24348,7 @@ func (x *ResourceShopPurchaseOrder) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceShopPurchaseOrder.ProtoReflect.Descriptor instead. func (*ResourceShopPurchaseOrder) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{270} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{274} } func (x *ResourceShopPurchaseOrder) GetAppCode() string { @@ -24296,23 +24457,22 @@ func (x *ResourceShopPurchaseOrder) GetUpdatedAtMs() int64 { } type ListResourceShopPurchaseOrdersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,6,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - Keyword string `protobuf:"bytes,6,opt,name=keyword,proto3" json:"keyword,omitempty"` - Page int32 `protobuf:"varint,7,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceShopPurchaseOrdersRequest) Reset() { *x = ListResourceShopPurchaseOrdersRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[271] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[275] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24324,7 +24484,7 @@ func (x *ListResourceShopPurchaseOrdersRequest) String() string { func (*ListResourceShopPurchaseOrdersRequest) ProtoMessage() {} func (x *ListResourceShopPurchaseOrdersRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[271] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[275] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24337,7 +24497,7 @@ func (x *ListResourceShopPurchaseOrdersRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use ListResourceShopPurchaseOrdersRequest.ProtoReflect.Descriptor instead. func (*ListResourceShopPurchaseOrdersRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{271} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{275} } func (x *ListResourceShopPurchaseOrdersRequest) GetRequestId() string { @@ -24397,17 +24557,16 @@ func (x *ListResourceShopPurchaseOrdersRequest) GetPageSize() int32 { } type ListResourceShopPurchaseOrdersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Orders []*ResourceShopPurchaseOrder `protobuf:"bytes,1,rep,name=orders,proto3" json:"orders,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields - - Orders []*ResourceShopPurchaseOrder `protobuf:"bytes,1,rep,name=orders,proto3" json:"orders,omitempty"` - Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListResourceShopPurchaseOrdersResponse) Reset() { *x = ListResourceShopPurchaseOrdersResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[272] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[276] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24419,7 +24578,7 @@ func (x *ListResourceShopPurchaseOrdersResponse) String() string { func (*ListResourceShopPurchaseOrdersResponse) ProtoMessage() {} func (x *ListResourceShopPurchaseOrdersResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[272] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[276] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24432,7 +24591,7 @@ func (x *ListResourceShopPurchaseOrdersResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use ListResourceShopPurchaseOrdersResponse.ProtoReflect.Descriptor instead. func (*ListResourceShopPurchaseOrdersResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{272} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{276} } func (x *ListResourceShopPurchaseOrdersResponse) GetOrders() []*ResourceShopPurchaseOrder { @@ -24450,17 +24609,16 @@ func (x *ListResourceShopPurchaseOrdersResponse) GetTotal() int64 { } type GetGiftCatalogVersionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetGiftCatalogVersionRequest) Reset() { *x = GetGiftCatalogVersionRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[273] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[277] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24472,7 +24630,7 @@ func (x *GetGiftCatalogVersionRequest) String() string { func (*GetGiftCatalogVersionRequest) ProtoMessage() {} func (x *GetGiftCatalogVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[273] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[277] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24485,7 +24643,7 @@ func (x *GetGiftCatalogVersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGiftCatalogVersionRequest.ProtoReflect.Descriptor instead. func (*GetGiftCatalogVersionRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{273} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{277} } func (x *GetGiftCatalogVersionRequest) GetRequestId() string { @@ -24503,16 +24661,15 @@ func (x *GetGiftCatalogVersionRequest) GetAppCode() string { } type GetGiftCatalogVersionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` unknownFields protoimpl.UnknownFields - - Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetGiftCatalogVersionResponse) Reset() { *x = GetGiftCatalogVersionResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[274] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[278] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24524,7 +24681,7 @@ func (x *GetGiftCatalogVersionResponse) String() string { func (*GetGiftCatalogVersionResponse) ProtoMessage() {} func (x *GetGiftCatalogVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[274] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[278] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24537,7 +24694,7 @@ func (x *GetGiftCatalogVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGiftCatalogVersionResponse.ProtoReflect.Descriptor instead. func (*GetGiftCatalogVersionResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{274} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{278} } func (x *GetGiftCatalogVersionResponse) GetVersion() int64 { @@ -24549,18 +24706,17 @@ func (x *GetGiftCatalogVersionResponse) GetVersion() int64 { // HostRevenueStats 聚合主播在自然日区间内的收益 POINT 和送礼用户;gateway 对外仍按产品文案展示为钻石。 type HostRevenueStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DiamondEarnings int64 `protobuf:"varint,1,opt,name=diamond_earnings,json=diamondEarnings,proto3" json:"diamond_earnings,omitempty"` - DiamondExchanged int64 `protobuf:"varint,2,opt,name=diamond_exchanged,json=diamondExchanged,proto3" json:"diamond_exchanged,omitempty"` - GiftSenders int64 `protobuf:"varint,3,opt,name=gift_senders,json=giftSenders,proto3" json:"gift_senders,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DiamondEarnings int64 `protobuf:"varint,1,opt,name=diamond_earnings,json=diamondEarnings,proto3" json:"diamond_earnings,omitempty"` + DiamondExchanged int64 `protobuf:"varint,2,opt,name=diamond_exchanged,json=diamondExchanged,proto3" json:"diamond_exchanged,omitempty"` + GiftSenders int64 `protobuf:"varint,3,opt,name=gift_senders,json=giftSenders,proto3" json:"gift_senders,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HostRevenueStats) Reset() { *x = HostRevenueStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[275] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[279] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24572,7 +24728,7 @@ func (x *HostRevenueStats) String() string { func (*HostRevenueStats) ProtoMessage() {} func (x *HostRevenueStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[275] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[279] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24585,7 +24741,7 @@ func (x *HostRevenueStats) ProtoReflect() protoreflect.Message { // Deprecated: Use HostRevenueStats.ProtoReflect.Descriptor instead. func (*HostRevenueStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{275} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{279} } func (x *HostRevenueStats) GetDiamondEarnings() int64 { @@ -24610,20 +24766,19 @@ func (x *HostRevenueStats) GetGiftSenders() int64 { } type GetHostRevenueStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` + StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - HostUserId int64 `protobuf:"varint,3,opt,name=host_user_id,json=hostUserId,proto3" json:"host_user_id,omitempty"` - StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostRevenueStatsRequest) Reset() { *x = GetHostRevenueStatsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[276] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[280] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24635,7 +24790,7 @@ func (x *GetHostRevenueStatsRequest) String() string { func (*GetHostRevenueStatsRequest) ProtoMessage() {} func (x *GetHostRevenueStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[276] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[280] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24648,7 +24803,7 @@ func (x *GetHostRevenueStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHostRevenueStatsRequest.ProtoReflect.Descriptor instead. func (*GetHostRevenueStatsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{276} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{280} } func (x *GetHostRevenueStatsRequest) GetRequestId() string { @@ -24687,16 +24842,15 @@ func (x *GetHostRevenueStatsRequest) GetEndAtMs() int64 { } type GetHostRevenueStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stats *HostRevenueStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` unknownFields protoimpl.UnknownFields - - Stats *HostRevenueStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetHostRevenueStatsResponse) Reset() { *x = GetHostRevenueStatsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[277] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[281] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24708,7 +24862,7 @@ func (x *GetHostRevenueStatsResponse) String() string { func (*GetHostRevenueStatsResponse) ProtoMessage() {} func (x *GetHostRevenueStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[277] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[281] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24721,7 +24875,7 @@ func (x *GetHostRevenueStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHostRevenueStatsResponse.ProtoReflect.Descriptor instead. func (*GetHostRevenueStatsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{277} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{281} } func (x *GetHostRevenueStatsResponse) GetStats() *HostRevenueStats { @@ -24733,17 +24887,16 @@ func (x *GetHostRevenueStatsResponse) GetStats() *HostRevenueStats { // AgencyPointShareStats 只统计独立 Agency 分成流水,不把 owner 自己的主播礼物收益重复算入分成。 type AgencyPointShareStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ShareIncome int64 `protobuf:"varint,1,opt,name=share_income,json=shareIncome,proto3" json:"share_income,omitempty"` - GiftedHostCount int64 `protobuf:"varint,2,opt,name=gifted_host_count,json=giftedHostCount,proto3" json:"gifted_host_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ShareIncome int64 `protobuf:"varint,1,opt,name=share_income,json=shareIncome,proto3" json:"share_income,omitempty"` + GiftedHostCount int64 `protobuf:"varint,2,opt,name=gifted_host_count,json=giftedHostCount,proto3" json:"gifted_host_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyPointShareStats) Reset() { *x = AgencyPointShareStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[278] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[282] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24755,7 +24908,7 @@ func (x *AgencyPointShareStats) String() string { func (*AgencyPointShareStats) ProtoMessage() {} func (x *AgencyPointShareStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[278] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[282] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24768,7 +24921,7 @@ func (x *AgencyPointShareStats) ProtoReflect() protoreflect.Message { // Deprecated: Use AgencyPointShareStats.ProtoReflect.Descriptor instead. func (*AgencyPointShareStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{278} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{282} } func (x *AgencyPointShareStats) GetShareIncome() int64 { @@ -24786,20 +24939,19 @@ func (x *AgencyPointShareStats) GetGiftedHostCount() int64 { } type GetAgencyPointShareStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - AgencyOwnerUserId int64 `protobuf:"varint,3,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` - StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + AgencyOwnerUserId int64 `protobuf:"varint,3,opt,name=agency_owner_user_id,json=agencyOwnerUserId,proto3" json:"agency_owner_user_id,omitempty"` + StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAgencyPointShareStatsRequest) Reset() { *x = GetAgencyPointShareStatsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[279] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[283] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24811,7 +24963,7 @@ func (x *GetAgencyPointShareStatsRequest) String() string { func (*GetAgencyPointShareStatsRequest) ProtoMessage() {} func (x *GetAgencyPointShareStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[279] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[283] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24824,7 +24976,7 @@ func (x *GetAgencyPointShareStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyPointShareStatsRequest.ProtoReflect.Descriptor instead. func (*GetAgencyPointShareStatsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{279} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{283} } func (x *GetAgencyPointShareStatsRequest) GetRequestId() string { @@ -24863,16 +25015,15 @@ func (x *GetAgencyPointShareStatsRequest) GetEndAtMs() int64 { } type GetAgencyPointShareStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stats *AgencyPointShareStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` unknownFields protoimpl.UnknownFields - - Stats *AgencyPointShareStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyPointShareStatsResponse) Reset() { *x = GetAgencyPointShareStatsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[280] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[284] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24884,7 +25035,7 @@ func (x *GetAgencyPointShareStatsResponse) String() string { func (*GetAgencyPointShareStatsResponse) ProtoMessage() {} func (x *GetAgencyPointShareStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[280] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[284] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24897,7 +25048,7 @@ func (x *GetAgencyPointShareStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyPointShareStatsResponse.ProtoReflect.Descriptor instead. func (*GetAgencyPointShareStatsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{280} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{284} } func (x *GetAgencyPointShareStatsResponse) GetStats() *AgencyPointShareStats { @@ -24908,17 +25059,16 @@ func (x *GetAgencyPointShareStatsResponse) GetStats() *AgencyPointShareStats { } type AgencyHostGiftStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GiftIncome int64 `protobuf:"varint,1,opt,name=gift_income,json=giftIncome,proto3" json:"gift_income,omitempty"` - GiftedHostCount int64 `protobuf:"varint,2,opt,name=gifted_host_count,json=giftedHostCount,proto3" json:"gifted_host_count,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GiftIncome int64 `protobuf:"varint,1,opt,name=gift_income,json=giftIncome,proto3" json:"gift_income,omitempty"` + GiftedHostCount int64 `protobuf:"varint,2,opt,name=gifted_host_count,json=giftedHostCount,proto3" json:"gifted_host_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgencyHostGiftStats) Reset() { *x = AgencyHostGiftStats{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[281] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[285] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24930,7 +25080,7 @@ func (x *AgencyHostGiftStats) String() string { func (*AgencyHostGiftStats) ProtoMessage() {} func (x *AgencyHostGiftStats) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[281] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[285] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24943,7 +25093,7 @@ func (x *AgencyHostGiftStats) ProtoReflect() protoreflect.Message { // Deprecated: Use AgencyHostGiftStats.ProtoReflect.Descriptor instead. func (*AgencyHostGiftStats) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{281} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{285} } func (x *AgencyHostGiftStats) GetGiftIncome() int64 { @@ -24961,20 +25111,19 @@ func (x *AgencyHostGiftStats) GetGiftedHostCount() int64 { } type GetAgencyHostGiftStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + HostUserIds []int64 `protobuf:"varint,3,rep,packed,name=host_user_ids,json=hostUserIds,proto3" json:"host_user_ids,omitempty"` + StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - HostUserIds []int64 `protobuf:"varint,3,rep,packed,name=host_user_ids,json=hostUserIds,proto3" json:"host_user_ids,omitempty"` - StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` - EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyHostGiftStatsRequest) Reset() { *x = GetAgencyHostGiftStatsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[282] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[286] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24986,7 +25135,7 @@ func (x *GetAgencyHostGiftStatsRequest) String() string { func (*GetAgencyHostGiftStatsRequest) ProtoMessage() {} func (x *GetAgencyHostGiftStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[282] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[286] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24999,7 +25148,7 @@ func (x *GetAgencyHostGiftStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyHostGiftStatsRequest.ProtoReflect.Descriptor instead. func (*GetAgencyHostGiftStatsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{282} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{286} } func (x *GetAgencyHostGiftStatsRequest) GetRequestId() string { @@ -25038,16 +25187,15 @@ func (x *GetAgencyHostGiftStatsRequest) GetEndAtMs() int64 { } type GetAgencyHostGiftStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Stats *AgencyHostGiftStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` unknownFields protoimpl.UnknownFields - - Stats *AgencyHostGiftStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAgencyHostGiftStatsResponse) Reset() { *x = GetAgencyHostGiftStatsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[283] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[287] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25059,7 +25207,7 @@ func (x *GetAgencyHostGiftStatsResponse) String() string { func (*GetAgencyHostGiftStatsResponse) ProtoMessage() {} func (x *GetAgencyHostGiftStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[283] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[287] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25072,7 +25220,7 @@ func (x *GetAgencyHostGiftStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyHostGiftStatsResponse.ProtoReflect.Descriptor instead. func (*GetAgencyHostGiftStatsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{283} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{287} } func (x *GetAgencyHostGiftStatsResponse) GetStats() *AgencyHostGiftStats { @@ -25085,24 +25233,23 @@ func (x *GetAgencyHostGiftStatsResponse) GetStats() *AgencyHostGiftStats { // PointWithdrawalCoinSellerConfig 是按 App 隔离的 POINT 提现币商白名单与兑换比例。 // 比例用整数分子/分母保存,避免浮点金额在 H5、gateway 和账本间产生舍入分歧。 type PointWithdrawalCoinSellerConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - SortOrder int32 `protobuf:"varint,3,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` - PointAmount int64 `protobuf:"varint,4,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` - SellerCoinAmount int64 `protobuf:"varint,5,opt,name=seller_coin_amount,json=sellerCoinAmount,proto3" json:"seller_coin_amount,omitempty"` - ServiceCountryCodes []string `protobuf:"bytes,6,rep,name=service_country_codes,json=serviceCountryCodes,proto3" json:"service_country_codes,omitempty"` - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` - UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + SellerUserId int64 `protobuf:"varint,2,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + SortOrder int32 `protobuf:"varint,3,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + PointAmount int64 `protobuf:"varint,4,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` + SellerCoinAmount int64 `protobuf:"varint,5,opt,name=seller_coin_amount,json=sellerCoinAmount,proto3" json:"seller_coin_amount,omitempty"` + ServiceCountryCodes []string `protobuf:"bytes,6,rep,name=service_country_codes,json=serviceCountryCodes,proto3" json:"service_country_codes,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + CreatedAtMs int64 `protobuf:"varint,8,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PointWithdrawalCoinSellerConfig) Reset() { *x = PointWithdrawalCoinSellerConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[284] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[288] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25114,7 +25261,7 @@ func (x *PointWithdrawalCoinSellerConfig) String() string { func (*PointWithdrawalCoinSellerConfig) ProtoMessage() {} func (x *PointWithdrawalCoinSellerConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[284] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[288] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25127,7 +25274,7 @@ func (x *PointWithdrawalCoinSellerConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PointWithdrawalCoinSellerConfig.ProtoReflect.Descriptor instead. func (*PointWithdrawalCoinSellerConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{284} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{288} } func (x *PointWithdrawalCoinSellerConfig) GetAppCode() string { @@ -25194,20 +25341,19 @@ func (x *PointWithdrawalCoinSellerConfig) GetUpdatedAtMs() int64 { } type ListPointWithdrawalCoinSellersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` // country_code 由 gateway 从登录用户资料注入;为空只用于 Admin/内部查询。 CountryCode string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` IncludeDisabled bool `protobuf:"varint,4,opt,name=include_disabled,json=includeDisabled,proto3" json:"include_disabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListPointWithdrawalCoinSellersRequest) Reset() { *x = ListPointWithdrawalCoinSellersRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[285] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[289] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25219,7 +25365,7 @@ func (x *ListPointWithdrawalCoinSellersRequest) String() string { func (*ListPointWithdrawalCoinSellersRequest) ProtoMessage() {} func (x *ListPointWithdrawalCoinSellersRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[285] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[289] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25232,7 +25378,7 @@ func (x *ListPointWithdrawalCoinSellersRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use ListPointWithdrawalCoinSellersRequest.ProtoReflect.Descriptor instead. func (*ListPointWithdrawalCoinSellersRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{285} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{289} } func (x *ListPointWithdrawalCoinSellersRequest) GetRequestId() string { @@ -25264,16 +25410,15 @@ func (x *ListPointWithdrawalCoinSellersRequest) GetIncludeDisabled() bool { } type ListPointWithdrawalCoinSellersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sellers []*PointWithdrawalCoinSellerConfig `protobuf:"bytes,1,rep,name=sellers,proto3" json:"sellers,omitempty"` unknownFields protoimpl.UnknownFields - - Sellers []*PointWithdrawalCoinSellerConfig `protobuf:"bytes,1,rep,name=sellers,proto3" json:"sellers,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListPointWithdrawalCoinSellersResponse) Reset() { *x = ListPointWithdrawalCoinSellersResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[286] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[290] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25285,7 +25430,7 @@ func (x *ListPointWithdrawalCoinSellersResponse) String() string { func (*ListPointWithdrawalCoinSellersResponse) ProtoMessage() {} func (x *ListPointWithdrawalCoinSellersResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[286] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[290] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25298,7 +25443,7 @@ func (x *ListPointWithdrawalCoinSellersResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use ListPointWithdrawalCoinSellersResponse.ProtoReflect.Descriptor instead. func (*ListPointWithdrawalCoinSellersResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{286} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{290} } func (x *ListPointWithdrawalCoinSellersResponse) GetSellers() []*PointWithdrawalCoinSellerConfig { @@ -25309,23 +25454,22 @@ func (x *ListPointWithdrawalCoinSellersResponse) GetSellers() []*PointWithdrawal } type TransferPointToCoinSellerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - SourceUserId int64 `protobuf:"varint,3,opt,name=source_user_id,json=sourceUserId,proto3" json:"source_user_id,omitempty"` - SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` - PointAmount int64 `protobuf:"varint,5,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandId string `protobuf:"bytes,1,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + SourceUserId int64 `protobuf:"varint,3,opt,name=source_user_id,json=sourceUserId,proto3" json:"source_user_id,omitempty"` + SellerUserId int64 `protobuf:"varint,4,opt,name=seller_user_id,json=sellerUserId,proto3" json:"seller_user_id,omitempty"` + PointAmount int64 `protobuf:"varint,5,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` // source_country_code 由 gateway 从用户资料读取,wallet 会再次校验币商服务国家。 SourceCountryCode string `protobuf:"bytes,6,opt,name=source_country_code,json=sourceCountryCode,proto3" json:"source_country_code,omitempty"` Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferPointToCoinSellerRequest) Reset() { *x = TransferPointToCoinSellerRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[287] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[291] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25337,7 +25481,7 @@ func (x *TransferPointToCoinSellerRequest) String() string { func (*TransferPointToCoinSellerRequest) ProtoMessage() {} func (x *TransferPointToCoinSellerRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[287] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[291] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25350,7 +25494,7 @@ func (x *TransferPointToCoinSellerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferPointToCoinSellerRequest.ProtoReflect.Descriptor instead. func (*TransferPointToCoinSellerRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{287} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{291} } func (x *TransferPointToCoinSellerRequest) GetCommandId() string { @@ -25403,22 +25547,21 @@ func (x *TransferPointToCoinSellerRequest) GetReason() string { } type TransferPointToCoinSellerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - SourcePointBalanceAfter int64 `protobuf:"varint,2,opt,name=source_point_balance_after,json=sourcePointBalanceAfter,proto3" json:"source_point_balance_after,omitempty"` - SellerBalanceAfter int64 `protobuf:"varint,3,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` - PointAmount int64 `protobuf:"varint,4,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` - SellerCoinAmount int64 `protobuf:"varint,5,opt,name=seller_coin_amount,json=sellerCoinAmount,proto3" json:"seller_coin_amount,omitempty"` - RatioPointAmount int64 `protobuf:"varint,6,opt,name=ratio_point_amount,json=ratioPointAmount,proto3" json:"ratio_point_amount,omitempty"` - RatioSellerCoinAmount int64 `protobuf:"varint,7,opt,name=ratio_seller_coin_amount,json=ratioSellerCoinAmount,proto3" json:"ratio_seller_coin_amount,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + SourcePointBalanceAfter int64 `protobuf:"varint,2,opt,name=source_point_balance_after,json=sourcePointBalanceAfter,proto3" json:"source_point_balance_after,omitempty"` + SellerBalanceAfter int64 `protobuf:"varint,3,opt,name=seller_balance_after,json=sellerBalanceAfter,proto3" json:"seller_balance_after,omitempty"` + PointAmount int64 `protobuf:"varint,4,opt,name=point_amount,json=pointAmount,proto3" json:"point_amount,omitempty"` + SellerCoinAmount int64 `protobuf:"varint,5,opt,name=seller_coin_amount,json=sellerCoinAmount,proto3" json:"seller_coin_amount,omitempty"` + RatioPointAmount int64 `protobuf:"varint,6,opt,name=ratio_point_amount,json=ratioPointAmount,proto3" json:"ratio_point_amount,omitempty"` + RatioSellerCoinAmount int64 `protobuf:"varint,7,opt,name=ratio_seller_coin_amount,json=ratioSellerCoinAmount,proto3" json:"ratio_seller_coin_amount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransferPointToCoinSellerResponse) Reset() { *x = TransferPointToCoinSellerResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[288] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[292] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25430,7 +25573,7 @@ func (x *TransferPointToCoinSellerResponse) String() string { func (*TransferPointToCoinSellerResponse) ProtoMessage() {} func (x *TransferPointToCoinSellerResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[288] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[292] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25443,7 +25586,7 @@ func (x *TransferPointToCoinSellerResponse) ProtoReflect() protoreflect.Message // Deprecated: Use TransferPointToCoinSellerResponse.ProtoReflect.Descriptor instead. func (*TransferPointToCoinSellerResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{288} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{292} } func (x *TransferPointToCoinSellerResponse) GetTransactionId() string { @@ -25496,19 +25639,18 @@ func (x *TransferPointToCoinSellerResponse) GetRatioSellerCoinAmount() int64 { } type GetPointWithdrawalConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + NowMs int64 `protobuf:"varint,4,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - RegionId int64 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - NowMs int64 `protobuf:"varint,4,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPointWithdrawalConfigRequest) Reset() { *x = GetPointWithdrawalConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[289] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[293] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25520,7 +25662,7 @@ func (x *GetPointWithdrawalConfigRequest) String() string { func (*GetPointWithdrawalConfigRequest) ProtoMessage() {} func (x *GetPointWithdrawalConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[289] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[293] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25533,7 +25675,7 @@ func (x *GetPointWithdrawalConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPointWithdrawalConfigRequest.ProtoReflect.Descriptor instead. func (*GetPointWithdrawalConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{289} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{293} } func (x *GetPointWithdrawalConfigRequest) GetRequestId() string { @@ -25565,20 +25707,19 @@ func (x *GetPointWithdrawalConfigRequest) GetNowMs() int64 { } type GetPointWithdrawalConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` - PointsPerUsd int64 `protobuf:"varint,2,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` - FeeBps int32 `protobuf:"varint,3,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` - MinimumPoints int64 `protobuf:"varint,4,opt,name=minimum_points,json=minimumPoints,proto3" json:"minimum_points,omitempty"` - PolicyInstanceCode string `protobuf:"bytes,5,opt,name=policy_instance_code,json=policyInstanceCode,proto3" json:"policy_instance_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Found bool `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"` + PointsPerUsd int64 `protobuf:"varint,2,opt,name=points_per_usd,json=pointsPerUsd,proto3" json:"points_per_usd,omitempty"` + FeeBps int32 `protobuf:"varint,3,opt,name=fee_bps,json=feeBps,proto3" json:"fee_bps,omitempty"` + MinimumPoints int64 `protobuf:"varint,4,opt,name=minimum_points,json=minimumPoints,proto3" json:"minimum_points,omitempty"` + PolicyInstanceCode string `protobuf:"bytes,5,opt,name=policy_instance_code,json=policyInstanceCode,proto3" json:"policy_instance_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPointWithdrawalConfigResponse) Reset() { *x = GetPointWithdrawalConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[290] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[294] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25590,7 +25731,7 @@ func (x *GetPointWithdrawalConfigResponse) String() string { func (*GetPointWithdrawalConfigResponse) ProtoMessage() {} func (x *GetPointWithdrawalConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[290] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[294] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25603,7 +25744,7 @@ func (x *GetPointWithdrawalConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPointWithdrawalConfigResponse.ProtoReflect.Descriptor instead. func (*GetPointWithdrawalConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{290} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{294} } func (x *GetPointWithdrawalConfigResponse) GetFound() bool { @@ -25643,5707 +25784,2739 @@ func (x *GetPointWithdrawalConfigResponse) GetPolicyInstanceCode() string { var File_proto_wallet_v1_wallet_proto protoreflect.FileDescriptor -var file_proto_wallet_v1_wallet_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x76, - 0x31, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x22, - 0xb8, 0x04, 0x0a, 0x10, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x73, 0x48, - 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xa5, 0x04, 0x0a, 0x16, 0x44, - 0x65, 0x62, 0x69, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, - 0x73, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, - 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0xff, 0x09, 0x0a, 0x11, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x69, 0x6c, 0x6c, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x68, 0x65, 0x61, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, - 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x68, 0x6f, 0x73, 0x74, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x12, 0x31, 0x0a, 0x15, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x67, - 0x69, 0x66, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x67, 0x69, 0x66, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, - 0x2c, 0x0a, 0x12, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x69, 0x66, - 0x74, 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, - 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x45, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, - 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x67, 0x69, 0x66, 0x74, 0x49, 0x6e, 0x63, 0x6f, - 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x16, 0x67, 0x69, 0x66, 0x74, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x12, 0x37, 0x0a, 0x18, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x15, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x15, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, - 0x1f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x1b, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x18, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xed, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x73, 0x48, - 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0xbc, 0x03, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, - 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, - 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x62, - 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, - 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, - 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, - 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x73, 0x22, 0xda, 0x02, 0x0a, 0x15, 0x44, 0x65, 0x62, 0x69, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb2, - 0x01, 0x0a, 0x0c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, - 0x0a, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, - 0x7a, 0x65, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x50, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x22, 0xaa, 0x02, 0x0a, 0x15, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x4e, 0x6f, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, - 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, - 0x35, 0x0a, 0x17, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, - 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xe9, 0x03, - 0x0a, 0x10, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x74, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x15, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x1a, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x67, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x3e, 0x0a, 0x1c, 0x72, 0x65, 0x73, 0x69, 0x64, 0x75, 0x61, - 0x6c, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x64, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x75, 0x61, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x54, 0x6f, 0x55, 0x73, - 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, - 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, - 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, - 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x20, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, - 0x0a, 0x17, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x15, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, 0x73, 0x22, 0x74, 0x0a, - 0x21, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, - 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x22, 0x9a, 0x02, 0x0a, 0x12, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x2c, - 0x0a, 0x12, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x69, 0x66, 0x74, - 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x22, 0xae, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, - 0x77, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, - 0x73, 0x22, 0x60, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x22, 0x91, 0x02, 0x0a, 0x17, 0x54, 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, - 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x1f, - 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, - 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, - 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x12, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, 0x73, 0x22, 0x86, 0x01, 0x0a, - 0x1e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xad, 0x02, 0x0a, 0x17, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, - 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x65, 0x66, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x7a, 0x0a, 0x18, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, - 0x65, 0x64, 0x69, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x22, 0xf9, 0x03, 0x0a, 0x21, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x64, 0x69, - 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x70, 0x61, 0x69, 0x64, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x69, 0x64, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, - 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x66, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x76, 0x69, 0x64, 0x65, - 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, - 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x8f, 0x03, - 0x0a, 0x22, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, - 0x61, 0x69, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, - 0x69, 0x63, 0x72, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x69, 0x64, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x39, 0x0a, 0x19, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, - 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x41, 0x73, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xd5, 0x02, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, - 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0x94, 0x04, 0x0a, 0x1e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x12, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, - 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, - 0x12, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x72, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x36, 0x0a, 0x17, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x15, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x72, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x69, 0x6e, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x20, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x1c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf8, - 0x01, 0x0a, 0x25, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x54, 0x6f, 0x43, 0x68, 0x69, 0x6c, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xed, 0x01, 0x0a, 0x26, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x54, 0x6f, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, - 0x13, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x20, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6d, - 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, - 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x55, 0x73, 0x64, 0x4d, 0x69, - 0x6e, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x50, - 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x22, 0xb0, 0x01, 0x0a, 0x2c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x78, 0x0a, 0x2d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x52, 0x05, 0x74, 0x69, 0x65, 0x72, 0x73, 0x22, 0xde, 0x01, - 0x0a, 0x1b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, - 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, - 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, - 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x92, - 0x02, 0x0a, 0x1c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x50, 0x65, 0x72, - 0x55, 0x73, 0x64, 0x22, 0xb4, 0x02, 0x0a, 0x21, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, - 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x83, 0x03, 0x0a, 0x22, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, - 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x1b, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, - 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, - 0x6e, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, - 0x50, 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6d, - 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x69, 0x6e, 0x55, 0x73, 0x64, 0x4d, 0x69, - 0x6e, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, - 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, - 0x22, 0x87, 0x02, 0x0a, 0x1d, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, - 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x22, 0xaa, 0x01, 0x0a, 0x1e, 0x46, - 0x72, 0x65, 0x65, 0x7a, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, - 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0xc6, 0x02, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x74, - 0x6c, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x61, - 0x6c, 0x61, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, - 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0xaa, 0x01, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, - 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0xc7, 0x02, - 0x0a, 0x1e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, - 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x28, - 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x1f, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x55, 0x73, 0x64, - 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0x90, 0x03, 0x0a, 0x1c, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x73, 0x73, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, - 0x65, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x66, 0x65, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x6e, 0x65, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x50, - 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, 0x62, 0x70, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x22, 0xc0, 0x02, 0x0a, 0x1d, 0x46, 0x72, 0x65, - 0x65, 0x7a, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, - 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x65, 0x65, 0x5f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x66, 0x65, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6e, 0x65, - 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x55, - 0x73, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, 0x73, 0x22, 0xcf, 0x03, 0x0a, 0x1c, - 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x66, 0x65, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, - 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, - 0x65, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, - 0x65, 0x42, 0x70, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xc0, 0x02, - 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x72, 0x6f, - 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, - 0x10, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x66, 0x65, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x73, 0x50, 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, 0x62, - 0x70, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, 0x73, - 0x22, 0xd0, 0x03, 0x0a, 0x1d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x6f, - 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x65, 0x65, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x66, 0x65, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6e, 0x65, 0x74, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x55, 0x73, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0xc1, 0x02, 0x0a, 0x1e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, - 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x5f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x66, 0x65, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, - 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x66, 0x65, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x66, 0x65, 0x65, 0x42, 0x70, 0x73, 0x22, 0xe7, 0x06, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, - 0x73, 0x61, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6e, 0x69, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, - 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, - 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, - 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xc7, 0x03, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xad, 0x03, 0x0a, 0x0d, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xd3, 0x06, 0x0a, 0x0a, - 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, - 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x68, 0x65, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x0a, - 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x11, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x22, 0xce, 0x02, 0x0a, 0x0e, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, - 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0xb7, 0x04, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, - 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, - 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x87, 0x04, 0x0a, - 0x17, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, - 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x71, - 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x71, - 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x22, 0x86, 0x03, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0d, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4a, 0x73, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xd7, 0x04, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x76, 0x6f, - 0x6b, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6b, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, - 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x8e, 0x02, 0x0a, 0x16, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa7, 0x02, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, - 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x66, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x6f, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0x4c, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x99, 0x06, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6e, 0x69, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x15, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x69, - 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x18, 0x0a, - 0x16, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xba, 0x06, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x11, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x69, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x28, 0x0a, - 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x15, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x9c, - 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa4, 0x01, - 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x1c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x49, 0x0a, - 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, - 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x6a, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x22, 0x6e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0x50, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x22, 0xcb, 0x02, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, - 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, - 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x22, 0xe6, 0x02, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, - 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xb6, 0x01, 0x0a, 0x1d, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x22, 0xbe, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0x62, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, - 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x8f, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x47, - 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x5d, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, - 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, - 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x67, 0x69, - 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x82, 0x02, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x16, - 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x22, 0xf8, 0x05, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, - 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, - 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x69, 0x66, - 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x68, 0x65, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, - 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, - 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, - 0xc3, 0x01, 0x0a, 0x1d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x22, 0xf8, 0x05, 0x0a, 0x17, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x73, - 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, - 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x68, 0x65, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, - 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, - 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, - 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x47, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x17, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x45, 0x0a, 0x12, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x67, 0x69, 0x66, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x04, 0x67, 0x69, 0x66, 0x74, 0x22, 0xb9, 0x02, 0x0a, 0x14, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xfb, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x15, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x63, - 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x18, 0x45, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x19, 0x45, - 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x94, - 0x01, 0x0a, 0x1a, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x1b, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, - 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x6e, - 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x75, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa2, - 0x01, 0x0a, 0x24, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, - 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x45, 0x71, 0x75, 0x69, 0x70, - 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x65, 0x0a, - 0x25, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x71, 0x75, - 0x69, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x71, 0x75, 0x69, - 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x05, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6a, 0x0a, 0x1a, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x8a, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x79, - 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, - 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x73, 0x12, 0x26, 0x0a, - 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x54, 0x6f, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x22, 0x81, 0x02, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x6e, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xc2, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5a, 0x0a, - 0x1f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x20, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x70, - 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x73, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x18, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, - 0x96, 0x01, 0x0a, 0x1f, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x70, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, - 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xee, 0x02, 0x0a, 0x20, 0x50, 0x75, 0x72, - 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, - 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x09, 0x73, - 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x44, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x22, 0xa1, 0x08, 0x0a, 0x0c, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, - 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, - 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x12, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x17, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x75, - 0x73, 0x65, 0x72, 0x50, 0x61, 0x69, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x69, 0x64, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x50, 0x61, 0x69, 0x64, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x17, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x65, - 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x74, 0x61, 0x78, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x61, 0x78, 0x4d, - 0x69, 0x63, 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x4d, 0x69, 0x63, - 0x72, 0x6f, 0x12, 0x29, 0x0a, 0x11, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, - 0x61, 0x69, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x93, 0x03, - 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, - 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x69, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x66, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x33, 0x0a, 0x05, 0x62, 0x69, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x52, 0x05, - 0x62, 0x69, 0x6c, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xc8, 0x02, 0x0a, 0x1d, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, - 0x6e, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x69, 0x6c, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc9, - 0x02, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, - 0x6c, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x40, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x12, 0x4b, 0x0a, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x6c, - 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x6c, 0x61, 0x79, - 0x12, 0x4b, 0x0a, 0x0b, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x0a, 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x12, 0x4b, 0x0a, - 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0a, - 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x22, 0x8b, 0x02, 0x0a, 0x11, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x16, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x31, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x12, 0x66, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x77, 0x0a, 0x20, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x73, 0x22, 0x5d, 0x0a, 0x21, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x9c, 0x02, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x7a, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x74, 0x7a, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x22, - 0xd9, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x44, 0x61, 0x69, 0x6c, 0x79, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x68, 0x69, - 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x15, - 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x5f, - 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x63, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, - 0x2c, 0x0a, 0x12, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, - 0x17, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, - 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x18, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x69, 0x6c, 0x6c, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc0, - 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, - 0x0a, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x79, - 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x75, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, - 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, - 0x12, 0x29, 0x0a, 0x11, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x75, 0x73, 0x64, 0x5f, - 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x65, 0x73, 0x74, - 0x46, 0x65, 0x65, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x65, - 0x73, 0x74, 0x5f, 0x74, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x65, 0x73, 0x74, 0x54, 0x61, 0x78, 0x55, 0x73, - 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, - 0x72, 0x22, 0x76, 0x0a, 0x1f, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0xd0, 0x02, 0x0a, 0x1f, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x4f, 0x76, 0x65, - 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x05, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x69, 0x6c, 0x79, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x05, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x12, 0x43, 0x0a, - 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x69, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x69, - 0x64, 0x12, 0x59, 0x0a, 0x0f, 0x73, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0e, 0x73, 0x61, - 0x6c, 0x61, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x22, 0x86, 0x01, 0x0a, - 0x21, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x12, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x69, 0x64, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, - 0x69, 0x63, 0x72, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x78, 0x5f, 0x6d, 0x69, 0x63, 0x72, - 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x61, 0x78, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x20, - 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x22, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x79, 0x0a, 0x12, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x64, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x22, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0d, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x59, 0x0a, 0x12, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, - 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0x71, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x22, 0xec, 0x05, 0x0a, 0x0c, 0x47, 0x69, 0x66, 0x74, 0x57, 0x61, 0x6c, - 0x6c, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x67, 0x69, 0x66, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x67, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x48, 0x65, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x22, 0x6b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x69, - 0x66, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x22, 0xef, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x69, 0x66, 0x74, - 0x57, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, - 0x66, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x67, 0x69, 0x66, 0x74, - 0x4b, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x67, 0x69, 0x66, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, - 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, - 0x69, 0x66, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x65, 0x61, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xa4, 0x06, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, - 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x2b, - 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, - 0x70, 0x70, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, - 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x1c, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x22, 0x9c, 0x03, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x75, 0x72, 0x63, - 0x68, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x75, - 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x49, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x1c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x64, 0x65, - 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9d, 0x02, 0x0a, 0x20, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1b, - 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x77, 0x0a, 0x21, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xbb, 0x03, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x63, - 0x72, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0b, - 0x61, 0x70, 0x70, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x22, 0xda, 0x03, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0b, 0x61, 0x70, 0x70, - 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, - 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, - 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, - 0xa1, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x39, 0x0a, 0x1d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xa6, 0x04, 0x0a, 0x17, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x5f, 0x77, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x70, 0x61, 0x79, 0x57, 0x61, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x79, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x75, 0x73, 0x64, 0x5f, 0x74, 0x6f, - 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x73, 0x64, 0x54, 0x6f, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, - 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xfa, - 0x01, 0x0a, 0x18, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, - 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, - 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x24, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0x6e, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x27, 0x53, 0x65, 0x74, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x1f, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x40, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x22, 0xd6, 0x01, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x14, 0x75, 0x73, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, - 0x73, 0x64, 0x54, 0x6f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x61, 0x74, 0x65, - 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x73, 0x73, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xae, 0x01, 0x0a, 0x23, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xed, 0x02, 0x0a, 0x24, 0x53, 0x79, 0x6e, 0x63, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x65, 0x74, 0x63, - 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, - 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, - 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x06, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x18, 0x48, 0x35, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x13, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x88, 0x02, 0x0a, 0x19, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x51, - 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x64, 0x74, 0x5f, 0x74, 0x72, 0x63, 0x32, 0x30, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, - 0x73, 0x64, 0x74, 0x54, 0x72, 0x63, 0x32, 0x30, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x64, 0x74, 0x5f, 0x74, 0x72, 0x63, 0x32, 0x30, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x75, 0x73, 0x64, - 0x74, 0x54, 0x72, 0x63, 0x32, 0x30, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8e, 0x08, - 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x13, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, - 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x5f, 0x77, 0x61, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, - 0x61, 0x79, 0x57, 0x61, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x27, - 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0x94, - 0x05, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, - 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x79, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x79, 0x65, - 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x65, - 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x79, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0xf6, 0x03, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, - 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, - 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x72, - 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x72, 0x6c, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x12, 0x1a, 0x0a, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x79, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x79, 0x65, - 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x61, 0x79, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x77, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x22, 0xe6, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x22, 0x7b, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, - 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xaf, 0x01, - 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, - 0x96, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x17, 0x48, 0x35, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x22, 0xe1, 0x03, 0x0a, 0x26, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x6f, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x28, 0x0a, - 0x10, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x75, 0x73, 0x64, 0x4d, 0x69, 0x6e, 0x6f, - 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x70, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x61, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0xda, 0x03, 0x0a, 0x27, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x2a, - 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x72, - 0x61, 0x77, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x1a, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x69, 0x66, - 0x61, 0x70, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, - 0x65, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x6d, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x73, 0x69, 0x67, 0x6e, 0x22, 0x79, 0x0a, 0x1b, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x69, - 0x66, 0x61, 0x70, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x54, 0x65, 0x78, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x22, - 0xf9, 0x01, 0x0a, 0x18, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x77, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x61, 0x77, 0x4a, 0x73, 0x6f, - 0x6e, 0x12, 0x4d, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x19, 0x48, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x49, 0x64, 0x22, 0xde, 0x01, 0x0a, 0x13, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6d, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x74, 0x6f, 0x5f, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x74, 0x6f, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x74, 0x6f, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x74, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x20, 0x47, - 0x65, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xfa, 0x03, 0x0a, 0x11, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x69, 0x7a, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x69, 0x7a, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, - 0x0f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, - 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x72, - 0x6f, 0x7a, 0x65, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x12, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x61, 0x72, 0x74, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x55, 0x73, 0x64, 0x4d, 0x69, 0x6e, - 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x7e, 0x0a, - 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xb1, 0x02, - 0x0a, 0x0d, 0x56, 0x69, 0x70, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, - 0x6c, 0x22, 0xdb, 0x04, 0x0a, 0x10, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x32, - 0x0a, 0x15, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x75, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x6f, 0x77, 0x6e, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, - 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x64, 0x6f, 0x77, 0x6e, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, - 0x0a, 0x1a, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x18, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, - 0x69, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, - 0x72, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xe0, 0x03, 0x0a, 0x0a, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x65, 0x6e, - 0x65, 0x66, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, - 0x65, 0x71, 0x75, 0x69, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, - 0x6f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x22, 0xdc, 0x05, 0x0a, 0x08, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x73, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x0c, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x34, 0x0a, 0x16, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x14, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x47, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x1d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x75, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4c, 0x6f, 0x63, - 0x6b, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x37, 0x0a, 0x08, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x18, 0x10, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, - 0x52, 0x08, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x9a, 0x02, 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa5, - 0x04, 0x0a, 0x0c, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, - 0x64, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, - 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, - 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x32, 0x0a, 0x15, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, - 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x0f, 0x56, 0x69, 0x70, 0x55, 0x73, - 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x16, 0x72, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x63, - 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x19, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xfd, - 0x03, 0x0a, 0x08, 0x56, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x70, - 0x61, 0x69, 0x64, 0x5f, 0x76, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x52, 0x07, 0x70, 0x61, 0x69, 0x64, 0x56, 0x69, 0x70, - 0x12, 0x4d, 0x0a, 0x13, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x11, 0x65, 0x71, - 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, - 0x3d, 0x0a, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x69, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, - 0x52, 0x0c, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x69, 0x70, 0x12, 0x29, - 0x0a, 0x10, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, - 0x69, 0x74, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x42, 0x65, 0x6e, - 0x65, 0x66, 0x69, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x48, 0x0a, - 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x6b, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x70, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x86, 0x02, 0x0a, 0x17, - 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x70, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x76, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, - 0x69, 0x70, 0x12, 0x35, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x64, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, - 0x0a, 0x03, 0x76, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x56, 0x69, 0x70, 0x52, 0x03, 0x76, 0x69, 0x70, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x7d, 0x0a, 0x12, 0x50, - 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x56, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xc4, 0x02, 0x0a, 0x13, 0x50, - 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x76, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x52, 0x03, 0x76, 0x69, 0x70, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, - 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, - 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x62, 0x69, 0x74, 0x43, 0x50, 0x42, 0x72, 0x65, - 0x61, 0x6b, 0x75, 0x70, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc8, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x62, 0x69, - 0x74, 0x43, 0x50, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x75, 0x70, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x62, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, - 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, - 0x61, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x64, 0x72, 0x61, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xc5, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, - 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x63, 0x6f, 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x0f, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xff, 0x01, 0x0a, 0x10, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x76, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x52, 0x03, 0x76, 0x69, 0x70, - 0x12, 0x41, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x56, 0x0a, 0x1a, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, - 0x08, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x52, 0x08, 0x62, 0x65, - 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xc3, 0x01, 0x0a, - 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x39, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x1a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3e, 0x0a, - 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x16, 0x72, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, - 0x1c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x19, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x88, 0x01, 0x01, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x56, - 0x69, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x56, 0x69, 0x70, 0x44, 0x61, - 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, - 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x64, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x44, - 0x61, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x61, 0x79, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x64, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x5f, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x61, 0x79, 0x45, 0x6e, 0x64, - 0x4d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xe9, 0x03, 0x0a, 0x12, - 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, - 0x44, 0x61, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x70, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x19, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x69, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x25, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, - 0x65, 0x62, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, - 0x61, 0x73, 0x6b, 0x44, 0x61, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x26, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, - 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x03, 0x72, 0x75, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x63, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x7a, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, - 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x75, - 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, - 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x27, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, - 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x28, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x56, - 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, - 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x07, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x90, 0x01, 0x0a, - 0x1e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x49, 0x64, 0x22, - 0xed, 0x01, 0x0a, 0x1f, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, - 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x62, 0x61, 0x74, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0c, 0x63, 0x6f, 0x69, 0x6e, 0x5f, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x63, 0x6f, - 0x69, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, - 0xcc, 0x02, 0x0a, 0x18, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x22, 0xb0, - 0x01, 0x0a, 0x19, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, - 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, - 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x45, 0x71, 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb0, 0x01, 0x0a, 0x19, 0x45, 0x71, 0x75, - 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x43, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x6f, 0x0a, 0x1a, 0x55, - 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x94, 0x01, 0x0a, - 0x1b, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x75, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x75, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x69, 0x70, - 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x69, - 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x07, 0x62, 0x65, - 0x6e, 0x65, 0x66, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, - 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x52, 0x07, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, - 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6e, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x76, 0x61, 0x6c, 0x75, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, - 0xea, 0x02, 0x0a, 0x12, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x41, 0x0a, 0x1d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, - 0x69, 0x74, 0x52, 0x08, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x22, 0x55, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x48, 0x0a, 0x0e, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xbe, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x3b, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x10, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x12, 0x48, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x70, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa8, 0x02, 0x0a, 0x17, 0x43, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xdd, - 0x02, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x66, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x66, 0x74, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x22, 0xbb, - 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xb4, 0x02, 0x0a, - 0x18, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x68, - 0x65, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x68, - 0x65, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x57, 0x68, - 0x65, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x90, 0x03, - 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x74, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, - 0x64, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x6e, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x65, - 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x69, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x22, 0xbe, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, - 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0xe7, 0x02, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x69, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x69, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xc0, 0x01, 0x0a, 0x22, - 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xcb, - 0x02, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, - 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x61, - 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x6e, - 0x6b, 0x4e, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xbf, 0x01, 0x0a, - 0x21, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x9a, - 0x03, 0x0a, 0x1a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa3, 0x01, 0x0a, 0x1b, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, - 0x66, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x22, 0x9f, 0x03, 0x0a, 0x0f, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x30, - 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x69, 0x6c, 0x79, - 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0e, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x53, 0x65, 0x6e, 0x64, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x75, 0x6c, 0x65, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, - 0x55, 0x72, 0x6c, 0x22, 0xee, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x4d, 0x73, 0x22, 0xa0, 0x06, 0x0a, 0x09, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, - 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x61, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x6e, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x70, - 0x65, 0x6e, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x42, 0x79, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x12, 0x2e, - 0x0a, 0x13, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, - 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x75, 0x6e, - 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x75, 0x6e, - 0x64, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x55, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x7c, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xfe, 0x02, 0x0a, - 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x69, 0x65, - 0x72, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x65, - 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x28, - 0x0a, 0x10, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x53, - 0x65, 0x6e, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x7f, 0x0a, - 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xb4, - 0x02, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, - 0x22, 0xa6, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xce, 0x01, 0x0a, 0x16, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xf9, 0x02, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, - 0x70, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0x72, 0x0a, 0x17, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, - 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x66, 0x75, 0x6e, - 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, - 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xc3, 0x02, 0x0a, 0x10, - 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, - 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x74, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x74, 0x6c, 0x4d, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x74, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0xae, 0x04, 0x0a, 0x19, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, - 0x61, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x70, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, - 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x82, 0x02, 0x0a, 0x25, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, - 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x22, 0x82, 0x01, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x58, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, - 0x39, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8d, 0x01, 0x0a, 0x10, 0x48, - 0x6f, 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x65, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x45, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x69, 0x66, 0x74, 0x5f, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x67, - 0x69, 0x66, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x22, 0xb4, 0x01, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, - 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, - 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x15, 0x41, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x63, 0x6f, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x65, 0x49, - 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x65, 0x64, 0x5f, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xc8, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x2f, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, - 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x4d, 0x73, - 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x60, 0x0a, 0x20, - 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x62, - 0x0a, 0x13, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x6e, - 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x69, 0x66, 0x74, - 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x69, 0x66, 0x74, 0x65, 0x64, - 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x67, 0x69, 0x66, 0x74, 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0xb9, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, - 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x6d, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, - 0x4d, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0x5c, - 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, - 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0xe6, 0x02, 0x0a, - 0x1f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, - 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, - 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, - 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, - 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x4d, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x74, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x22, 0x93, 0x02, - 0x0a, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, - 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x22, 0xf1, 0x02, 0x0a, 0x21, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, - 0x14, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, - 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x69, - 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, - 0x0a, 0x18, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x15, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x69, - 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x20, 0x47, 0x65, - 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x55, 0x73, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, - 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x65, 0x65, - 0x42, 0x70, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x69, 0x6e, - 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x32, 0xf4, 0x03, 0x0a, - 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x25, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x6f, 0x73, - 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x53, 0x65, 0x74, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x72, 0x0a, 0x29, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x6f, 0x73, - 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x48, 0x61, 0x6c, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, - 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, - 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x4d, 0x6f, 0x6e, 0x74, 0x68, - 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x6f, 0x6e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x91, 0x01, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x56, 0x69, 0x70, 0x44, 0x61, - 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x56, 0x69, 0x70, 0x44, - 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, - 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0xe9, 0x70, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x12, 0x21, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x44, 0x65, 0x62, - 0x69, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x47, 0x69, 0x66, 0x74, 0x12, 0x27, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x62, 0x69, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x12, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x62, 0x69, 0x74, - 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, - 0x44, 0x65, 0x62, 0x69, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x69, 0x66, 0x74, 0x12, 0x26, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x69, 0x66, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x70, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, - 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, - 0x73, 0x74, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, - 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, - 0x6c, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x61, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, - 0x64, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, - 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x72, - 0x65, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x43, 0x6f, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x43, 0x6f, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x1e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, - 0x63, 0x6b, 0x54, 0x6f, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x6f, 0x63, 0x6b, 0x54, 0x6f, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x54, 0x6f, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x25, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, - 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x54, 0x69, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, - 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x54, 0x6f, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x91, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, - 0x65, 0x72, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x46, 0x72, - 0x65, 0x65, 0x7a, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x53, 0x61, 0x6c, - 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x53, 0x61, 0x6c, - 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x53, - 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, - 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7c, 0x0a, 0x17, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, - 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x2f, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x61, 0x6c, 0x61, 0x72, 0x79, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, - 0x0a, 0x15, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, - 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, - 0x0a, 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5b, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, - 0x11, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5b, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, - 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x67, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x70, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, - 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x66, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5e, 0x0a, 0x0d, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x25, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x68, 0x0a, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x13, 0x52, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x45, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, - 0x0a, 0x13, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x8e, 0x01, 0x0a, 0x1d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x45, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x45, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x76, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x91, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x50, - 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x18, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x73, 0x12, 0x29, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, - 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x2f, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x4f, - 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, - 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x57, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x29, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, - 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x69, 0x66, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x12, - 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x69, 0x66, 0x74, 0x57, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x47, 0x69, 0x66, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, - 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x70, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2d, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, 0x01, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, - 0x35, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, - 0x01, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x84, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, - 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, - 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x1c, 0x53, 0x79, 0x6e, 0x63, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x35, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x35, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x35, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2d, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, - 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, - 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x88, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x12, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x54, - 0x78, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x35, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x48, 0x35, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x35, 0x52, 0x65, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x1f, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x6c, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x13, 0x48, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x69, 0x66, 0x61, 0x70, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x69, 0x66, 0x61, 0x70, 0x61, - 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x69, 0x66, 0x61, 0x70, 0x61, 0x79, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, - 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x35, 0x50, 0x61, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x70, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, - 0x70, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x70, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, - 0x56, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x79, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, - 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, - 0x12, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, - 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x56, 0x69, 0x70, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x56, - 0x69, 0x70, 0x12, 0x23, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x56, 0x69, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, - 0x11, 0x44, 0x65, 0x62, 0x69, 0x74, 0x43, 0x50, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x75, 0x70, 0x46, - 0x65, 0x65, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x43, 0x50, 0x42, 0x72, 0x65, 0x61, - 0x6b, 0x75, 0x70, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x62, 0x69, 0x74, 0x43, 0x50, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x75, 0x70, 0x46, 0x65, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x44, 0x65, 0x62, - 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x12, 0x26, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x62, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x08, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x12, 0x20, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x56, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x56, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, - 0x11, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x45, 0x71, 0x75, - 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x29, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x71, 0x75, 0x69, - 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x13, 0x55, 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, - 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x2b, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x65, 0x71, 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x65, 0x71, - 0x75, 0x69, 0x70, 0x56, 0x69, 0x70, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x2a, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x2c, - 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x68, - 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x1b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x56, 0x69, - 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x79, 0x56, 0x69, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2b, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, - 0x4d, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, - 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x12, 0x36, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, - 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x97, 0x01, 0x0a, - 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, - 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x12, 0x38, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, - 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x79, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, - 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x17, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, - 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x12, 0x2f, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, 0x6c, - 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x70, 0x44, 0x61, 0x69, - 0x6c, 0x79, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, - 0x15, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x4c, - 0x75, 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x57, - 0x68, 0x65, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x29, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x64, 0x69, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x57, 0x68, - 0x65, 0x65, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7f, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, - 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x30, 0x2e, - 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x12, 0x32, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x19, 0x43, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x31, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x64, 0x69, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x70, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x61, - 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x76, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, - 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, - 0x0a, 0x0e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x68, 0x79, - 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x24, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x79, 0x61, - 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x67, 0x0a, 0x10, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x65, - 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x75, - 0x6e, 0x64, 0x12, 0x2c, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x2a, 0x5a, 0x28, 0x68, 0x79, 0x61, 0x70, 0x70, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, - 0x76, 0x31, 0x3b, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} +const file_proto_wallet_v1_wallet_proto_rawDesc = "" + + "\n" + + "\x1cproto/wallet/v1/wallet.proto\x12\x0fhyapp.wallet.v1\"\xb8\x04\n" + + "\x10DebitGiftRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x05R\tgiftCount\x12#\n" + + "\rprice_version\x18\a \x01(\tR\fpriceVersion\x12\x19\n" + + "\bapp_code\x18\b \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\t \x01(\x03R\bregionId\x12$\n" + + "\x0etarget_is_host\x18\n" + + " \x01(\bR\ftargetIsHost\x121\n" + + "\x15target_host_region_id\x18\v \x01(\x03R\x12targetHostRegionId\x12<\n" + + "\x1btarget_agency_owner_user_id\x18\f \x01(\x03R\x17targetAgencyOwnerUserId\x12(\n" + + "\x10sender_region_id\x18\r \x01(\x03R\x0esenderRegionId\x12%\n" + + "\x0eentitlement_id\x18\x0e \x01(\tR\rentitlementId\x12#\n" + + "\rcharge_source\x18\x0f \x01(\tR\fchargeSource\"\xa5\x04\n" + + "\x16DebitDirectGiftRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0esender_user_id\x18\x02 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x04 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x05 \x01(\x05R\tgiftCount\x12#\n" + + "\rprice_version\x18\x06 \x01(\tR\fpriceVersion\x12\x19\n" + + "\bapp_code\x18\a \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\b \x01(\x03R\bregionId\x12(\n" + + "\x10sender_region_id\x18\t \x01(\x03R\x0esenderRegionId\x12$\n" + + "\x0etarget_is_host\x18\n" + + " \x01(\bR\ftargetIsHost\x121\n" + + "\x15target_host_region_id\x18\v \x01(\x03R\x12targetHostRegionId\x12<\n" + + "\x1btarget_agency_owner_user_id\x18\f \x01(\x03R\x17targetAgencyOwnerUserId\x12%\n" + + "\x0eentitlement_id\x18\r \x01(\tR\rentitlementId\x12#\n" + + "\rcharge_source\x18\x0e \x01(\tR\fchargeSource\"\xff\t\n" + + "\x11DebitGiftResponse\x12,\n" + + "\x12billing_receipt_id\x18\x01 \x01(\tR\x10billingReceiptId\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x03 \x01(\x03R\tcoinSpent\x12(\n" + + "\x10gift_point_added\x18\x04 \x01(\x03R\x0egiftPointAdded\x12\x1d\n" + + "\n" + + "heat_value\x18\x05 \x01(\x03R\theatValue\x12#\n" + + "\rprice_version\x18\x06 \x01(\tR\fpriceVersion\x12#\n" + + "\rbalance_after\x18\a \x01(\x03R\fbalanceAfter\x12*\n" + + "\x11charge_asset_type\x18\b \x01(\tR\x0fchargeAssetType\x12#\n" + + "\rcharge_amount\x18\t \x01(\x03R\fchargeAmount\x12$\n" + + "\x0egift_type_code\x18\n" + + " \x01(\tR\fgiftTypeCode\x129\n" + + "\x19host_period_diamond_added\x18\v \x01(\x03R\x16hostPeriodDiamondAdded\x121\n" + + "\x15host_period_cycle_key\x18\f \x01(\tR\x12hostPeriodCycleKey\x12(\n" + + "\x10cp_relation_type\x18\r \x01(\tR\x0ecpRelationType\x12\x1b\n" + + "\tgift_name\x18\x0e \x01(\tR\bgiftName\x12\"\n" + + "\rgift_icon_url\x18\x0f \x01(\tR\vgiftIconUrl\x12,\n" + + "\x12gift_animation_url\x18\x10 \x01(\tR\x10giftAnimationUrl\x12*\n" + + "\x11gift_effect_types\x18\x11 \x03(\tR\x0fgiftEffectTypes\x12%\n" + + "\x0eentitlement_id\x18\x12 \x01(\tR\rentitlementId\x12#\n" + + "\rcharge_source\x18\x13 \x01(\tR\fchargeSource\x125\n" + + "\x17gift_income_coin_amount\x18\x14 \x01(\x03R\x14giftIncomeCoinAmount\x129\n" + + "\x19gift_income_balance_after\x18\x15 \x01(\x03R\x16giftIncomeBalanceAfter\x12(\n" + + "\x10host_point_added\x18\x16 \x01(\x03R\x0ehostPointAdded\x127\n" + + "\x18host_point_balance_after\x18\x17 \x01(\x03R\x15hostPointBalanceAfter\x121\n" + + "\x15host_point_asset_type\x18\x18 \x01(\tR\x12hostPointAssetType\x12D\n" + + "\x1fhost_point_policy_instance_code\x18\x19 \x01(\tR\x1bhostPointPolicyInstanceCode\x127\n" + + "\x18host_point_template_code\x18\x1a \x01(\tR\x15hostPointTemplateCode\x12=\n" + + "\x1bhost_point_template_version\x18\x1b \x01(\tR\x18hostPointTemplateVersion\x12'\n" + + "\x0fbalance_version\x18\x1c \x01(\x03R\x0ebalanceVersion\"\xed\x01\n" + + "\x0fDebitGiftTarget\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12$\n" + + "\x0etarget_is_host\x18\x03 \x01(\bR\ftargetIsHost\x121\n" + + "\x15target_host_region_id\x18\x04 \x01(\x03R\x12targetHostRegionId\x12<\n" + + "\x1btarget_agency_owner_user_id\x18\x05 \x01(\x03R\x17targetAgencyOwnerUserId\"\xbc\x03\n" + + "\x15BatchDebitGiftRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12\x17\n" + + "\agift_id\x18\x04 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x05 \x01(\x05R\tgiftCount\x12#\n" + + "\rprice_version\x18\x06 \x01(\tR\fpriceVersion\x12\x19\n" + + "\bapp_code\x18\a \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\b \x01(\x03R\bregionId\x12(\n" + + "\x10sender_region_id\x18\t \x01(\x03R\x0esenderRegionId\x12:\n" + + "\atargets\x18\n" + + " \x03(\v2 .hyapp.wallet.v1.DebitGiftTargetR\atargets\x12%\n" + + "\x0eentitlement_id\x18\v \x01(\tR\rentitlementId\x12#\n" + + "\rcharge_source\x18\f \x01(\tR\fchargeSource\"\x9a\x01\n" + + "\x15BatchDebitGiftReceipt\x12$\n" + + "\x0etarget_user_id\x18\x01 \x01(\x03R\ftargetUserId\x12\x1d\n" + + "\n" + + "command_id\x18\x02 \x01(\tR\tcommandId\x12<\n" + + "\abilling\x18\x03 \x01(\v2\".hyapp.wallet.v1.DebitGiftResponseR\abilling\"\x9e\x01\n" + + "\x16BatchDebitGiftResponse\x12@\n" + + "\taggregate\x18\x01 \x01(\v2\".hyapp.wallet.v1.DebitGiftResponseR\taggregate\x12B\n" + + "\breceipts\x18\x02 \x03(\v2&.hyapp.wallet.v1.BatchDebitGiftReceiptR\breceipts\"\xda\x02\n" + + "\x15DebitRobotGiftRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + + "\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\agift_id\x18\x05 \x01(\tR\x06giftId\x12\x1d\n" + + "\n" + + "gift_count\x18\x06 \x01(\x05R\tgiftCount\x12#\n" + + "\rprice_version\x18\a \x01(\tR\fpriceVersion\x12\x19\n" + + "\bapp_code\x18\b \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\t \x01(\x03R\bregionId\x12(\n" + + "\x10sender_region_id\x18\n" + + " \x01(\x03R\x0esenderRegionId\"\xb2\x01\n" + + "\fAssetBalance\x12\x1d\n" + + "\n" + + "asset_type\x18\x01 \x01(\tR\tassetType\x12)\n" + + "\x10available_amount\x18\x02 \x01(\x03R\x0favailableAmount\x12#\n" + + "\rfrozen_amount\x18\x03 \x01(\x03R\ffrozenAmount\x12\x18\n" + + "\aversion\x18\x04 \x01(\x03R\aversion\x12\x19\n" + + "\bapp_code\x18\x05 \x01(\tR\aappCode\"\x88\x01\n" + + "\x12GetBalancesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1f\n" + + "\vasset_types\x18\x03 \x03(\tR\n" + + "assetTypes\x12\x19\n" + + "\bapp_code\x18\x04 \x01(\tR\aappCode\"P\n" + + "\x13GetBalancesResponse\x129\n" + + "\bbalances\x18\x01 \x03(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\bbalances\"\xaa\x02\n" + + "\x15HostSalaryPolicyLevel\x12\x19\n" + + "\blevel_no\x18\x01 \x01(\x05R\alevelNo\x12+\n" + + "\x11required_diamonds\x18\x02 \x01(\x03R\x10requiredDiamonds\x121\n" + + "\x15host_salary_usd_minor\x18\x03 \x01(\x03R\x12hostSalaryUsdMinor\x12(\n" + + "\x10host_coin_reward\x18\x04 \x01(\x03R\x0ehostCoinReward\x125\n" + + "\x17agency_salary_usd_minor\x18\x05 \x01(\x03R\x14agencySalaryUsdMinor\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\"\xe9\x03\n" + + "\x10HostSalaryPolicy\x12\x1b\n" + + "\tpolicy_id\x18\x01 \x01(\x04R\bpolicyId\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12'\n" + + "\x0fsettlement_mode\x18\x05 \x01(\tR\x0esettlementMode\x126\n" + + "\x17settlement_trigger_mode\x18\x06 \x01(\tR\x15settlementTriggerMode\x12:\n" + + "\x1agift_coin_to_diamond_ratio\x18\a \x01(\tR\x16giftCoinToDiamondRatio\x12>\n" + + "\x1cresidual_diamond_to_usd_rate\x18\b \x01(\tR\x18residualDiamondToUsdRate\x12*\n" + + "\x11effective_from_ms\x18\t \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\n" + + " \x01(\x03R\reffectiveToMs\x12>\n" + + "\x06levels\x18\v \x03(\v2&.hyapp.wallet.v1.HostSalaryPolicyLevelR\x06levels\"\xf1\x01\n" + + " GetActiveHostSalaryPolicyRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12'\n" + + "\x0fsettlement_mode\x18\x04 \x01(\tR\x0esettlementMode\x126\n" + + "\x17settlement_trigger_mode\x18\x05 \x01(\tR\x15settlementTriggerMode\x12\x15\n" + + "\x06now_ms\x18\x06 \x01(\x03R\x05nowMs\"t\n" + + "!GetActiveHostSalaryPolicyResponse\x12\x14\n" + + "\x05found\x18\x01 \x01(\bR\x05found\x129\n" + + "\x06policy\x18\x02 \x01(\v2!.hyapp.wallet.v1.HostSalaryPolicyR\x06policy\"\x9a\x02\n" + + "\x12HostSalaryProgress\x12 \n" + + "\fhost_user_id\x18\x01 \x01(\x03R\n" + + "hostUserId\x12\x1b\n" + + "\tcycle_key\x18\x02 \x01(\tR\bcycleKey\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12/\n" + + "\x14agency_owner_user_id\x18\x04 \x01(\x03R\x11agencyOwnerUserId\x12%\n" + + "\x0etotal_diamonds\x18\x05 \x01(\x03R\rtotalDiamonds\x12,\n" + + "\x12gift_diamond_total\x18\x06 \x01(\x03R\x10giftDiamondTotal\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xae\x01\n" + + "\x1cGetHostSalaryProgressRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12 \n" + + "\fhost_user_id\x18\x03 \x01(\x03R\n" + + "hostUserId\x12\x1b\n" + + "\tcycle_key\x18\x04 \x01(\tR\bcycleKey\x12\x15\n" + + "\x06now_ms\x18\x05 \x01(\x03R\x05nowMs\"`\n" + + "\x1dGetHostSalaryProgressResponse\x12?\n" + + "\bprogress\x18\x01 \x01(\v2#.hyapp.wallet.v1.HostSalaryProgressR\bprogress\"\x91\x02\n" + + "\x17TeamHostSalaryCycleStat\x12\x1b\n" + + "\tcycle_key\x18\x01 \x01(\tR\bcycleKey\x12D\n" + + "\x1festimated_host_salary_usd_minor\x18\x02 \x01(\x03R\x1bestimatedHostSalaryUsdMinor\x12@\n" + + "\x1dsettled_host_salary_usd_minor\x18\x03 \x01(\x03R\x19settledHostSalaryUsdMinor\x12*\n" + + "\x11active_host_count\x18\x04 \x01(\x05R\x0factiveHostCount\x12%\n" + + "\x0etotal_diamonds\x18\x05 \x01(\x03R\rtotalDiamonds\"\xc2\x01\n" + + "\x1dGetTeamHostSalaryStatsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x121\n" + + "\x15agency_owner_user_ids\x18\x03 \x03(\x03R\x12agencyOwnerUserIds\x12\x1d\n" + + "\n" + + "cycle_keys\x18\x04 \x03(\tR\tcycleKeys\x12\x15\n" + + "\x06now_ms\x18\x05 \x01(\x03R\x05nowMs\"\x86\x01\n" + + "\x1eGetTeamHostSalaryStatsResponse\x12>\n" + + "\x05stats\x18\x01 \x03(\v2(.hyapp.wallet.v1.TeamHostSalaryCycleStatR\x05stats\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xad\x02\n" + + "\x17AdminCreditAssetRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0etarget_user_id\x18\x02 \x01(\x03R\ftargetUserId\x12\x1d\n" + + "\n" + + "asset_type\x18\x03 \x01(\tR\tassetType\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\x12!\n" + + "\fevidence_ref\x18\a \x01(\tR\vevidenceRef\x12\x19\n" + + "\bapp_code\x18\b \x01(\tR\aappCode\x12\x16\n" + + "\x06remark\x18\t \x01(\tR\x06remark\"z\n" + + "\x18AdminCreditAssetResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\"\xf9\x03\n" + + "!AdminCreditCoinSellerStockRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0eseller_user_id\x18\x02 \x01(\x03R\fsellerUserId\x12\x1d\n" + + "\n" + + "stock_type\x18\x03 \x01(\tR\tstockType\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12,\n" + + "\x12paid_currency_code\x18\x05 \x01(\tR\x10paidCurrencyCode\x12*\n" + + "\x11paid_amount_micro\x18\x06 \x01(\x03R\x0fpaidAmountMicro\x12\x1f\n" + + "\vpayment_ref\x18\a \x01(\tR\n" + + "paymentRef\x12!\n" + + "\fevidence_ref\x18\b \x01(\tR\vevidenceRef\x12(\n" + + "\x10operator_user_id\x18\t \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\n" + + " \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\v \x01(\tR\aappCode\x12*\n" + + "\x11seller_country_id\x18\f \x01(\x03R\x0fsellerCountryId\x12(\n" + + "\x10seller_region_id\x18\r \x01(\x03R\x0esellerRegionId\"\x8f\x03\n" + + "\"AdminCreditCoinSellerStockResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12$\n" + + "\x0eseller_user_id\x18\x02 \x01(\x03R\fsellerUserId\x12\x1d\n" + + "\n" + + "stock_type\x18\x03 \x01(\tR\tstockType\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12,\n" + + "\x12paid_currency_code\x18\x05 \x01(\tR\x10paidCurrencyCode\x12*\n" + + "\x11paid_amount_micro\x18\x06 \x01(\x03R\x0fpaidAmountMicro\x129\n" + + "\x19counts_as_seller_recharge\x18\a \x01(\bR\x16countsAsSellerRecharge\x12#\n" + + "\rbalance_after\x18\b \x01(\x03R\fbalanceAfter\x12\"\n" + + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\"\xd5\x02\n" + + "\x1dTransferCoinFromSellerRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0eseller_user_id\x18\x02 \x01(\x03R\fsellerUserId\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\x06 \x01(\tR\aappCode\x12(\n" + + "\x10seller_region_id\x18\a \x01(\x03R\x0esellerRegionId\x12(\n" + + "\x10target_region_id\x18\b \x01(\x03R\x0etargetRegionId\x12*\n" + + "\x11target_country_id\x18\t \x01(\x03R\x0ftargetCountryId\"\x94\x04\n" + + "\x1eTransferCoinFromSellerResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x120\n" + + "\x14seller_balance_after\x18\x02 \x01(\x03R\x12sellerBalanceAfter\x120\n" + + "\x14target_balance_after\x18\x03 \x01(\x03R\x12targetBalanceAfter\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12,\n" + + "\x12recharge_usd_minor\x18\x05 \x01(\x03R\x10rechargeUsdMinor\x124\n" + + "\x16recharge_currency_code\x18\x06 \x01(\tR\x14rechargeCurrencyCode\x12,\n" + + "\x12recharge_policy_id\x18\a \x01(\x03R\x10rechargePolicyId\x126\n" + + "\x17recharge_policy_version\x18\b \x01(\tR\x15rechargePolicyVersion\x12=\n" + + "\x1brecharge_policy_coin_amount\x18\t \x01(\x03R\x18rechargePolicyCoinAmount\x12F\n" + + " recharge_policy_usd_minor_amount\x18\n" + + " \x01(\x03R\x1crechargePolicyUsdMinorAmount\"\xf8\x01\n" + + "%TransferCoinSellerStockToChildRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0eparent_user_id\x18\x02 \x01(\x03R\fparentUserId\x12\"\n" + + "\rchild_user_id\x18\x03 \x01(\x03R\vchildUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\x06 \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\a \x01(\x03R\bregionId\"\xed\x01\n" + + "&TransferCoinSellerStockToChildResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x120\n" + + "\x14parent_balance_after\x18\x02 \x01(\x03R\x12parentBalanceAfter\x12.\n" + + "\x13child_balance_after\x18\x03 \x01(\x03R\x11childBalanceAfter\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\"\n" + + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\"\x84\x02\n" + + " CoinSellerSalaryExchangeRateTier\x12\x1b\n" + + "\tregion_id\x18\x01 \x01(\x03R\bregionId\x12\"\n" + + "\rmin_usd_minor\x18\x02 \x01(\x03R\vminUsdMinor\x12\"\n" + + "\rmax_usd_minor\x18\x03 \x01(\x03R\vmaxUsdMinor\x12 \n" + + "\fcoin_per_usd\x18\x04 \x01(\x03R\n" + + "coinPerUsd\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\x06 \x01(\x05R\tsortOrder\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\"\xb0\x01\n" + + ",ListCoinSellerSalaryExchangeRateTiersRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12)\n" + + "\x10include_disabled\x18\x04 \x01(\bR\x0fincludeDisabled\"x\n" + + "-ListCoinSellerSalaryExchangeRateTiersResponse\x12G\n" + + "\x05tiers\x18\x01 \x03(\v21.hyapp.wallet.v1.CoinSellerSalaryExchangeRateTierR\x05tiers\"\xde\x01\n" + + "\x1bExchangeSalaryToCoinRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12*\n" + + "\x11salary_asset_type\x18\x03 \x01(\tR\x0fsalaryAssetType\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\x06 \x01(\tR\aappCode\"\x92\x02\n" + + "\x1cExchangeSalaryToCoinResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x120\n" + + "\x14salary_balance_after\x18\x02 \x01(\x03R\x12salaryBalanceAfter\x12,\n" + + "\x12coin_balance_after\x18\x03 \x01(\x03R\x10coinBalanceAfter\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12 \n" + + "\fcoin_per_usd\x18\x06 \x01(\x03R\n" + + "coinPerUsd\"\xb4\x02\n" + + "!TransferSalaryToCoinSellerRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12$\n" + + "\x0esource_user_id\x18\x02 \x01(\x03R\fsourceUserId\x12$\n" + + "\x0eseller_user_id\x18\x03 \x01(\x03R\fsellerUserId\x12*\n" + + "\x11salary_asset_type\x18\x04 \x01(\tR\x0fsalaryAssetType\x12(\n" + + "\x10salary_usd_minor\x18\x05 \x01(\x03R\x0esalaryUsdMinor\x12\x1b\n" + + "\tregion_id\x18\x06 \x01(\x03R\bregionId\x12\x16\n" + + "\x06reason\x18\a \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\b \x01(\tR\aappCode\"\x83\x03\n" + + "\"TransferSalaryToCoinSellerResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12=\n" + + "\x1bsource_salary_balance_after\x18\x02 \x01(\x03R\x18sourceSalaryBalanceAfter\x120\n" + + "\x14seller_balance_after\x18\x03 \x01(\x03R\x12sellerBalanceAfter\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12 \n" + + "\fcoin_per_usd\x18\x06 \x01(\x03R\n" + + "coinPerUsd\x12+\n" + + "\x12rate_min_usd_minor\x18\a \x01(\x03R\x0frateMinUsdMinor\x12+\n" + + "\x12rate_max_usd_minor\x18\b \x01(\x03R\x0frateMaxUsdMinor\"\x87\x02\n" + + "\x1dFreezeSalaryWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12*\n" + + "\x11salary_asset_type\x18\x03 \x01(\tR\x0fsalaryAssetType\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\x06 \x01(\tR\aappCode\x12%\n" + + "\x0ewithdrawal_ref\x18\a \x01(\tR\rwithdrawalRef\"\xaa\x01\n" + + "\x1eFreezeSalaryWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12(\n" + + "\x10salary_usd_minor\x18\x03 \x01(\x03R\x0esalaryUsdMinor\"\xc6\x02\n" + + "\x1dSettleSalaryWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12*\n" + + "\x11salary_asset_type\x18\x03 \x01(\tR\x0fsalaryAssetType\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\a \x01(\tR\aappCode\x12:\n" + + "\x19withdrawal_application_id\x18\b \x01(\tR\x17withdrawalApplicationId\"\xaa\x01\n" + + "\x1eSettleSalaryWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12(\n" + + "\x10salary_usd_minor\x18\x03 \x01(\x03R\x0esalaryUsdMinor\"\xc7\x02\n" + + "\x1eReleaseSalaryWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12*\n" + + "\x11salary_asset_type\x18\x03 \x01(\tR\x0fsalaryAssetType\x12(\n" + + "\x10salary_usd_minor\x18\x04 \x01(\x03R\x0esalaryUsdMinor\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\x06 \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\a \x01(\tR\aappCode\x12:\n" + + "\x19withdrawal_application_id\x18\b \x01(\tR\x17withdrawalApplicationId\"\xab\x01\n" + + "\x1fReleaseSalaryWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12(\n" + + "\x10salary_usd_minor\x18\x03 \x01(\x03R\x0esalaryUsdMinor\"\x90\x03\n" + + "\x1cFreezePointWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "asset_type\x18\x03 \x01(\tR\tassetType\x12,\n" + + "\x12gross_point_amount\x18\x04 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x05 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x06 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\a \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\b \x01(\x05R\x06feeBps\x12\x16\n" + + "\x06reason\x18\t \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\n" + + " \x01(\tR\aappCode\x12%\n" + + "\x0ewithdrawal_ref\x18\v \x01(\tR\rwithdrawalRef\"\xc0\x02\n" + + "\x1dFreezePointWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12,\n" + + "\x12gross_point_amount\x18\x03 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x04 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x05 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\x06 \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\a \x01(\x05R\x06feeBps\"\xcf\x03\n" + + "\x1cSettlePointWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "asset_type\x18\x03 \x01(\tR\tassetType\x12,\n" + + "\x12gross_point_amount\x18\x04 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x05 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x06 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\a \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\b \x01(\x05R\x06feeBps\x12(\n" + + "\x10operator_user_id\x18\t \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\n" + + " \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\v \x01(\tR\aappCode\x12:\n" + + "\x19withdrawal_application_id\x18\f \x01(\tR\x17withdrawalApplicationId\"\xc0\x02\n" + + "\x1dSettlePointWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12,\n" + + "\x12gross_point_amount\x18\x03 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x04 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x05 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\x06 \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\a \x01(\x05R\x06feeBps\"\xd0\x03\n" + + "\x1dReleasePointWithdrawalRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "asset_type\x18\x03 \x01(\tR\tassetType\x12,\n" + + "\x12gross_point_amount\x18\x04 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x05 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x06 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\a \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\b \x01(\x05R\x06feeBps\x12(\n" + + "\x10operator_user_id\x18\t \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\n" + + " \x01(\tR\x06reason\x12\x19\n" + + "\bapp_code\x18\v \x01(\tR\aappCode\x12:\n" + + "\x19withdrawal_application_id\x18\f \x01(\tR\x17withdrawalApplicationId\"\xc1\x02\n" + + "\x1eReleasePointWithdrawalResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12,\n" + + "\x12gross_point_amount\x18\x03 \x01(\x03R\x10grossPointAmount\x12(\n" + + "\x10fee_point_amount\x18\x04 \x01(\x03R\x0efeePointAmount\x12(\n" + + "\x10net_point_amount\x18\x05 \x01(\x03R\x0enetPointAmount\x12$\n" + + "\x0epoints_per_usd\x18\x06 \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\a \x01(\x05R\x06feeBps\"\xe7\x06\n" + + "\bResource\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1f\n" + + "\vresource_id\x18\x02 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_code\x18\x03 \x01(\tR\fresourceCode\x12#\n" + + "\rresource_type\x18\x04 \x01(\tR\fresourceType\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1c\n" + + "\tgrantable\x18\a \x01(\bR\tgrantable\x12%\n" + + "\x0egrant_strategy\x18\b \x01(\tR\rgrantStrategy\x12*\n" + + "\x11wallet_asset_type\x18\t \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\n" + + " \x01(\x03R\x11walletAssetAmount\x12!\n" + + "\fusage_scopes\x18\v \x03(\tR\vusageScopes\x12\x1b\n" + + "\tasset_url\x18\f \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\r \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\x0e \x01(\tR\fanimationUrl\x12#\n" + + "\rmetadata_json\x18\x0f \x01(\tR\fmetadataJson\x12\x1d\n" + + "\n" + + "sort_order\x18\x10 \x01(\x05R\tsortOrder\x12+\n" + + "\x12created_by_user_id\x18\x11 \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\x12 \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x13 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x14 \x01(\x03R\vupdatedAtMs\x122\n" + + "\x15manager_grant_enabled\x18\x15 \x01(\bR\x13managerGrantEnabled\x12\x1d\n" + + "\n" + + "price_type\x18\x16 \x01(\tR\tpriceType\x12\x1d\n" + + "\n" + + "coin_price\x18\x17 \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\x18 \x01(\x03R\x0fgiftPointAmount\"\xc7\x03\n" + + "\x11ResourceGroupItem\x12\"\n" + + "\rgroup_item_id\x18\x01 \x01(\x03R\vgroupItemId\x12\x19\n" + + "\bgroup_id\x18\x02 \x01(\x03R\agroupId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x04 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12\x1a\n" + + "\bquantity\x18\x05 \x01(\x03R\bquantity\x12\x1f\n" + + "\vduration_ms\x18\x06 \x01(\x03R\n" + + "durationMs\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\x12\x1b\n" + + "\titem_type\x18\n" + + " \x01(\tR\bitemType\x12*\n" + + "\x11wallet_asset_type\x18\v \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\f \x01(\x03R\x11walletAssetAmount\"\xad\x03\n" + + "\rResourceGroup\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\bgroup_id\x18\x02 \x01(\x03R\agroupId\x12\x1d\n" + + "\n" + + "group_code\x18\x03 \x01(\tR\tgroupCode\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x128\n" + + "\x05items\x18\b \x03(\v2\".hyapp.wallet.v1.ResourceGroupItemR\x05items\x12+\n" + + "\x12created_by_user_id\x18\t \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\n" + + " \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\f \x01(\x03R\vupdatedAtMs\"\xcb\x03\n" + + "\x15ResourceGroupSnapshot\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1f\n" + + "\vsnapshot_id\x18\x02 \x01(\tR\n" + + "snapshotId\x12\x17\n" + + "\apin_key\x18\x03 \x01(\tR\x06pinKey\x12&\n" + + "\x0fsource_group_id\x18\x04 \x01(\x03R\rsourceGroupId\x12\x1d\n" + + "\n" + + "version_no\x18\x05 \x01(\x03R\tversionNo\x12#\n" + + "\rsnapshot_hash\x18\x06 \x01(\tR\fsnapshotHash\x124\n" + + "\x05group\x18\a \x01(\v2\x1e.hyapp.wallet.v1.ResourceGroupR\x05group\x12+\n" + + "\x12created_by_user_id\x18\b \x01(\x03R\x0fcreatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\x12:\n" + + "\x1asource_group_updated_at_ms\x18\n" + + " \x01(\x03R\x16sourceGroupUpdatedAtMs\x12.\n" + + "\x13source_content_hash\x18\v \x01(\tR\x11sourceContentHash\"\x9c\x03\n" + + "\x1fPinResourceGroupSnapshotRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\bgroup_id\x18\x03 \x01(\x03R\agroupId\x12\x17\n" + + "\apin_key\x18\x04 \x01(\tR\x06pinKey\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\x12>\n" + + "\x1cexpected_group_updated_at_ms\x18\x06 \x01(\x03R\x18expectedGroupUpdatedAtMs\x12?\n" + + "\x1cexpected_source_content_hash\x18\a \x01(\tR\x19expectedSourceContentHash\x12.\n" + + "\x13required_region_ids\x18\b \x03(\x03R\x11requiredRegionIds\x120\n" + + "\x14required_all_regions\x18\t \x01(\bR\x12requiredAllRegions\"f\n" + + " PinResourceGroupSnapshotResponse\x12B\n" + + "\bsnapshot\x18\x01 \x01(\v2&.hyapp.wallet.v1.ResourceGroupSnapshotR\bsnapshot\"\xd3\x06\n" + + "\n" + + "GiftConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\agift_id\x18\x02 \x01(\tR\x06giftId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x04 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12+\n" + + "\x11presentation_json\x18\b \x01(\tR\x10presentationJson\x12#\n" + + "\rprice_version\x18\t \x01(\tR\fpriceVersion\x12\x1d\n" + + "\n" + + "coin_price\x18\n" + + " \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\v \x01(\x03R\x0fgiftPointAmount\x12\x1d\n" + + "\n" + + "heat_value\x18\f \x01(\x03R\theatValue\x12+\n" + + "\x12created_by_user_id\x18\r \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\x0e \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12\x1d\n" + + "\n" + + "region_ids\x18\x11 \x03(\x03R\tregionIds\x12$\n" + + "\x0egift_type_code\x18\x12 \x01(\tR\fgiftTypeCode\x12*\n" + + "\x11charge_asset_type\x18\x13 \x01(\tR\x0fchargeAssetType\x12*\n" + + "\x11effective_from_ms\x18\x14 \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x15 \x01(\x03R\reffectiveToMs\x12!\n" + + "\feffect_types\x18\x16 \x03(\tR\veffectTypes\x12(\n" + + "\x10cp_relation_type\x18\x17 \x01(\tR\x0ecpRelationType\"\xce\x02\n" + + "\x0eGiftTypeConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1b\n" + + "\ttype_code\x18\x02 \x01(\tR\btypeCode\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x17\n" + + "\atab_key\x18\x04 \x01(\tR\x06tabKey\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\x06 \x01(\x05R\tsortOrder\x12+\n" + + "\x12created_by_user_id\x18\a \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\b \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\n" + + " \x01(\x03R\vupdatedAtMs\"\xb7\x04\n" + + "\x10ResourceShopItem\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12 \n" + + "\fshop_item_id\x18\x02 \x01(\x03R\n" + + "shopItemId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x04 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12#\n" + + "\rduration_days\x18\x06 \x01(\x05R\fdurationDays\x12\x1d\n" + + "\n" + + "price_type\x18\a \x01(\tR\tpriceType\x12\x1d\n" + + "\n" + + "coin_price\x18\b \x01(\x03R\tcoinPrice\x12*\n" + + "\x11effective_from_ms\x18\t \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\n" + + " \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\v \x01(\x05R\tsortOrder\x12+\n" + + "\x12created_by_user_id\x18\f \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\r \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\"\xb8\x05\n" + + "\x17UserResourceEntitlement\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12%\n" + + "\x0eentitlement_id\x18\x02 \x01(\tR\rentitlementId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x05 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1a\n" + + "\bquantity\x18\a \x01(\x03R\bquantity\x12-\n" + + "\x12remaining_quantity\x18\b \x01(\x03R\x11remainingQuantity\x12&\n" + + "\x0feffective_at_ms\x18\t \x01(\x03R\reffectiveAtMs\x12\"\n" + + "\rexpires_at_ms\x18\n" + + " \x01(\x03R\vexpiresAtMs\x12&\n" + + "\x0fsource_grant_id\x18\v \x01(\tR\rsourceGrantId\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMs\x12\x1a\n" + + "\bequipped\x18\x0e \x01(\bR\bequipped\x12,\n" + + "\x12source_snapshot_id\x18\x0f \x01(\tR\x10sourceSnapshotId\x124\n" + + "\x16resource_snapshot_hash\x18\x10 \x01(\tR\x14resourceSnapshotHash\x12K\n" + + "\x13pinned_gift_configs\x18\x11 \x03(\v2\x1b.hyapp.wallet.v1.GiftConfigR\x11pinnedGiftConfigs\"\x86\x03\n" + + "\x11ResourceGrantItem\x12\"\n" + + "\rgrant_item_id\x18\x01 \x01(\x03R\vgrantItemId\x12\x19\n" + + "\bgrant_id\x18\x02 \x01(\tR\agrantId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x124\n" + + "\x16resource_snapshot_json\x18\x04 \x01(\tR\x14resourceSnapshotJson\x12\x1a\n" + + "\bquantity\x18\x05 \x01(\x03R\bquantity\x12\x1f\n" + + "\vduration_ms\x18\x06 \x01(\x03R\n" + + "durationMs\x12\x1f\n" + + "\vresult_type\x18\a \x01(\tR\n" + + "resultType\x122\n" + + "\x15wallet_transaction_id\x18\b \x01(\tR\x13walletTransactionId\x12%\n" + + "\x0eentitlement_id\x18\t \x01(\tR\rentitlementId\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\"\xd7\x04\n" + + "\rResourceGrant\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\bgrant_id\x18\x02 \x01(\tR\agrantId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12!\n" + + "\fgrant_source\x18\x05 \x01(\tR\vgrantSource\x12,\n" + + "\x12grant_subject_type\x18\x06 \x01(\tR\x10grantSubjectType\x12(\n" + + "\x10grant_subject_id\x18\a \x01(\tR\x0egrantSubjectId\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12\x16\n" + + "\x06reason\x18\t \x01(\tR\x06reason\x12(\n" + + "\x10operator_user_id\x18\n" + + " \x01(\x03R\x0eoperatorUserId\x128\n" + + "\x05items\x18\v \x03(\v2\".hyapp.wallet.v1.ResourceGrantItemR\x05items\x12\"\n" + + "\rcreated_at_ms\x18\f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\r \x01(\x03R\vupdatedAtMs\x12\"\n" + + "\rrevoked_at_ms\x18\x0e \x01(\x03R\vrevokedAtMs\x12+\n" + + "\x12revoked_by_user_id\x18\x0f \x01(\x03R\x0frevokedByUserId\x12#\n" + + "\rrevoke_reason\x18\x10 \x01(\tR\frevokeReason\"\x8e\x02\n" + + "\x16ResourceGroupItemInput\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\x03R\n" + + "resourceId\x12\x1a\n" + + "\bquantity\x18\x02 \x01(\x03R\bquantity\x12\x1f\n" + + "\vduration_ms\x18\x03 \x01(\x03R\n" + + "durationMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x04 \x01(\x05R\tsortOrder\x12\x1b\n" + + "\titem_type\x18\x05 \x01(\tR\bitemType\x12*\n" + + "\x11wallet_asset_type\x18\x06 \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\a \x01(\x03R\x11walletAssetAmount\"\xa7\x02\n" + + "\x14ListResourcesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rresource_type\x18\x03 \x01(\tR\fresourceType\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x05 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\x12\x1f\n" + + "\vactive_only\x18\b \x01(\bR\n" + + "activeOnly\x12,\n" + + "\x12manager_grant_only\x18\t \x01(\bR\x10managerGrantOnly\"f\n" + + "\x15ListResourcesResponse\x127\n" + + "\tresources\x18\x01 \x03(\v2\x19.hyapp.wallet.v1.ResourceR\tresources\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"o\n" + + "\x12GetResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\"L\n" + + "\x13GetResourceResponse\x125\n" + + "\bresource\x18\x01 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\"\x99\x06\n" + + "\x15CreateResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rresource_code\x18\x03 \x01(\tR\fresourceCode\x12#\n" + + "\rresource_type\x18\x04 \x01(\tR\fresourceType\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1c\n" + + "\tgrantable\x18\a \x01(\bR\tgrantable\x12%\n" + + "\x0egrant_strategy\x18\b \x01(\tR\rgrantStrategy\x12*\n" + + "\x11wallet_asset_type\x18\t \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\n" + + " \x01(\x03R\x11walletAssetAmount\x12!\n" + + "\fusage_scopes\x18\v \x03(\tR\vusageScopes\x12\x1b\n" + + "\tasset_url\x18\f \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\r \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\x0e \x01(\tR\fanimationUrl\x12#\n" + + "\rmetadata_json\x18\x0f \x01(\tR\fmetadataJson\x12\x1d\n" + + "\n" + + "sort_order\x18\x10 \x01(\x05R\tsortOrder\x12(\n" + + "\x10operator_user_id\x18\x11 \x01(\x03R\x0eoperatorUserId\x127\n" + + "\x15manager_grant_enabled\x18\x12 \x01(\bH\x00R\x13managerGrantEnabled\x88\x01\x01\x12\x1d\n" + + "\n" + + "price_type\x18\x13 \x01(\tR\tpriceType\x12\x1d\n" + + "\n" + + "coin_price\x18\x14 \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\x15 \x01(\x03R\x0fgiftPointAmountB\x18\n" + + "\x16_manager_grant_enabled\"\xba\x06\n" + + "\x15UpdateResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_code\x18\x04 \x01(\tR\fresourceCode\x12#\n" + + "\rresource_type\x18\x05 \x01(\tR\fresourceType\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x1c\n" + + "\tgrantable\x18\b \x01(\bR\tgrantable\x12%\n" + + "\x0egrant_strategy\x18\t \x01(\tR\rgrantStrategy\x12*\n" + + "\x11wallet_asset_type\x18\n" + + " \x01(\tR\x0fwalletAssetType\x12.\n" + + "\x13wallet_asset_amount\x18\v \x01(\x03R\x11walletAssetAmount\x12!\n" + + "\fusage_scopes\x18\f \x03(\tR\vusageScopes\x12\x1b\n" + + "\tasset_url\x18\r \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\x0e \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\x0f \x01(\tR\fanimationUrl\x12#\n" + + "\rmetadata_json\x18\x10 \x01(\tR\fmetadataJson\x12\x1d\n" + + "\n" + + "sort_order\x18\x11 \x01(\x05R\tsortOrder\x12(\n" + + "\x10operator_user_id\x18\x12 \x01(\x03R\x0eoperatorUserId\x127\n" + + "\x15manager_grant_enabled\x18\x13 \x01(\bH\x00R\x13managerGrantEnabled\x88\x01\x01\x12\x1d\n" + + "\n" + + "price_type\x18\x14 \x01(\tR\tpriceType\x12\x1d\n" + + "\n" + + "coin_price\x18\x15 \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\x16 \x01(\x03R\x0fgiftPointAmountB\x18\n" + + "\x16_manager_grant_enabled\"\xb7\x01\n" + + "\x18SetResourceStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"\x9c\x01\n" + + "\x15DeleteResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"\xa4\x01\n" + + "\x1bBatchDeleteResourcesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12!\n" + + "\fresource_ids\x18\x03 \x03(\x03R\vresourceIds\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"W\n" + + "\x1cBatchDeleteResourcesResponse\x127\n" + + "\tresources\x18\x01 \x03(\v2\x19.hyapp.wallet.v1.ResourceR\tresources\"I\n" + + "\x10ResourceResponse\x125\n" + + "\bresource\x18\x01 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\"\xd9\x01\n" + + "\x19ListResourceGroupsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x04 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\x12\x1f\n" + + "\vactive_only\x18\a \x01(\bR\n" + + "activeOnly\"j\n" + + "\x1aListResourceGroupsResponse\x126\n" + + "\x06groups\x18\x01 \x03(\v2\x1e.hyapp.wallet.v1.ResourceGroupR\x06groups\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"n\n" + + "\x17GetResourceGroupRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\bgroup_id\x18\x03 \x01(\x03R\agroupId\"\x80\x01\n" + + "\x18GetResourceGroupResponse\x124\n" + + "\x05group\x18\x01 \x01(\v2\x1e.hyapp.wallet.v1.ResourceGroupR\x05group\x12.\n" + + "\x13source_content_hash\x18\x02 \x01(\tR\x11sourceContentHash\"\xcb\x02\n" + + "\x1aCreateResourceGroupRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "group_code\x18\x03 \x01(\tR\tgroupCode\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12=\n" + + "\x05items\x18\b \x03(\v2'.hyapp.wallet.v1.ResourceGroupItemInputR\x05items\x12(\n" + + "\x10operator_user_id\x18\t \x01(\x03R\x0eoperatorUserId\"\xe6\x02\n" + + "\x1aUpdateResourceGroupRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\bgroup_id\x18\x03 \x01(\x03R\agroupId\x12\x1d\n" + + "\n" + + "group_code\x18\x04 \x01(\tR\tgroupCode\x12\x12\n" + + "\x04name\x18\x05 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12 \n" + + "\vdescription\x18\a \x01(\tR\vdescription\x12\x1d\n" + + "\n" + + "sort_order\x18\b \x01(\x05R\tsortOrder\x12=\n" + + "\x05items\x18\t \x03(\v2'.hyapp.wallet.v1.ResourceGroupItemInputR\x05items\x12(\n" + + "\x10operator_user_id\x18\n" + + " \x01(\x03R\x0eoperatorUserId\"\xb6\x01\n" + + "\x1dSetResourceGroupStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\bgroup_id\x18\x03 \x01(\x03R\agroupId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"M\n" + + "\x15ResourceGroupResponse\x124\n" + + "\x05group\x18\x01 \x01(\v2\x1e.hyapp.wallet.v1.ResourceGroupR\x05group\"\xbe\x02\n" + + "\x16ListGiftConfigsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x04 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\x12\x1f\n" + + "\vactive_only\x18\a \x01(\bR\n" + + "activeOnly\x12\x1b\n" + + "\tregion_id\x18\b \x01(\x03R\bregionId\x12#\n" + + "\rfilter_region\x18\t \x01(\bR\ffilterRegion\x12$\n" + + "\x0egift_type_code\x18\n" + + " \x01(\tR\fgiftTypeCode\"b\n" + + "\x17ListGiftConfigsResponse\x121\n" + + "\x05gifts\x18\x01 \x03(\v2\x1b.hyapp.wallet.v1.GiftConfigR\x05gifts\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\x8f\x01\n" + + "\x1aListGiftTypeConfigsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1f\n" + + "\vactive_only\x18\x04 \x01(\bR\n" + + "activeOnly\"]\n" + + "\x1bListGiftTypeConfigsResponse\x12>\n" + + "\n" + + "gift_types\x18\x01 \x03(\v2\x1f.hyapp.wallet.v1.GiftTypeConfigR\tgiftTypes\"\x82\x02\n" + + "\x1bUpsertGiftTypeConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\ttype_code\x18\x03 \x01(\tR\btypeCode\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x17\n" + + "\atab_key\x18\x05 \x01(\tR\x06tabKey\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12(\n" + + "\x10operator_user_id\x18\b \x01(\x03R\x0eoperatorUserId\"V\n" + + "\x16GiftTypeConfigResponse\x12<\n" + + "\tgift_type\x18\x01 \x01(\v2\x1f.hyapp.wallet.v1.GiftTypeConfigR\bgiftType\"\xf8\x05\n" + + "\x17CreateGiftConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12+\n" + + "\x11presentation_json\x18\b \x01(\tR\x10presentationJson\x12#\n" + + "\rprice_version\x18\t \x01(\tR\fpriceVersion\x12\x1d\n" + + "\n" + + "coin_price\x18\n" + + " \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\v \x01(\x03R\x0fgiftPointAmount\x12\x1d\n" + + "\n" + + "heat_value\x18\f \x01(\x03R\theatValue\x12&\n" + + "\x0feffective_at_ms\x18\r \x01(\x03R\reffectiveAtMs\x12(\n" + + "\x10operator_user_id\x18\x0e \x01(\x03R\x0eoperatorUserId\x12\x1d\n" + + "\n" + + "region_ids\x18\x0f \x03(\x03R\tregionIds\x12$\n" + + "\x0egift_type_code\x18\x10 \x01(\tR\fgiftTypeCode\x12*\n" + + "\x11charge_asset_type\x18\x11 \x01(\tR\x0fchargeAssetType\x12*\n" + + "\x11effective_from_ms\x18\x12 \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x13 \x01(\x03R\reffectiveToMs\x12!\n" + + "\feffect_types\x18\x14 \x03(\tR\veffectTypes\x12(\n" + + "\x10cp_relation_type\x18\x15 \x01(\tR\x0ecpRelationType\"\xc3\x01\n" + + "\x1dBatchCreateGiftConfigsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12>\n" + + "\x05items\x18\x03 \x03(\v2(.hyapp.wallet.v1.CreateGiftConfigRequestR\x05items\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"S\n" + + "\x1eBatchCreateGiftConfigsResponse\x121\n" + + "\x05gifts\x18\x01 \x03(\v2\x1b.hyapp.wallet.v1.GiftConfigR\x05gifts\"\xf8\x05\n" + + "\x17UpdateGiftConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12+\n" + + "\x11presentation_json\x18\b \x01(\tR\x10presentationJson\x12#\n" + + "\rprice_version\x18\t \x01(\tR\fpriceVersion\x12\x1d\n" + + "\n" + + "coin_price\x18\n" + + " \x01(\x03R\tcoinPrice\x12*\n" + + "\x11gift_point_amount\x18\v \x01(\x03R\x0fgiftPointAmount\x12\x1d\n" + + "\n" + + "heat_value\x18\f \x01(\x03R\theatValue\x12&\n" + + "\x0feffective_at_ms\x18\r \x01(\x03R\reffectiveAtMs\x12(\n" + + "\x10operator_user_id\x18\x0e \x01(\x03R\x0eoperatorUserId\x12\x1d\n" + + "\n" + + "region_ids\x18\x0f \x03(\x03R\tregionIds\x12$\n" + + "\x0egift_type_code\x18\x10 \x01(\tR\fgiftTypeCode\x12*\n" + + "\x11charge_asset_type\x18\x11 \x01(\tR\x0fchargeAssetType\x12*\n" + + "\x11effective_from_ms\x18\x12 \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x13 \x01(\x03R\reffectiveToMs\x12!\n" + + "\feffect_types\x18\x14 \x03(\tR\veffectTypes\x12(\n" + + "\x10cp_relation_type\x18\x15 \x01(\tR\x0ecpRelationType\"\xb1\x01\n" + + "\x1aSetGiftConfigStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"\x96\x01\n" + + "\x17DeleteGiftConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\agift_id\x18\x03 \x01(\tR\x06giftId\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"E\n" + + "\x12GiftConfigResponse\x12/\n" + + "\x04gift\x18\x01 \x01(\v2\x1b.hyapp.wallet.v1.GiftConfigR\x04gift\"\xb9\x02\n" + + "\x14GrantResourceRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x12\x1a\n" + + "\bquantity\x18\x05 \x01(\x03R\bquantity\x12\x1f\n" + + "\vduration_ms\x18\x06 \x01(\x03R\n" + + "durationMs\x12\x16\n" + + "\x06reason\x18\a \x01(\tR\x06reason\x12(\n" + + "\x10operator_user_id\x18\b \x01(\x03R\x0eoperatorUserId\x12!\n" + + "\fgrant_source\x18\t \x01(\tR\vgrantSource\"\xfb\x01\n" + + "\x19GrantResourceGroupRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x19\n" + + "\bgroup_id\x18\x04 \x01(\x03R\agroupId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12(\n" + + "\x10operator_user_id\x18\x06 \x01(\x03R\x0eoperatorUserId\x12!\n" + + "\fgrant_source\x18\a \x01(\tR\vgrantSource\"\xbd\x02\n" + + "\x1fGrantPinnedResourceGroupRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x1f\n" + + "\vsnapshot_id\x18\x04 \x01(\tR\n" + + "snapshotId\x12\x16\n" + + "\x06reason\x18\x05 \x01(\tR\x06reason\x12(\n" + + "\x10operator_user_id\x18\x06 \x01(\x03R\x0eoperatorUserId\x12!\n" + + "\fgrant_source\x18\a \x01(\tR\vgrantSource\x124\n" + + "\x16expected_snapshot_hash\x18\b \x01(\tR\x14expectedSnapshotHash\"\xb3\x01\n" + + "\x1aRevokeResourceGrantRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\bgrant_id\x18\x03 \x01(\tR\agrantId\x12\x16\n" + + "\x06reason\x18\x04 \x01(\tR\x06reason\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"M\n" + + "\x15ResourceGrantResponse\x124\n" + + "\x05grant\x18\x01 \x01(\v2\x1e.hyapp.wallet.v1.ResourceGrantR\x05grant\"\xb3\x01\n" + + "\x18ListUserResourcesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12#\n" + + "\rresource_type\x18\x04 \x01(\tR\fresourceType\x12\x1f\n" + + "\vactive_only\x18\x05 \x01(\bR\n" + + "activeOnly\"c\n" + + "\x19ListUserResourcesResponse\x12F\n" + + "\tresources\x18\x01 \x03(\v2(.hyapp.wallet.v1.UserResourceEntitlementR\tresources\"\xb5\x01\n" + + "\x18EquipUserResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1f\n" + + "\vresource_id\x18\x04 \x01(\x03R\n" + + "resourceId\x12%\n" + + "\x0eentitlement_id\x18\x05 \x01(\tR\rentitlementId\"a\n" + + "\x19EquipUserResourceResponse\x12D\n" + + "\bresource\x18\x01 \x01(\v2(.hyapp.wallet.v1.UserResourceEntitlementR\bresource\"\x94\x01\n" + + "\x1aUnequipUserResourceRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12#\n" + + "\rresource_type\x18\x04 \x01(\tR\fresourceType\"\x86\x01\n" + + "\x1bUnequipUserResourceResponse\x12#\n" + + "\rresource_type\x18\x01 \x01(\tR\fresourceType\x12\x1e\n" + + "\n" + + "unequipped\x18\x02 \x01(\bR\n" + + "unequipped\x12\"\n" + + "\rupdated_at_ms\x18\x03 \x01(\x03R\vupdatedAtMs\"\xa2\x01\n" + + "$BatchGetUserEquippedResourcesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\buser_ids\x18\x03 \x03(\x03R\auserIds\x12%\n" + + "\x0eresource_types\x18\x04 \x03(\tR\rresourceTypes\"x\n" + + "\x15UserEquippedResources\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12F\n" + + "\tresources\x18\x02 \x03(\v2(.hyapp.wallet.v1.UserResourceEntitlementR\tresources\"e\n" + + "%BatchGetUserEquippedResourcesResponse\x12<\n" + + "\x05users\x18\x01 \x03(\v2&.hyapp.wallet.v1.UserEquippedResourcesR\x05users\"\xc4\x01\n" + + "\x19ListResourceGrantsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"j\n" + + "\x1aListResourceGrantsResponse\x126\n" + + "\x06grants\x18\x01 \x03(\v2\x1e.hyapp.wallet.v1.ResourceGrantR\x06grants\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\x8a\x02\n" + + "\x15ResourceShopItemInput\x12 \n" + + "\fshop_item_id\x18\x01 \x01(\x03R\n" + + "shopItemId\x12\x1f\n" + + "\vresource_id\x18\x02 \x01(\x03R\n" + + "resourceId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12#\n" + + "\rduration_days\x18\x04 \x01(\x05R\fdurationDays\x12*\n" + + "\x11effective_from_ms\x18\x05 \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x06 \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\"\x81\x02\n" + + "\x1cListResourceShopItemsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rresource_type\x18\x03 \x01(\tR\fresourceType\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x05 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\x12\x1f\n" + + "\vactive_only\x18\b \x01(\bR\n" + + "activeOnly\"n\n" + + "\x1dListResourceShopItemsResponse\x127\n" + + "\x05items\x18\x01 \x03(\v2!.hyapp.wallet.v1.ResourceShopItemR\x05items\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xc2\x01\n" + + "\x1eUpsertResourceShopItemsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12<\n" + + "\x05items\x18\x03 \x03(\v2&.hyapp.wallet.v1.ResourceShopItemInputR\x05items\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"Z\n" + + "\x1fUpsertResourceShopItemsResponse\x127\n" + + "\x05items\x18\x01 \x03(\v2!.hyapp.wallet.v1.ResourceShopItemR\x05items\"\xc0\x01\n" + + " SetResourceShopItemStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12 \n" + + "\fshop_item_id\x18\x03 \x01(\x03R\n" + + "shopItemId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"Q\n" + + "\x18ResourceShopItemResponse\x125\n" + + "\x04item\x18\x01 \x01(\v2!.hyapp.wallet.v1.ResourceShopItemR\x04item\"\x96\x01\n" + + "\x1fPurchaseResourceShopItemRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12 \n" + + "\fshop_item_id\x18\x04 \x01(\x03R\n" + + "shopItemId\"\xee\x02\n" + + " PurchaseResourceShopItemResponse\x12\x19\n" + + "\border_id\x18\x01 \x01(\tR\aorderId\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12*\n" + + "\x11resource_grant_id\x18\x03 \x01(\tR\x0fresourceGrantId\x12>\n" + + "\tshop_item\x18\x04 \x01(\v2!.hyapp.wallet.v1.ResourceShopItemR\bshopItem\x12D\n" + + "\bresource\x18\x05 \x01(\v2(.hyapp.wallet.v1.UserResourceEntitlementR\bresource\x127\n" + + "\abalance\x18\x06 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x1d\n" + + "\n" + + "coin_spent\x18\a \x01(\x03R\tcoinSpent\"\xa1\b\n" + + "\fRechargeBill\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12#\n" + + "\rrecharge_type\x18\x04 \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12!\n" + + "\fexternal_ref\x18\x06 \x01(\tR\vexternalRef\x12\x17\n" + + "\auser_id\x18\a \x01(\x03R\x06userId\x12$\n" + + "\x0eseller_user_id\x18\b \x01(\x03R\fsellerUserId\x12(\n" + + "\x10seller_region_id\x18\t \x01(\x03R\x0esellerRegionId\x12(\n" + + "\x10target_region_id\x18\n" + + " \x01(\x03R\x0etargetRegionId\x12\x1b\n" + + "\tpolicy_id\x18\v \x01(\x03R\bpolicyId\x12%\n" + + "\x0epolicy_version\x18\f \x01(\tR\rpolicyVersion\x12#\n" + + "\rcurrency_code\x18\r \x01(\tR\fcurrencyCode\x12\x1f\n" + + "\vcoin_amount\x18\x0e \x01(\x03R\n" + + "coinAmount\x12(\n" + + "\x10usd_minor_amount\x18\x0f \x01(\x03R\x0eusdMinorAmount\x120\n" + + "\x14exchange_coin_amount\x18\x10 \x01(\x03R\x12exchangeCoinAmount\x129\n" + + "\x19exchange_usd_minor_amount\x18\x11 \x01(\x03R\x16exchangeUsdMinorAmount\x12\"\n" + + "\rcreated_at_ms\x18\x12 \x01(\x03R\vcreatedAtMs\x122\n" + + "\x15provider_amount_minor\x18\x13 \x01(\x03R\x13providerAmountMinor\x12#\n" + + "\rprovider_code\x18\x14 \x01(\tR\fproviderCode\x125\n" + + "\x17user_paid_currency_code\x18\x15 \x01(\tR\x14userPaidCurrencyCode\x123\n" + + "\x16user_paid_amount_micro\x18\x16 \x01(\x03R\x13userPaidAmountMicro\x12,\n" + + "\x12provider_fee_micro\x18\x17 \x01(\x03R\x10providerFeeMicro\x12,\n" + + "\x12provider_tax_micro\x18\x18 \x01(\x03R\x10providerTaxMicro\x12,\n" + + "\x12provider_net_micro\x18\x19 \x01(\x03R\x10providerNetMicro\x12)\n" + + "\x11paid_synced_at_ms\x18\x1a \x01(\x03R\x0epaidSyncedAtMs\"\x93\x03\n" + + "\x18ListRechargeBillsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12$\n" + + "\x0eseller_user_id\x18\x04 \x01(\x03R\fsellerUserId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12#\n" + + "\rrecharge_type\x18\x06 \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\b \x01(\tR\akeyword\x12\x1e\n" + + "\vstart_at_ms\x18\t \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\n" + + " \x01(\x03R\aendAtMs\x12\x12\n" + + "\x04page\x18\v \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\f \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "paid_state\x18\r \x01(\tR\tpaidState\"f\n" + + "\x19ListRechargeBillsResponse\x123\n" + + "\x05bills\x18\x01 \x03(\v2\x1d.hyapp.wallet.v1.RechargeBillR\x05bills\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xc8\x02\n" + + "\x1dGetRechargeBillSummaryRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12$\n" + + "\x0eseller_user_id\x18\x04 \x01(\x03R\fsellerUserId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12#\n" + + "\rrecharge_type\x18\x06 \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\b \x01(\tR\akeyword\x12\x1e\n" + + "\vstart_at_ms\x18\t \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\n" + + " \x01(\x03R\aendAtMs\"\x85\x01\n" + + "\x19RechargeBillSummaryBucket\x12\x1d\n" + + "\n" + + "bill_count\x18\x01 \x01(\x03R\tbillCount\x12\x1f\n" + + "\vcoin_amount\x18\x02 \x01(\x03R\n" + + "coinAmount\x12(\n" + + "\x10usd_minor_amount\x18\x03 \x01(\x03R\x0eusdMinorAmount\"\xc9\x02\n" + + "\x1eGetRechargeBillSummaryResponse\x12@\n" + + "\x05total\x18\x01 \x01(\v2*.hyapp.wallet.v1.RechargeBillSummaryBucketR\x05total\x12K\n" + + "\vgoogle_play\x18\x02 \x01(\v2*.hyapp.wallet.v1.RechargeBillSummaryBucketR\n" + + "googlePlay\x12K\n" + + "\vthird_party\x18\x03 \x01(\v2*.hyapp.wallet.v1.RechargeBillSummaryBucketR\n" + + "thirdParty\x12K\n" + + "\vcoin_seller\x18\x04 \x01(\v2*.hyapp.wallet.v1.RechargeBillSummaryBucketR\n" + + "coinSeller\"\x8b\x02\n" + + "\x11UserRechargeStats\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12%\n" + + "\x0erecharge_count\x18\x02 \x01(\x03R\rrechargeCount\x12*\n" + + "\x11total_coin_amount\x18\x03 \x01(\x03R\x0ftotalCoinAmount\x123\n" + + "\x16total_usd_minor_amount\x18\x04 \x01(\x03R\x13totalUsdMinorAmount\x121\n" + + "\x15first_recharged_at_ms\x18\x05 \x01(\x03R\x12firstRechargedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"w\n" + + " BatchGetUserRechargeStatsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\buser_ids\x18\x03 \x03(\x03R\auserIds\"]\n" + + "!BatchGetUserRechargeStatsResponse\x128\n" + + "\x05items\x18\x01 \x03(\v2\".hyapp.wallet.v1.UserRechargeStatsR\x05items\"\x9c\x02\n" + + "\x1eGetRechargeBillOverviewRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12#\n" + + "\rrecharge_type\x18\x04 \x01(\tR\frechargeType\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x1e\n" + + "\vstart_at_ms\x18\x06 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\a \x01(\x03R\aendAtMs\x12*\n" + + "\x11tz_offset_minutes\x18\b \x01(\x05R\x0ftzOffsetMinutes\"\xd9\x02\n" + + "\x17RechargeBillDailyBucket\x12\x12\n" + + "\x04date\x18\x01 \x01(\tR\x04date\x12(\n" + + "\x10google_usd_minor\x18\x02 \x01(\x03R\x0egoogleUsdMinor\x121\n" + + "\x15third_party_usd_minor\x18\x03 \x01(\x03R\x12thirdPartyUsdMinor\x121\n" + + "\x15coin_seller_usd_minor\x18\x04 \x01(\x03R\x12coinSellerUsdMinor\x12,\n" + + "\x12google_coin_amount\x18\x05 \x01(\x03R\x10googleCoinAmount\x125\n" + + "\x17third_party_coin_amount\x18\x06 \x01(\x03R\x14thirdPartyCoinAmount\x125\n" + + "\x17coin_seller_coin_amount\x18\a \x01(\x03R\x14coinSellerCoinAmount\"\x80\x01\n" + + "\x18RechargeBillRegionBucket\x12\x1b\n" + + "\tregion_id\x18\x01 \x01(\x03R\bregionId\x12\x1d\n" + + "\n" + + "bill_count\x18\x02 \x01(\x03R\tbillCount\x12(\n" + + "\x10usd_minor_amount\x18\x03 \x01(\x03R\x0eusdMinorAmount\"\xc0\x02\n" + + "\x1bRechargeBillGooglePaidStats\x12*\n" + + "\x11google_bill_count\x18\x01 \x01(\x03R\x0fgoogleBillCount\x12!\n" + + "\fsynced_count\x18\x02 \x01(\x03R\vsyncedCount\x12%\n" + + "\x0eunsynced_count\x18\x03 \x01(\x03R\runsyncedCount\x12*\n" + + "\x11covered_usd_minor\x18\x04 \x01(\x03R\x0fcoveredUsdMinor\x12)\n" + + "\x11est_fee_usd_minor\x18\x05 \x01(\x03R\x0eestFeeUsdMinor\x12)\n" + + "\x11est_tax_usd_minor\x18\x06 \x01(\x03R\x0eestTaxUsdMinor\x12)\n" + + "\x11est_net_usd_minor\x18\a \x01(\x03R\x0eestNetUsdMinor\"v\n" + + "\x1fRechargeBillSalaryTransferStats\x12%\n" + + "\x0etransfer_count\x18\x01 \x01(\x03R\rtransferCount\x12,\n" + + "\x12transfer_usd_minor\x18\x02 \x01(\x03R\x10transferUsdMinor\"\xd0\x02\n" + + "\x1fGetRechargeBillOverviewResponse\x12>\n" + + "\x05daily\x18\x01 \x03(\v2(.hyapp.wallet.v1.RechargeBillDailyBucketR\x05daily\x12C\n" + + "\aregions\x18\x02 \x03(\v2).hyapp.wallet.v1.RechargeBillRegionBucketR\aregions\x12M\n" + + "\vgoogle_paid\x18\x03 \x01(\v2,.hyapp.wallet.v1.RechargeBillGooglePaidStatsR\n" + + "googlePaid\x12Y\n" + + "\x0fsalary_transfer\x18\x04 \x01(\v20.hyapp.wallet.v1.RechargeBillSalaryTransferStatsR\x0esalaryTransfer\"\x86\x01\n" + + "!RefreshGooglePaymentPricesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12'\n" + + "\x0ftransaction_ids\x18\x03 \x03(\tR\x0etransactionIds\"\xfe\x01\n" + + "\x12GooglePaymentPrice\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12#\n" + + "\rcurrency_code\x18\x02 \x01(\tR\fcurrencyCode\x12*\n" + + "\x11paid_amount_micro\x18\x03 \x01(\x03R\x0fpaidAmountMicro\x12\x1b\n" + + "\ttax_micro\x18\x04 \x01(\x03R\btaxMicro\x12\x1b\n" + + "\tnet_micro\x18\x05 \x01(\x03R\bnetMicro\x12 \n" + + "\fsynced_at_ms\x18\x06 \x01(\x03R\n" + + "syncedAtMs\x12\x14\n" + + "\x05error\x18\a \x01(\tR\x05error\"a\n" + + "\"RefreshGooglePaymentPricesResponse\x12;\n" + + "\x06prices\x18\x01 \x03(\v2#.hyapp.wallet.v1.GooglePaymentPriceR\x06prices\"y\n" + + "\x12WalletFeatureFlags\x12)\n" + + "\x10recharge_enabled\x18\x01 \x01(\bR\x0frechargeEnabled\x128\n" + + "\x18diamond_exchange_enabled\x18\x02 \x01(\bR\x16diamondExchangeEnabled\"m\n" + + "\x18GetWalletOverviewRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\xa0\x01\n" + + "\x19GetWalletOverviewResponse\x129\n" + + "\bbalances\x18\x01 \x03(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\bbalances\x12H\n" + + "\rfeature_flags\x18\x02 \x01(\v2#.hyapp.wallet.v1.WalletFeatureFlagsR\ffeatureFlags\"Y\n" + + "\x12WalletValueSummary\x12\x1f\n" + + "\vcoin_amount\x18\x01 \x01(\x03R\n" + + "coinAmount\x12\"\n" + + "\rupdated_at_ms\x18\x02 \x01(\x03R\vupdatedAtMs\"q\n" + + "\x1cGetWalletValueSummaryRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"^\n" + + "\x1dGetWalletValueSummaryResponse\x12=\n" + + "\asummary\x18\x01 \x01(\v2#.hyapp.wallet.v1.WalletValueSummaryR\asummary\"\xec\x05\n" + + "\fGiftWallItem\x12\x17\n" + + "\agift_id\x18\x01 \x01(\tR\x06giftId\x12\x1b\n" + + "\tgift_name\x18\x02 \x01(\tR\bgiftName\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x04 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x124\n" + + "\x16resource_snapshot_json\x18\x05 \x01(\tR\x14resourceSnapshotJson\x12$\n" + + "\x0egift_type_code\x18\x06 \x01(\tR\fgiftTypeCode\x12+\n" + + "\x11presentation_json\x18\a \x01(\tR\x10presentationJson\x12\x1d\n" + + "\n" + + "gift_count\x18\b \x01(\x03R\tgiftCount\x12\x1f\n" + + "\vtotal_value\x18\t \x01(\x03R\n" + + "totalValue\x12(\n" + + "\x10total_coin_value\x18\n" + + " \x01(\x03R\x0etotalCoinValue\x12.\n" + + "\x13total_diamond_value\x18\v \x01(\x03R\x11totalDiamondValue\x12(\n" + + "\x10total_gift_point\x18\f \x01(\x03R\x0etotalGiftPoint\x12(\n" + + "\x10total_heat_value\x18\r \x01(\x03R\x0etotalHeatValue\x12*\n" + + "\x11charge_asset_type\x18\x0e \x01(\tR\x0fchargeAssetType\x12,\n" + + "\x12last_price_version\x18\x0f \x01(\tR\x10lastPriceVersion\x12/\n" + + "\x14first_received_at_ms\x18\x10 \x01(\x03R\x11firstReceivedAtMs\x12-\n" + + "\x13last_received_at_ms\x18\x11 \x01(\x03R\x10lastReceivedAtMs\x12\x1d\n" + + "\n" + + "sort_order\x18\x12 \x01(\x05R\tsortOrder\"k\n" + + "\x16GetUserGiftWallRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\xef\x02\n" + + "\x17GetUserGiftWallResponse\x123\n" + + "\x05items\x18\x01 \x03(\v2\x1d.hyapp.wallet.v1.GiftWallItemR\x05items\x12&\n" + + "\x0fgift_kind_count\x18\x02 \x01(\x03R\rgiftKindCount\x12(\n" + + "\x10gift_total_count\x18\x03 \x01(\x03R\x0egiftTotalCount\x12\x1f\n" + + "\vtotal_value\x18\x04 \x01(\x03R\n" + + "totalValue\x12(\n" + + "\x10total_coin_value\x18\x05 \x01(\x03R\x0etotalCoinValue\x12.\n" + + "\x13total_diamond_value\x18\x06 \x01(\x03R\x11totalDiamondValue\x12(\n" + + "\x10total_gift_point\x18\a \x01(\x03R\x0etotalGiftPoint\x12(\n" + + "\x10total_heat_value\x18\b \x01(\x03R\x0etotalHeatValue\"\xa4\x06\n" + + "\x0fRechargeProduct\x12\x1d\n" + + "\n" + + "product_id\x18\x01 \x01(\x03R\tproductId\x12!\n" + + "\fproduct_code\x18\x02 \x01(\tR\vproductCode\x12\x18\n" + + "\achannel\x18\x03 \x01(\tR\achannel\x12#\n" + + "\rcurrency_code\x18\x04 \x01(\tR\fcurrencyCode\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12!\n" + + "\famount_minor\x18\x06 \x01(\x03R\vamountMinor\x12%\n" + + "\x0epolicy_version\x18\a \x01(\tR\rpolicyVersion\x12\x18\n" + + "\aenabled\x18\b \x01(\bR\aenabled\x12\x1d\n" + + "\n" + + "sort_order\x18\t \x01(\x05R\tsortOrder\x12!\n" + + "\fproduct_name\x18\n" + + " \x01(\tR\vproductName\x12 \n" + + "\vdescription\x18\v \x01(\tR\vdescription\x12\x1a\n" + + "\bplatform\x18\f \x01(\tR\bplatform\x12\x1d\n" + + "\n" + + "region_ids\x18\r \x03(\x03R\tregionIds\x12.\n" + + "\x13resource_asset_type\x18\x0e \x01(\tR\x11resourceAssetType\x12!\n" + + "\famount_micro\x18\x0f \x01(\x03R\vamountMicro\x12+\n" + + "\x12created_by_user_id\x18\x10 \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\x11 \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x12 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x13 \x01(\x03R\vupdatedAtMs\x12\x19\n" + + "\bapp_code\x18\x14 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x15 \x01(\tR\x06status\x12#\n" + + "\raudience_type\x18\x16 \x01(\tR\faudienceType\x12\x1f\n" + + "\vapp_visible\x18\x17 \x01(\bR\n" + + "appVisible\"\xce\x01\n" + + "\x1bListRechargeProductsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x04 \x01(\x03R\bregionId\x12\x1a\n" + + "\bplatform\x18\x05 \x01(\tR\bplatform\x12#\n" + + "\raudience_type\x18\x06 \x01(\tR\faudienceType\"x\n" + + "\x1cListRechargeProductsResponse\x12<\n" + + "\bproducts\x18\x01 \x03(\v2 .hyapp.wallet.v1.RechargeProductR\bproducts\x12\x1a\n" + + "\bchannels\x18\x02 \x03(\tR\bchannels\"\x9c\x03\n" + + "\x1bConfirmGooglePaymentRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1d\n" + + "\n" + + "product_id\x18\x06 \x01(\x03R\tproductId\x12!\n" + + "\fproduct_code\x18\a \x01(\tR\vproductCode\x12!\n" + + "\fpackage_name\x18\b \x01(\tR\vpackageName\x12%\n" + + "\x0epurchase_token\x18\t \x01(\tR\rpurchaseToken\x12\x19\n" + + "\border_id\x18\n" + + " \x01(\tR\aorderId\x12(\n" + + "\x10purchase_time_ms\x18\v \x01(\x03R\x0epurchaseTimeMs\x12\x1d\n" + + "\n" + + "country_id\x18\f \x01(\x03R\tcountryId\"\xf5\x02\n" + + "\x1cConfirmGooglePaymentResponse\x12(\n" + + "\x10payment_order_id\x18\x01 \x01(\tR\x0epaymentOrderId\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "product_id\x18\x04 \x01(\x03R\tproductId\x12!\n" + + "\fproduct_code\x18\x05 \x01(\tR\vproductCode\x12\x1f\n" + + "\vcoin_amount\x18\x06 \x01(\x03R\n" + + "coinAmount\x127\n" + + "\abalance\x18\a \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12+\n" + + "\x11idempotent_replay\x18\b \x01(\bR\x10idempotentReplay\x12#\n" + + "\rconsume_state\x18\t \x01(\tR\fconsumeState\"\x9d\x02\n" + + " ListAdminRechargeProductsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1a\n" + + "\bplatform\x18\x04 \x01(\tR\bplatform\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x18\n" + + "\akeyword\x18\x06 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\a \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\x12#\n" + + "\raudience_type\x18\t \x01(\tR\faudienceType\"w\n" + + "!ListAdminRechargeProductsResponse\x12<\n" + + "\bproducts\x18\x01 \x03(\v2 .hyapp.wallet.v1.RechargeProductR\bproducts\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xbb\x03\n" + + "\x1cCreateRechargeProductRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12!\n" + + "\famount_micro\x18\x03 \x01(\x03R\vamountMicro\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12!\n" + + "\fproduct_name\x18\x05 \x01(\tR\vproductName\x12 \n" + + "\vdescription\x18\x06 \x01(\tR\vdescription\x12\x1a\n" + + "\bplatform\x18\a \x01(\tR\bplatform\x12\x1d\n" + + "\n" + + "region_ids\x18\b \x03(\x03R\tregionIds\x12\x18\n" + + "\aenabled\x18\t \x01(\bR\aenabled\x12(\n" + + "\x10operator_user_id\x18\n" + + " \x01(\x03R\x0eoperatorUserId\x12#\n" + + "\raudience_type\x18\v \x01(\tR\faudienceType\x12$\n" + + "\vapp_visible\x18\f \x01(\bH\x00R\n" + + "appVisible\x88\x01\x01B\x0e\n" + + "\f_app_visible\"\xda\x03\n" + + "\x1cUpdateRechargeProductRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "product_id\x18\x03 \x01(\x03R\tproductId\x12!\n" + + "\famount_micro\x18\x04 \x01(\x03R\vamountMicro\x12\x1f\n" + + "\vcoin_amount\x18\x05 \x01(\x03R\n" + + "coinAmount\x12!\n" + + "\fproduct_name\x18\x06 \x01(\tR\vproductName\x12 \n" + + "\vdescription\x18\a \x01(\tR\vdescription\x12\x1a\n" + + "\bplatform\x18\b \x01(\tR\bplatform\x12\x1d\n" + + "\n" + + "region_ids\x18\t \x03(\x03R\tregionIds\x12\x18\n" + + "\aenabled\x18\n" + + " \x01(\bR\aenabled\x12(\n" + + "\x10operator_user_id\x18\v \x01(\x03R\x0eoperatorUserId\x12#\n" + + "\raudience_type\x18\f \x01(\tR\faudienceType\x12$\n" + + "\vapp_visible\x18\r \x01(\bH\x00R\n" + + "appVisible\x88\x01\x01B\x0e\n" + + "\f_app_visible\"\xa1\x01\n" + + "\x1cDeleteRechargeProductRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "product_id\x18\x03 \x01(\x03R\tproductId\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"U\n" + + "\x17RechargeProductResponse\x12:\n" + + "\aproduct\x18\x01 \x01(\v2 .hyapp.wallet.v1.RechargeProductR\aproduct\"9\n" + + "\x1dDeleteRechargeProductResponse\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\"\xa6\x04\n" + + "\x17ThirdPartyPaymentMethod\x12\x1b\n" + + "\tmethod_id\x18\x01 \x01(\x03R\bmethodId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rprovider_code\x18\x03 \x01(\tR\fproviderCode\x12#\n" + + "\rprovider_name\x18\x04 \x01(\tR\fproviderName\x12!\n" + + "\fcountry_code\x18\x05 \x01(\tR\vcountryCode\x12!\n" + + "\fcountry_name\x18\x06 \x01(\tR\vcountryName\x12#\n" + + "\rcurrency_code\x18\a \x01(\tR\fcurrencyCode\x12\x17\n" + + "\apay_way\x18\b \x01(\tR\x06payWay\x12\x19\n" + + "\bpay_type\x18\t \x01(\tR\apayType\x12\x1f\n" + + "\vmethod_name\x18\n" + + " \x01(\tR\n" + + "methodName\x12\x19\n" + + "\blogo_url\x18\v \x01(\tR\alogoUrl\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12/\n" + + "\x14usd_to_currency_rate\x18\r \x01(\tR\x11usdToCurrencyRate\x12\x1d\n" + + "\n" + + "sort_order\x18\x0e \x01(\x05R\tsortOrder\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\"\xfa\x01\n" + + "\x18ThirdPartyPaymentChannel\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12#\n" + + "\rprovider_code\x18\x02 \x01(\tR\fproviderCode\x12#\n" + + "\rprovider_name\x18\x03 \x01(\tR\fproviderName\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "sort_order\x18\x05 \x01(\x05R\tsortOrder\x12B\n" + + "\amethods\x18\x06 \x03(\v2(.hyapp.wallet.v1.ThirdPartyPaymentMethodR\amethods\"\xd7\x01\n" + + "$ListThirdPartyPaymentChannelsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rprovider_code\x18\x03 \x01(\tR\fproviderCode\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x128\n" + + "\x18include_disabled_methods\x18\x05 \x01(\bR\x16includeDisabledMethods\"n\n" + + "%ListThirdPartyPaymentChannelsResponse\x12E\n" + + "\bchannels\x18\x01 \x03(\v2).hyapp.wallet.v1.ThirdPartyPaymentChannelR\bchannels\"\xc4\x01\n" + + "'SetThirdPartyPaymentMethodStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tmethod_id\x18\x03 \x01(\x03R\bmethodId\x12\x18\n" + + "\aenabled\x18\x04 \x01(\bR\aenabled\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"c\n" + + "\x1fThirdPartyPaymentMethodResponse\x12@\n" + + "\x06method\x18\x01 \x01(\v2(.hyapp.wallet.v1.ThirdPartyPaymentMethodR\x06method\"\xd6\x01\n" + + "\"UpdateThirdPartyPaymentRateRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tmethod_id\x18\x03 \x01(\x03R\bmethodId\x12/\n" + + "\x14usd_to_currency_rate\x18\x04 \x01(\tR\x11usdToCurrencyRate\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"\x98\x01\n" + + " ThirdPartyPaymentMethodSyncIssue\x12!\n" + + "\fcountry_code\x18\x01 \x01(\tR\vcountryCode\x12#\n" + + "\rcurrency_code\x18\x02 \x01(\tR\fcurrencyCode\x12\x12\n" + + "\x04code\x18\x03 \x01(\tR\x04code\x12\x18\n" + + "\amessage\x18\x04 \x01(\tR\amessage\"\xae\x01\n" + + "#SyncThirdPartyPaymentMethodsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rprovider_code\x18\x03 \x01(\tR\fproviderCode\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"\xed\x02\n" + + "$SyncThirdPartyPaymentMethodsResponse\x12#\n" + + "\rprovider_code\x18\x01 \x01(\tR\fproviderCode\x122\n" + + "\x15scanned_country_count\x18\x02 \x01(\x05R\x13scannedCountryCount\x122\n" + + "\x15fetched_country_count\x18\x03 \x01(\x05R\x13fetchedCountryCount\x12#\n" + + "\rcreated_count\x18\x04 \x01(\x05R\fcreatedCount\x12#\n" + + "\rupdated_count\x18\x05 \x01(\x05R\fupdatedCount\x12#\n" + + "\rskipped_count\x18\x06 \x01(\x05R\fskippedCount\x12I\n" + + "\x06issues\x18\a \x03(\v21.hyapp.wallet.v1.ThirdPartyPaymentMethodSyncIssueR\x06issues\"\xf9\x01\n" + + "\x18H5RechargeOptionsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12(\n" + + "\x10target_region_id\x18\x04 \x01(\x03R\x0etargetRegionId\x12.\n" + + "\x13target_country_code\x18\x05 \x01(\tR\x11targetCountryCode\x12#\n" + + "\raudience_type\x18\x06 \x01(\tR\faudienceType\"\x88\x02\n" + + "\x19H5RechargeOptionsResponse\x12<\n" + + "\bproducts\x18\x01 \x03(\v2 .hyapp.wallet.v1.RechargeProductR\bproducts\x12Q\n" + + "\x0fpayment_methods\x18\x02 \x03(\v2(.hyapp.wallet.v1.ThirdPartyPaymentMethodR\x0epaymentMethods\x12,\n" + + "\x12usdt_trc20_enabled\x18\x03 \x01(\bR\x10usdtTrc20Enabled\x12,\n" + + "\x12usdt_trc20_address\x18\x04 \x01(\tR\x10usdtTrc20Address\"\x8e\b\n" + + "\x15ExternalRechargeOrder\x12\x19\n" + + "\border_id\x18\x01 \x01(\tR\aorderId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12(\n" + + "\x10target_region_id\x18\x04 \x01(\x03R\x0etargetRegionId\x12.\n" + + "\x13target_country_code\x18\x05 \x01(\tR\x11targetCountryCode\x12#\n" + + "\raudience_type\x18\x06 \x01(\tR\faudienceType\x12\x1d\n" + + "\n" + + "product_id\x18\a \x01(\x03R\tproductId\x12!\n" + + "\fproduct_name\x18\b \x01(\tR\vproductName\x12\x1f\n" + + "\vcoin_amount\x18\t \x01(\x03R\n" + + "coinAmount\x12(\n" + + "\x10usd_minor_amount\x18\n" + + " \x01(\x03R\x0eusdMinorAmount\x12#\n" + + "\rprovider_code\x18\v \x01(\tR\fproviderCode\x12*\n" + + "\x11payment_method_id\x18\f \x01(\x03R\x0fpaymentMethodId\x12!\n" + + "\fcountry_code\x18\r \x01(\tR\vcountryCode\x12#\n" + + "\rcurrency_code\x18\x0e \x01(\tR\fcurrencyCode\x122\n" + + "\x15provider_amount_minor\x18\x0f \x01(\x03R\x13providerAmountMinor\x12\x17\n" + + "\apay_way\x18\x10 \x01(\tR\x06payWay\x12\x19\n" + + "\bpay_type\x18\x11 \x01(\tR\apayType\x12\x17\n" + + "\apay_url\x18\x12 \x01(\tR\x06payUrl\x12*\n" + + "\x11provider_order_id\x18\x13 \x01(\tR\x0fproviderOrderId\x12\x17\n" + + "\atx_hash\x18\x14 \x01(\tR\x06txHash\x12'\n" + + "\x0freceive_address\x18\x15 \x01(\tR\x0ereceiveAddress\x12\x16\n" + + "\x06status\x18\x16 \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\x17 \x01(\tR\rfailureReason\x12%\n" + + "\x0etransaction_id\x18\x18 \x01(\tR\rtransactionId\x12\"\n" + + "\rcreated_at_ms\x18\x19 \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x1a \x01(\x03R\vupdatedAtMs\x12+\n" + + "\x11idempotent_replay\x18\x1b \x01(\bR\x10idempotentReplay\x12*\n" + + "\x11target_country_id\x18\x1c \x01(\x03R\x0ftargetCountryId\"\x94\x05\n" + + "\x1cCreateH5RechargeOrderRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12(\n" + + "\x10target_region_id\x18\x05 \x01(\x03R\x0etargetRegionId\x12.\n" + + "\x13target_country_code\x18\x06 \x01(\tR\x11targetCountryCode\x12#\n" + + "\raudience_type\x18\a \x01(\tR\faudienceType\x12\x1d\n" + + "\n" + + "product_id\x18\b \x01(\x03R\tproductId\x12#\n" + + "\rprovider_code\x18\t \x01(\tR\fproviderCode\x12*\n" + + "\x11payment_method_id\x18\n" + + " \x01(\x03R\x0fpaymentMethodId\x12\x1d\n" + + "\n" + + "return_url\x18\v \x01(\tR\treturnUrl\x12\x1d\n" + + "\n" + + "notify_url\x18\f \x01(\tR\tnotifyUrl\x12\x1b\n" + + "\tclient_ip\x18\r \x01(\tR\bclientIp\x12\x1a\n" + + "\blanguage\x18\x0e \x01(\tR\blanguage\x12\x1d\n" + + "\n" + + "payer_name\x18\x0f \x01(\tR\tpayerName\x12#\n" + + "\rpayer_account\x18\x10 \x01(\tR\fpayerAccount\x12\x1f\n" + + "\vpayer_email\x18\x11 \x01(\tR\n" + + "payerEmail\x12*\n" + + "\x11target_country_id\x18\x12 \x01(\x03R\x0ftargetCountryId\"\xf6\x03\n" + + "#CreateTemporaryRechargeOrderRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x1f\n" + + "\vcoin_amount\x18\x04 \x01(\x03R\n" + + "coinAmount\x12(\n" + + "\x10usd_minor_amount\x18\x05 \x01(\x03R\x0eusdMinorAmount\x12#\n" + + "\rprovider_code\x18\x06 \x01(\tR\fproviderCode\x12*\n" + + "\x11payment_method_id\x18\a \x01(\x03R\x0fpaymentMethodId\x12\x1d\n" + + "\n" + + "return_url\x18\b \x01(\tR\treturnUrl\x12\x1d\n" + + "\n" + + "notify_url\x18\t \x01(\tR\tnotifyUrl\x12\x1b\n" + + "\tclient_ip\x18\n" + + " \x01(\tR\bclientIp\x12\x1a\n" + + "\blanguage\x18\v \x01(\tR\blanguage\x12\x1d\n" + + "\n" + + "payer_name\x18\f \x01(\tR\tpayerName\x12#\n" + + "\rpayer_account\x18\r \x01(\tR\fpayerAccount\x12\x1f\n" + + "\vpayer_email\x18\x0e \x01(\tR\n" + + "payerEmail\"w\n" + + " GetTemporaryRechargeOrderRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\border_id\x18\x03 \x01(\tR\aorderId\"\xe6\x01\n" + + "\"ListTemporaryRechargeOrdersRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12#\n" + + "\rprovider_code\x18\x04 \x01(\tR\fproviderCode\x12\x18\n" + + "\akeyword\x18\x05 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\"{\n" + + "#ListTemporaryRechargeOrdersResponse\x12>\n" + + "\x06orders\x18\x01 \x03(\v2&.hyapp.wallet.v1.ExternalRechargeOrderR\x06orders\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xaf\x01\n" + + "\x19SubmitH5RechargeTxRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\border_id\x18\x03 \x01(\tR\aorderId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x17\n" + + "\atx_hash\x18\x05 \x01(\tR\x06txHash\"\x96\x01\n" + + "\x19GetH5RechargeOrderRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\border_id\x18\x03 \x01(\tR\aorderId\x12$\n" + + "\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\"W\n" + + "\x17H5RechargeOrderResponse\x12<\n" + + "\x05order\x18\x01 \x01(\v2&.hyapp.wallet.v1.ExternalRechargeOrderR\x05order\"\x8a\x04\n" + + "&VerifyCoinSellerRechargeReceiptRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rprovider_code\x18\x03 \x01(\tR\fproviderCode\x12*\n" + + "\x11external_order_no\x18\x04 \x01(\tR\x0fexternalOrderNo\x12\x14\n" + + "\x05chain\x18\x05 \x01(\tR\x05chain\x12(\n" + + "\x10usd_minor_amount\x18\x06 \x01(\x03R\x0eusdMinorAmount\x12\"\n" + + "\rorder_date_ms\x18\a \x01(\x03R\vorderDateMs\x122\n" + + "\x15provider_country_code\x18\b \x01(\tR\x13providerCountryCode\x124\n" + + "\x16provider_currency_code\x18\t \x01(\tR\x14providerCurrencyCode\x12*\n" + + "\x11provider_pay_type\x18\n" + + " \x01(\tR\x0fproviderPayType\x122\n" + + "\x15provider_amount_minor\x18\v \x01(\x03R\x13providerAmountMinor\x12'\n" + + "\x0freceive_address\x18\f \x01(\tR\x0ereceiveAddress\"\xda\x03\n" + + "'VerifyCoinSellerRechargeReceiptResponse\x12\x1a\n" + + "\bverified\x18\x01 \x01(\bR\bverified\x12#\n" + + "\rprovider_code\x18\x02 \x01(\tR\fproviderCode\x12*\n" + + "\x11external_order_no\x18\x03 \x01(\tR\x0fexternalOrderNo\x12*\n" + + "\x11provider_order_id\x18\x04 \x01(\tR\x0fproviderOrderId\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12#\n" + + "\rcurrency_code\x18\x06 \x01(\tR\fcurrencyCode\x122\n" + + "\x15provider_amount_minor\x18\a \x01(\x03R\x13providerAmountMinor\x12\x19\n" + + "\braw_json\x18\b \x01(\tR\arawJson\x12\x14\n" + + "\x05chain\x18\t \x01(\tR\x05chain\x12'\n" + + "\x0freceive_address\x18\n" + + " \x01(\tR\x0ereceiveAddress\x12$\n" + + "\x0everified_at_ms\x18\v \x01(\x03R\fverifiedAtMs\x12%\n" + + "\x0efailure_reason\x18\f \x01(\tR\rfailureReason\"\x9f\x01\n" + + "\x1aHandleMifapayNotifyRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1f\n" + + "\vmer_account\x18\x03 \x01(\tR\n" + + "merAccount\x12\x12\n" + + "\x04data\x18\x04 \x01(\tR\x04data\x12\x12\n" + + "\x04sign\x18\x05 \x01(\tR\x04sign\"y\n" + + "\x1bHandleMifapayNotifyResponse\x12\x1a\n" + + "\baccepted\x18\x01 \x01(\bR\baccepted\x12#\n" + + "\rresponse_text\x18\x02 \x01(\tR\fresponseText\x12\x19\n" + + "\border_id\x18\x03 \x01(\tR\aorderId\"\xf9\x01\n" + + "\x18HandleV5PayNotifyRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\braw_json\x18\x03 \x01(\tR\arawJson\x12M\n" + + "\x06fields\x18\x04 \x03(\v25.hyapp.wallet.v1.HandleV5PayNotifyRequest.FieldsEntryR\x06fields\x1a9\n" + + "\vFieldsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"w\n" + + "\x19HandleV5PayNotifyResponse\x12\x1a\n" + + "\baccepted\x18\x01 \x01(\bR\baccepted\x12#\n" + + "\rresponse_text\x18\x02 \x01(\tR\fresponseText\x12\x19\n" + + "\border_id\x18\x03 \x01(\tR\aorderId\"\xde\x01\n" + + "\x13DiamondExchangeRule\x12#\n" + + "\rexchange_type\x18\x01 \x01(\tR\fexchangeType\x12&\n" + + "\x0ffrom_asset_type\x18\x02 \x01(\tR\rfromAssetType\x12\"\n" + + "\rto_asset_type\x18\x03 \x01(\tR\vtoAssetType\x12\x1f\n" + + "\vfrom_amount\x18\x04 \x01(\x03R\n" + + "fromAmount\x12\x1b\n" + + "\tto_amount\x18\x05 \x01(\x03R\btoAmount\x12\x18\n" + + "\aenabled\x18\x06 \x01(\bR\aenabled\"t\n" + + "\x1fGetDiamondExchangeConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"^\n" + + " GetDiamondExchangeConfigResponse\x12:\n" + + "\x05rules\x18\x01 \x03(\v2$.hyapp.wallet.v1.DiamondExchangeRuleR\x05rules\"\xfa\x03\n" + + "\x11WalletTransaction\x12\x19\n" + + "\bentry_id\x18\x01 \x01(\x03R\aentryId\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x19\n" + + "\bbiz_type\x18\x03 \x01(\tR\abizType\x12\x1d\n" + + "\n" + + "asset_type\x18\x04 \x01(\tR\tassetType\x12'\n" + + "\x0favailable_delta\x18\x05 \x01(\x03R\x0eavailableDelta\x12!\n" + + "\ffrozen_delta\x18\x06 \x01(\x03R\vfrozenDelta\x12'\n" + + "\x0favailable_after\x18\a \x01(\x03R\x0eavailableAfter\x12!\n" + + "\ffrozen_after\x18\b \x01(\x03R\vfrozenAfter\x120\n" + + "\x14counterparty_user_id\x18\t \x01(\x03R\x12counterpartyUserId\x12\x17\n" + + "\aroom_id\x18\n" + + " \x01(\tR\x06roomId\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12,\n" + + "\x12transfer_usd_minor\x18\f \x01(\x03R\x10transferUsdMinor\x124\n" + + "\x16transfer_currency_code\x18\r \x01(\tR\x14transferCurrencyCode\"\xc2\x01\n" + + "\x1dListWalletTransactionsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1d\n" + + "\n" + + "asset_type\x18\x04 \x01(\tR\tassetType\x12\x12\n" + + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"~\n" + + "\x1eListWalletTransactionsResponse\x12F\n" + + "\ftransactions\x18\x01 \x03(\v2\".hyapp.wallet.v1.WalletTransactionR\ftransactions\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xb1\x02\n" + + "\rVipRewardItem\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_code\x18\x02 \x01(\tR\fresourceCode\x12#\n" + + "\rresource_type\x18\x03 \x01(\tR\fresourceType\x12\x12\n" + + "\x04name\x18\x04 \x01(\tR\x04name\x12\x1a\n" + + "\bquantity\x18\x05 \x01(\x03R\bquantity\x12\"\n" + + "\rexpires_at_ms\x18\x06 \x01(\x03R\vexpiresAtMs\x12\x1b\n" + + "\tasset_url\x18\a \x01(\tR\bassetUrl\x12\x1f\n" + + "\vpreview_url\x18\b \x01(\tR\n" + + "previewUrl\x12#\n" + + "\ranimation_url\x18\t \x01(\tR\fanimationUrl\"\xdb\x04\n" + + "\x10VipProgramConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12!\n" + + "\fprogram_type\x18\x02 \x01(\tR\vprogramType\x12\x1f\n" + + "\vlevel_count\x18\x03 \x01(\x05R\n" + + "levelCount\x127\n" + + "\x18same_level_expiry_policy\x18\x04 \x01(\tR\x15sameLevelExpiryPolicy\x122\n" + + "\x15upgrade_expiry_policy\x18\x05 \x01(\tR\x13upgradeExpiryPolicy\x12:\n" + + "\x19downgrade_purchase_policy\x18\x06 \x01(\tR\x17downgradePurchasePolicy\x12<\n" + + "\x1abenefit_inheritance_policy\x18\a \x01(\tR\x18benefitInheritancePolicy\x12\x1d\n" + + "\n" + + "grant_mode\x18\b \x01(\tR\tgrantMode\x12,\n" + + "\x12trial_card_enabled\x18\t \x01(\bR\x10trialCardEnabled\x12\x16\n" + + "\x06status\x18\n" + + " \x01(\tR\x06status\x12%\n" + + "\x0econfig_version\x18\v \x01(\x03R\rconfigVersion\x12-\n" + + "\x13updated_by_admin_id\x18\f \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"\xe0\x03\n" + + "\n" + + "VipBenefit\x12!\n" + + "\fbenefit_code\x18\x01 \x01(\tR\vbenefitCode\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12!\n" + + "\fbenefit_type\x18\x03 \x01(\tR\vbenefitType\x12!\n" + + "\funlock_level\x18\x04 \x01(\x05R\vunlockLevel\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12#\n" + + "\rtrial_enabled\x18\x06 \x01(\bR\ftrialEnabled\x12\x1f\n" + + "\vresource_id\x18\a \x01(\x03R\n" + + "resourceId\x12#\n" + + "\rresource_type\x18\b \x01(\tR\fresourceType\x12'\n" + + "\x0fexecution_scope\x18\t \x01(\tR\x0eexecutionScope\x12\x1d\n" + + "\n" + + "auto_equip\x18\n" + + " \x01(\bR\tautoEquip\x12\x1d\n" + + "\n" + + "sort_order\x18\v \x01(\x05R\tsortOrder\x12#\n" + + "\rmetadata_json\x18\f \x01(\tR\fmetadataJson\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"\xdc\x05\n" + + "\bVipLevel\x12\x14\n" + + "\x05level\x18\x01 \x01(\x05R\x05level\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "price_coin\x18\x04 \x01(\x03R\tpriceCoin\x12\x1f\n" + + "\vduration_ms\x18\x05 \x01(\x03R\n" + + "durationMs\x127\n" + + "\x18reward_resource_group_id\x18\x06 \x01(\x03R\x15rewardResourceGroupId\x12A\n" + + "\freward_items\x18\a \x03(\v2\x1e.hyapp.wallet.v1.VipRewardItemR\vrewardItems\x12!\n" + + "\fcan_purchase\x18\b \x01(\bR\vcanPurchase\x12\x1d\n" + + "\n" + + "sort_order\x18\t \x01(\x05R\tsortOrder\x124\n" + + "\x16recharge_gate_required\x18\n" + + " \x01(\bR\x14rechargeGateRequired\x12A\n" + + "\x1drequired_recharge_coin_amount\x18\v \x01(\x03R\x1arequiredRechargeCoinAmount\x129\n" + + "\x19user_recharge_coin_amount\x18\f \x01(\x03R\x16userRechargeCoinAmount\x124\n" + + "\x16purchase_locked_reason\x18\r \x01(\tR\x14purchaseLockedReason\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\x127\n" + + "\bbenefits\x18\x10 \x03(\v2\x1b.hyapp.wallet.v1.VipBenefitR\bbenefits\x12%\n" + + "\x0econfig_version\x18\x11 \x01(\x03R\rconfigVersion\"\x9a\x02\n" + + "\aUserVip\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x14\n" + + "\x05level\x18\x02 \x01(\x05R\x05level\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x16\n" + + "\x06active\x18\x04 \x01(\bR\x06active\x12\"\n" + + "\rstarted_at_ms\x18\x05 \x01(\x03R\vstartedAtMs\x12\"\n" + + "\rexpires_at_ms\x18\x06 \x01(\x03R\vexpiresAtMs\x12\"\n" + + "\rupdated_at_ms\x18\a \x01(\x03R\vupdatedAtMs\x12!\n" + + "\fprogram_type\x18\b \x01(\tR\vprogramType\x12%\n" + + "\x0econfig_version\x18\t \x01(\x03R\rconfigVersion\"\xa5\x04\n" + + "\fVipTrialCard\x12\"\n" + + "\rtrial_card_id\x18\x01 \x01(\tR\vtrialCardId\x12%\n" + + "\x0eentitlement_id\x18\x02 \x01(\tR\rentitlementId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12\x14\n" + + "\x05level\x18\x05 \x01(\x05R\x05level\x12\x12\n" + + "\x04name\x18\x06 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\x1a\n" + + "\bequipped\x18\b \x01(\bR\bequipped\x12\x1f\n" + + "\vduration_ms\x18\t \x01(\x03R\n" + + "durationMs\x12&\n" + + "\x0feffective_at_ms\x18\n" + + " \x01(\x03R\reffectiveAtMs\x12\"\n" + + "\rexpires_at_ms\x18\v \x01(\x03R\vexpiresAtMs\x122\n" + + "\x15remaining_duration_ms\x18\f \x01(\x03R\x13remainingDurationMs\x12!\n" + + "\fgrant_source\x18\r \x01(\tR\vgrantSource\x12&\n" + + "\x0fsource_grant_id\x18\x0e \x01(\tR\rsourceGrantId\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\"\xe5\x01\n" + + "\x0fVipUserSettings\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x129\n" + + "\x19room_entry_notice_enabled\x18\x03 \x01(\bR\x16roomEntryNoticeEnabled\x12?\n" + + "\x1conline_global_notice_enabled\x18\x04 \x01(\bR\x19onlineGlobalNoticeEnabled\x12\"\n" + + "\rupdated_at_ms\x18\x05 \x01(\x03R\vupdatedAtMs\"\xfd\x03\n" + + "\bVipState\x123\n" + + "\bpaid_vip\x18\x01 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\apaidVip\x12M\n" + + "\x13equipped_trial_card\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.VipTrialCardR\x11equippedTrialCard\x12=\n" + + "\reffective_vip\x18\x03 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\feffectiveVip\x12)\n" + + "\x10effective_source\x18\x04 \x01(\tR\x0feffectiveSource\x12J\n" + + "\x12effective_benefits\x18\x05 \x03(\v2\x1b.hyapp.wallet.v1.VipBenefitR\x11effectiveBenefits\x12&\n" + + "\x0fevaluated_at_ms\x18\x06 \x01(\x03R\revaluatedAtMs\x12H\n" + + "\x0eprogram_config\x18\a \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\rprogramConfig\x12E\n" + + "\ruser_settings\x18\b \x01(\v2 .hyapp.wallet.v1.VipUserSettingsR\fuserSettings\"k\n" + + "\x16ListVipPackagesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\x86\x02\n" + + "\x17ListVipPackagesResponse\x129\n" + + "\vcurrent_vip\x18\x01 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\n" + + "currentVip\x125\n" + + "\bpackages\x18\x02 \x03(\v2\x19.hyapp.wallet.v1.VipLevelR\bpackages\x12/\n" + + "\x05state\x18\x03 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\x12H\n" + + "\x0eprogram_config\x18\x04 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\rprogramConfig\"d\n" + + "\x0fGetMyVipRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"o\n" + + "\x10GetMyVipResponse\x12*\n" + + "\x03vip\x18\x01 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\x03vip\x12/\n" + + "\x05state\x18\x02 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\"}\n" + + "\x12PurchaseVipRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x14\n" + + "\x05level\x18\x04 \x01(\x05R\x05level\"\xc4\x02\n" + + "\x13PurchaseVipResponse\x12\x19\n" + + "\border_id\x18\x01 \x01(\tR\aorderId\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12*\n" + + "\x03vip\x18\x03 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\x03vip\x12\x1d\n" + + "\n" + + "coin_spent\x18\x04 \x01(\x03R\tcoinSpent\x12,\n" + + "\x12coin_balance_after\x18\x05 \x01(\x03R\x10coinBalanceAfter\x12A\n" + + "\freward_items\x18\x06 \x03(\v2\x1e.hyapp.wallet.v1.VipRewardItemR\vrewardItems\x12/\n" + + "\x05state\x18\a \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\"\xd3\x01\n" + + "\x18DebitCPBreakupFeeRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12'\n" + + "\x0frelationship_id\x18\x04 \x01(\tR\x0erelationshipId\x12#\n" + + "\rrelation_type\x18\x05 \x01(\tR\frelationType\x12\x16\n" + + "\x06amount\x18\x06 \x01(\x03R\x06amount\"\xc8\x01\n" + + "\x19DebitCPBreakupFeeResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x02 \x01(\x03R\tcoinSpent\x12,\n" + + "\x12coin_balance_after\x18\x03 \x01(\x03R\x10coinBalanceAfter\x127\n" + + "\abalance\x18\x04 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\"\xbc\x01\n" + + "\x15DebitWheelDrawRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x19\n" + + "\bwheel_id\x18\x04 \x01(\tR\awheelId\x12\x1d\n" + + "\n" + + "draw_count\x18\x05 \x01(\x05R\tdrawCount\x12\x16\n" + + "\x06amount\x18\x06 \x01(\x03R\x06amount\"\xc5\x01\n" + + "\x16DebitWheelDrawResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12\x1d\n" + + "\n" + + "coin_spent\x18\x02 \x01(\x03R\tcoinSpent\x12,\n" + + "\x12coin_balance_after\x18\x03 \x01(\x03R\x10coinBalanceAfter\x127\n" + + "\abalance\x18\x04 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\"\xec\x01\n" + + "\x0fGrantVipRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x14\n" + + "\x05level\x18\x04 \x01(\x05R\x05level\x12!\n" + + "\fgrant_source\x18\x05 \x01(\tR\vgrantSource\x12(\n" + + "\x10operator_user_id\x18\x06 \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\a \x01(\tR\x06reason\"\xff\x01\n" + + "\x10GrantVipResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12*\n" + + "\x03vip\x18\x02 \x01(\v2\x18.hyapp.wallet.v1.UserVipR\x03vip\x12A\n" + + "\freward_items\x18\x03 \x03(\v2\x1e.hyapp.wallet.v1.VipRewardItemR\vrewardItems\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\x12/\n" + + "\x05state\x18\x05 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\"V\n" + + "\x1aGetVipProgramConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\"\xb7\x01\n" + + "\x1bGetVipProgramConfigResponse\x129\n" + + "\x06config\x18\x01 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\x06config\x127\n" + + "\bbenefits\x18\x02 \x03(\v2\x1b.hyapp.wallet.v1.VipBenefitR\bbenefits\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xc3\x01\n" + + "\"UpdateAdminVipProgramConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x129\n" + + "\x06config\x18\x03 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\x06config\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"\x86\x01\n" + + "#UpdateAdminVipProgramConfigResponse\x129\n" + + "\x06config\x18\x01 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb4\x02\n" + + "\x1aUpdateMyVipSettingsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12>\n" + + "\x19room_entry_notice_enabled\x18\x04 \x01(\bH\x00R\x16roomEntryNoticeEnabled\x88\x01\x01\x12D\n" + + "\x1conline_global_notice_enabled\x18\x05 \x01(\bH\x01R\x19onlineGlobalNoticeEnabled\x88\x01\x01B\x1c\n" + + "\x1a_room_entry_notice_enabledB\x1f\n" + + "\x1d_online_global_notice_enabled\"\x81\x01\n" + + "\x1bUpdateMyVipSettingsResponse\x12<\n" + + "\bsettings\x18\x01 \x01(\v2 .hyapp.wallet.v1.VipUserSettingsR\bsettings\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xd2\x03\n" + + "\x15VipDailyCoinRebateRun\x12\x15\n" + + "\x06run_id\x18\x01 \x01(\tR\x05runId\x12\x19\n" + + "\btask_day\x18\x02 \x01(\tR\ataskDay\x12 \n" + + "\fday_start_ms\x18\x03 \x01(\x03R\n" + + "dayStartMs\x12\x1c\n" + + "\n" + + "day_end_ms\x18\x04 \x01(\x03R\bdayEndMs\x12%\n" + + "\x0econfig_version\x18\x05 \x01(\x03R\rconfigVersion\x12,\n" + + "\x12level_amounts_json\x18\x06 \x01(\tR\x10levelAmountsJson\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12 \n" + + "\flast_user_id\x18\b \x01(\x03R\n" + + "lastUserId\x12#\n" + + "\rscanned_count\x18\t \x01(\x03R\fscannedCount\x12#\n" + + "\rcreated_count\x18\n" + + " \x01(\x03R\fcreatedCount\x12\"\n" + + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\f \x01(\x03R\vupdatedAtMs\x12&\n" + + "\x0fcompleted_at_ms\x18\r \x01(\x03R\rcompletedAtMs\"\xe9\x03\n" + + "\x12VipDailyCoinRebate\x12\x1b\n" + + "\trebate_id\x18\x01 \x01(\tR\brebateId\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x19\n" + + "\btask_day\x18\x03 \x01(\tR\ataskDay\x12\x1b\n" + + "\tvip_level\x18\x04 \x01(\x05R\bvipLevel\x12\x19\n" + + "\bvip_name\x18\x05 \x01(\tR\avipName\x12\x1f\n" + + "\vcoin_amount\x18\x06 \x01(\x03R\n" + + "coinAmount\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12&\n" + + "\x0favailable_at_ms\x18\b \x01(\x03R\ravailableAtMs\x12\"\n" + + "\rexpires_at_ms\x18\t \x01(\x03R\vexpiresAtMs\x12%\n" + + "\x0econfig_version\x18\n" + + " \x01(\x03R\rconfigVersion\x12\"\n" + + "\rclaimed_at_ms\x18\v \x01(\x03R\vclaimedAtMs\x122\n" + + "\x15wallet_transaction_id\x18\f \x01(\tR\x13walletTransactionId\x12\"\n" + + "\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"\x9b\x01\n" + + "%ProcessVipDailyCoinRebateBatchRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x19\n" + + "\btask_day\x18\x03 \x01(\tR\ataskDay\x12\x1d\n" + + "\n" + + "batch_size\x18\x04 \x01(\x05R\tbatchSize\"\xed\x01\n" + + "&ProcessVipDailyCoinRebateBatchResponse\x128\n" + + "\x03run\x18\x01 \x01(\v2&.hyapp.wallet.v1.VipDailyCoinRebateRunR\x03run\x12#\n" + + "\rscanned_count\x18\x02 \x01(\x05R\fscannedCount\x12#\n" + + "\rcreated_count\x18\x03 \x01(\x05R\fcreatedCount\x12\x19\n" + + "\bhas_more\x18\x04 \x01(\bR\ahasMore\x12$\n" + + "\x0eserver_time_ms\x18\x05 \x01(\x03R\fserverTimeMs\"z\n" + + "%GetMyCurrentVipDailyCoinRebateRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\xa1\x01\n" + + "&GetMyCurrentVipDailyCoinRebateResponse\x12\x14\n" + + "\x05found\x18\x01 \x01(\bR\x05found\x12;\n" + + "\x06rebate\x18\x02 \x01(\v2#.hyapp.wallet.v1.VipDailyCoinRebateR\x06rebate\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xcc\x01\n" + + "'ListMyVipDailyCoinRebateStatusesRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x12\n" + + "\x04page\x18\x04 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x05 \x01(\x05R\bpageSize\x12\x1d\n" + + "\n" + + "rebate_ids\x18\x06 \x03(\tR\trebateIds\"\xa5\x01\n" + + "(ListMyVipDailyCoinRebateStatusesResponse\x12=\n" + + "\arebates\x18\x01 \x03(\v2#.hyapp.wallet.v1.VipDailyCoinRebateR\arebates\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x90\x01\n" + + "\x1eClaimVipDailyCoinRebateRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" + + "\trebate_id\x18\x04 \x01(\tR\brebateId\"\xed\x01\n" + + "\x1fClaimVipDailyCoinRebateResponse\x12;\n" + + "\x06rebate\x18\x01 \x01(\v2#.hyapp.wallet.v1.VipDailyCoinRebateR\x06rebate\x12%\n" + + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12@\n" + + "\fcoin_balance\x18\x03 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\vcoinBalance\x12$\n" + + "\x0eserver_time_ms\x18\x04 \x01(\x03R\fserverTimeMs\"\xcc\x02\n" + + "\x18GrantVipTrialCardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x14\n" + + "\x05level\x18\x04 \x01(\x05R\x05level\x12\x1f\n" + + "\vduration_ms\x18\x05 \x01(\x03R\n" + + "durationMs\x12$\n" + + "\vresource_id\x18\x06 \x01(\x03H\x00R\n" + + "resourceId\x88\x01\x01\x12!\n" + + "\fgrant_source\x18\a \x01(\tR\vgrantSource\x12(\n" + + "\x10operator_user_id\x18\b \x01(\x03R\x0eoperatorUserId\x12\x16\n" + + "\x06reason\x18\t \x01(\tR\x06reasonB\x0e\n" + + "\f_resource_id\"\xb0\x01\n" + + "\x19GrantVipTrialCardResponse\x12<\n" + + "\n" + + "trial_card\x18\x01 \x01(\v2\x1d.hyapp.wallet.v1.VipTrialCardR\ttrialCard\x12/\n" + + "\x05state\x18\x02 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x94\x01\n" + + "\x18EquipVipTrialCardRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12%\n" + + "\x0eentitlement_id\x18\x04 \x01(\tR\rentitlementId\"\xb0\x01\n" + + "\x19EquipVipTrialCardResponse\x12<\n" + + "\n" + + "trial_card\x18\x01 \x01(\v2\x1d.hyapp.wallet.v1.VipTrialCardR\ttrialCard\x12/\n" + + "\x05state\x18\x02 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"o\n" + + "\x1aUnequipVipTrialCardRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\"\x94\x01\n" + + "\x1bUnequipVipTrialCardResponse\x12\x1e\n" + + "\n" + + "unequipped\x18\x01 \x01(\bR\n" + + "unequipped\x12/\n" + + "\x05state\x18\x02 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x8e\x01\n" + + "\x16CheckVipBenefitRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12!\n" + + "\fbenefit_code\x18\x04 \x01(\tR\vbenefitCode\"\xe8\x01\n" + + "\x17CheckVipBenefitResponse\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\x125\n" + + "\abenefit\x18\x02 \x01(\v2\x1b.hyapp.wallet.v1.VipBenefitR\abenefit\x12/\n" + + "\x05state\x18\x03 \x01(\v2\x19.hyapp.wallet.v1.VipStateR\x05state\x12#\n" + + "\rdenial_reason\x18\x04 \x01(\tR\fdenialReason\x12&\n" + + "\x0fevaluated_at_ms\x18\x05 \x01(\x03R\revaluatedAtMs\"\xea\x02\n" + + "\x12AdminVipLevelInput\x12\x14\n" + + "\x05level\x18\x01 \x01(\x05R\x05level\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" + + "\n" + + "price_coin\x18\x04 \x01(\x03R\tpriceCoin\x12\x1f\n" + + "\vduration_ms\x18\x05 \x01(\x03R\n" + + "durationMs\x127\n" + + "\x18reward_resource_group_id\x18\x06 \x01(\x03R\x15rewardResourceGroupId\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12A\n" + + "\x1drequired_recharge_coin_amount\x18\b \x01(\x03R\x1arequiredRechargeCoinAmount\x127\n" + + "\bbenefits\x18\t \x03(\v2\x1b.hyapp.wallet.v1.VipBenefitR\bbenefits\"U\n" + + "\x19ListAdminVipLevelsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\"\xbf\x01\n" + + "\x1aListAdminVipLevelsResponse\x121\n" + + "\x06levels\x18\x01 \x03(\v2\x19.hyapp.wallet.v1.VipLevelR\x06levels\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\x12H\n" + + "\x0eprogram_config\x18\x03 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\rprogramConfig\"\xbe\x01\n" + + "\x1bUpdateAdminVipLevelsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12;\n" + + "\x06levels\x18\x03 \x03(\v2#.hyapp.wallet.v1.AdminVipLevelInputR\x06levels\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"\xc1\x01\n" + + "\x1cUpdateAdminVipLevelsResponse\x121\n" + + "\x06levels\x18\x01 \x03(\v2\x19.hyapp.wallet.v1.VipLevelR\x06levels\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\x12H\n" + + "\x0eprogram_config\x18\x03 \x01(\v2!.hyapp.wallet.v1.VipProgramConfigR\rprogramConfig\"\xa8\x02\n" + + "\x17CreditTaskRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x1b\n" + + "\ttask_type\x18\x05 \x01(\tR\btaskType\x12\x17\n" + + "\atask_id\x18\x06 \x01(\tR\x06taskId\x12\x1b\n" + + "\tcycle_key\x18\a \x01(\tR\bcycleKey\x12\x16\n" + + "\x06reason\x18\b \x01(\tR\x06reason\x12*\n" + + "\x11reward_asset_type\x18\t \x01(\tR\x0frewardAssetType\"\xb6\x01\n" + + "\x18CreditTaskRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\xdd\x02\n" + + "\x1cCreditLuckyGiftRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x17\n" + + "\adraw_id\x18\x05 \x01(\tR\x06drawId\x12\x17\n" + + "\aroom_id\x18\x06 \x01(\tR\x06roomId\x12\x17\n" + + "\agift_id\x18\a \x01(\tR\x06giftId\x12\x17\n" + + "\apool_id\x18\b \x01(\tR\x06poolId\x12\x16\n" + + "\x06reason\x18\t \x01(\tR\x06reason\x12*\n" + + "\x11visible_region_id\x18\n" + + " \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" + + "\n" + + "country_id\x18\v \x01(\x03R\tcountryId\"\xbb\x01\n" + + "\x1dCreditLuckyGiftRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\xb4\x02\n" + + "\x18CreditWheelRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x17\n" + + "\adraw_id\x18\x05 \x01(\tR\x06drawId\x12\x19\n" + + "\bwheel_id\x18\x06 \x01(\tR\awheelId\x12(\n" + + "\x10selected_tier_id\x18\a \x01(\tR\x0eselectedTierId\x12\x16\n" + + "\x06reason\x18\b \x01(\tR\x06reason\x12*\n" + + "\x11visible_region_id\x18\t \x01(\x03R\x0fvisibleRegionId\"\xb7\x01\n" + + "\x19CreditWheelRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\x90\x03\n" + + "\x1fCreditRoomTurnoverRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12#\n" + + "\rsettlement_id\x18\x05 \x01(\tR\fsettlementId\x12\x17\n" + + "\aroom_id\x18\x06 \x01(\tR\x06roomId\x12&\n" + + "\x0fperiod_start_ms\x18\a \x01(\x03R\rperiodStartMs\x12\"\n" + + "\rperiod_end_ms\x18\b \x01(\x03R\vperiodEndMs\x12\x1d\n" + + "\n" + + "coin_spent\x18\t \x01(\x03R\tcoinSpent\x12\x17\n" + + "\atier_id\x18\n" + + " \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\v \x01(\tR\btierCode\x12\x16\n" + + "\x06reason\x18\f \x01(\tR\x06reason\"\xbe\x01\n" + + " CreditRoomTurnoverRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\xe7\x02\n" + + "!CreditInviteActivityRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12\x19\n" + + "\bclaim_id\x18\x05 \x01(\tR\aclaimId\x12\x1f\n" + + "\vreward_type\x18\x06 \x01(\tR\n" + + "rewardType\x12\x17\n" + + "\atier_id\x18\a \x01(\x03R\x06tierId\x12\x1b\n" + + "\ttier_code\x18\b \x01(\tR\btierCode\x12\x1b\n" + + "\tcycle_key\x18\t \x01(\tR\bcycleKey\x12#\n" + + "\rreached_value\x18\n" + + " \x01(\x03R\freachedValue\x12\x16\n" + + "\x06reason\x18\v \x01(\tR\x06reason\"\xc0\x01\n" + + "\"CreditInviteActivityRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\xcb\x02\n" + + " CreditAgencyOpeningRewardRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0etarget_user_id\x18\x03 \x01(\x03R\ftargetUserId\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x03R\x06amount\x12%\n" + + "\x0eapplication_id\x18\x05 \x01(\tR\rapplicationId\x12\x19\n" + + "\bcycle_id\x18\x06 \x01(\tR\acycleId\x12\x1b\n" + + "\tagency_id\x18\a \x01(\x03R\bagencyId\x12\x17\n" + + "\arank_no\x18\b \x01(\x05R\x06rankNo\x12\x1f\n" + + "\vscore_coins\x18\t \x01(\x03R\n" + + "scoreCoins\x12\x16\n" + + "\x06reason\x18\n" + + " \x01(\tR\x06reason\"\xbf\x01\n" + + "!CreditAgencyOpeningRewardResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x127\n" + + "\abalance\x18\x02 \x01(\v2\x1d.hyapp.wallet.v1.AssetBalanceR\abalance\x12\x16\n" + + "\x06amount\x18\x03 \x01(\x03R\x06amount\x12\"\n" + + "\rgranted_at_ms\x18\x04 \x01(\x03R\vgrantedAtMs\"\x9a\x03\n" + + "\x1aApplyGameCoinChangeRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12#\n" + + "\rplatform_code\x18\x05 \x01(\tR\fplatformCode\x12\x17\n" + + "\agame_id\x18\x06 \x01(\tR\x06gameId\x12*\n" + + "\x11provider_order_id\x18\a \x01(\tR\x0fproviderOrderId\x12*\n" + + "\x11provider_round_id\x18\b \x01(\tR\x0fproviderRoundId\x12\x17\n" + + "\aop_type\x18\t \x01(\tR\x06opType\x12\x1f\n" + + "\vcoin_amount\x18\n" + + " \x01(\x03R\n" + + "coinAmount\x12\x17\n" + + "\aroom_id\x18\v \x01(\tR\x06roomId\x12!\n" + + "\frequest_hash\x18\f \x01(\tR\vrequestHash\"\xa3\x01\n" + + "\x1bApplyGameCoinChangeResponse\x122\n" + + "\x15wallet_transaction_id\x18\x01 \x01(\tR\x13walletTransactionId\x12#\n" + + "\rbalance_after\x18\x02 \x01(\x03R\fbalanceAfter\x12+\n" + + "\x11idempotent_replay\x18\x03 \x01(\bR\x10idempotentReplay\"\x9f\x03\n" + + "\x0fRedPacketConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12\x1f\n" + + "\vcount_tiers\x18\x03 \x03(\x05R\n" + + "countTiers\x12!\n" + + "\famount_tiers\x18\x04 \x03(\x03R\vamountTiers\x120\n" + + "\x14delayed_open_seconds\x18\x05 \x01(\x05R\x12delayedOpenSeconds\x12%\n" + + "\x0eexpire_seconds\x18\x06 \x01(\x05R\rexpireSeconds\x12(\n" + + "\x10daily_send_limit\x18\a \x01(\x05R\x0edailySendLimit\x12-\n" + + "\x13updated_by_admin_id\x18\b \x01(\x03R\x10updatedByAdminId\x12\"\n" + + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\n" + + " \x01(\x03R\vupdatedAtMs\x12\x19\n" + + "\brule_url\x18\v \x01(\tR\aruleUrl\"\xee\x02\n" + + "\x0eRedPacketClaim\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\bclaim_id\x18\x02 \x01(\tR\aclaimId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x1b\n" + + "\tpacket_id\x18\x04 \x01(\tR\bpacketId\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\x12\x16\n" + + "\x06amount\x18\x06 \x01(\x03R\x06amount\x122\n" + + "\x15wallet_transaction_id\x18\a \x01(\tR\x13walletTransactionId\x12\x16\n" + + "\x06status\x18\b \x01(\tR\x06status\x12%\n" + + "\x0efailure_reason\x18\t \x01(\tR\rfailureReason\x12\"\n" + + "\rcreated_at_ms\x18\n" + + " \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\v \x01(\x03R\vupdatedAtMs\"\xa0\x06\n" + + "\tRedPacket\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x1b\n" + + "\tpacket_id\x18\x02 \x01(\tR\bpacketId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12$\n" + + "\x0esender_user_id\x18\x04 \x01(\x03R\fsenderUserId\x12\x17\n" + + "\aroom_id\x18\x05 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x06 \x01(\x03R\bregionId\x12\x1f\n" + + "\vpacket_type\x18\a \x01(\tR\n" + + "packetType\x12!\n" + + "\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12!\n" + + "\fpacket_count\x18\t \x01(\x05R\vpacketCount\x12)\n" + + "\x10remaining_amount\x18\n" + + " \x01(\x03R\x0fremainingAmount\x12'\n" + + "\x0fremaining_count\x18\v \x01(\x05R\x0eremainingCount\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12\x1c\n" + + "\n" + + "open_at_ms\x18\r \x01(\x03R\bopenAtMs\x12\"\n" + + "\rexpires_at_ms\x18\x0e \x01(\x03R\vexpiresAtMs\x12\"\n" + + "\rcreated_at_ms\x18\x0f \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12*\n" + + "\x11claimed_by_viewer\x18\x11 \x01(\bR\x0fclaimedByViewer\x12.\n" + + "\x13viewer_claim_amount\x18\x12 \x01(\x03R\x11viewerClaimAmount\x127\n" + + "\x06claims\x18\x13 \x03(\v2\x1f.hyapp.wallet.v1.RedPacketClaimR\x06claims\x12#\n" + + "\rrefund_amount\x18\x14 \x01(\x03R\frefundAmount\x12#\n" + + "\rrefund_status\x18\x15 \x01(\tR\frefundStatus\x12$\n" + + "\x0erefunded_at_ms\x18\x16 \x01(\x03R\frefundedAtMs\"U\n" + + "\x19GetRedPacketConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\"|\n" + + "\x1aGetRedPacketConfigResponse\x128\n" + + "\x06config\x18\x01 \x01(\v2 .hyapp.wallet.v1.RedPacketConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xfe\x02\n" + + "\x1cUpdateRedPacketConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\x12\x1f\n" + + "\vcount_tiers\x18\x04 \x03(\x05R\n" + + "countTiers\x12!\n" + + "\famount_tiers\x18\x05 \x03(\x03R\vamountTiers\x120\n" + + "\x14delayed_open_seconds\x18\x06 \x01(\x05R\x12delayedOpenSeconds\x12%\n" + + "\x0eexpire_seconds\x18\a \x01(\x05R\rexpireSeconds\x12(\n" + + "\x10daily_send_limit\x18\b \x01(\x05R\x0edailySendLimit\x12(\n" + + "\x10operator_user_id\x18\t \x01(\x03R\x0eoperatorUserId\x12\x19\n" + + "\brule_url\x18\n" + + " \x01(\tR\aruleUrl\"\x7f\n" + + "\x1dUpdateRedPacketConfigResponse\x128\n" + + "\x06config\x18\x01 \x01(\v2 .hyapp.wallet.v1.RedPacketConfigR\x06config\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xb4\x02\n" + + "\x16CreateRedPacketRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12$\n" + + "\x0esender_user_id\x18\x04 \x01(\x03R\fsenderUserId\x12\x17\n" + + "\aroom_id\x18\x05 \x01(\tR\x06roomId\x12\x1b\n" + + "\tregion_id\x18\x06 \x01(\x03R\bregionId\x12\x1f\n" + + "\vpacket_type\x18\a \x01(\tR\n" + + "packetType\x12!\n" + + "\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12!\n" + + "\fpacket_count\x18\t \x01(\x05R\vpacketCount\"\x98\x01\n" + + "\x17CreateRedPacketResponse\x122\n" + + "\x06packet\x18\x01 \x01(\v2\x1a.hyapp.wallet.v1.RedPacketR\x06packet\x12#\n" + + "\rbalance_after\x18\x02 \x01(\x03R\fbalanceAfter\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xa6\x01\n" + + "\x15ClaimRedPacketRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x1b\n" + + "\tpacket_id\x18\x04 \x01(\tR\bpacketId\x12\x17\n" + + "\auser_id\x18\x05 \x01(\x03R\x06userId\"\xce\x01\n" + + "\x16ClaimRedPacketResponse\x125\n" + + "\x05claim\x18\x01 \x01(\v2\x1f.hyapp.wallet.v1.RedPacketClaimR\x05claim\x12#\n" + + "\rbalance_after\x18\x02 \x01(\x03R\fbalanceAfter\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\x122\n" + + "\x06packet\x18\x04 \x01(\v2\x1a.hyapp.wallet.v1.RedPacketR\x06packet\"\xf9\x02\n" + + "\x15ListRedPacketsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12$\n" + + "\x0esender_user_id\x18\x04 \x01(\x03R\fsenderUserId\x12\x1b\n" + + "\tregion_id\x18\x05 \x01(\x03R\bregionId\x12\x1f\n" + + "\vpacket_type\x18\x06 \x01(\tR\n" + + "packetType\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12$\n" + + "\x0eviewer_user_id\x18\b \x01(\x03R\fviewerUserId\x12\x1e\n" + + "\vstart_at_ms\x18\t \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\n" + + " \x01(\x03R\aendAtMs\x12\x12\n" + + "\x04page\x18\v \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\f \x01(\x05R\bpageSize\"\x8a\x01\n" + + "\x16ListRedPacketsResponse\x124\n" + + "\apackets\x18\x01 \x03(\v2\x1a.hyapp.wallet.v1.RedPacketR\apackets\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xb9\x01\n" + + "\x13GetRedPacketRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tpacket_id\x18\x03 \x01(\tR\bpacketId\x12$\n" + + "\x0eviewer_user_id\x18\x04 \x01(\x03R\fviewerUserId\x12%\n" + + "\x0einclude_claims\x18\x05 \x01(\bR\rincludeClaims\"p\n" + + "\x14GetRedPacketResponse\x122\n" + + "\x06packet\x18\x01 \x01(\v2\x1a.hyapp.wallet.v1.RedPacketR\x06packet\x12$\n" + + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"r\n" + + "\x17ExpireRedPacketsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1d\n" + + "\n" + + "batch_size\x18\x03 \x01(\x05R\tbatchSize\"\x8e\x01\n" + + "\x18ExpireRedPacketsResponse\x12#\n" + + "\rexpired_count\x18\x01 \x01(\x05R\fexpiredCount\x12'\n" + + "\x0frefunded_amount\x18\x02 \x01(\x03R\x0erefundedAmount\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\x9e\x01\n" + + "\x1bRetryRedPacketRefundRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tpacket_id\x18\x03 \x01(\tR\bpacketId\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"\xa1\x01\n" + + "\x1cRetryRedPacketRefundResponse\x122\n" + + "\x06packet\x18\x01 \x01(\v2\x1a.hyapp.wallet.v1.RedPacketR\x06packet\x12'\n" + + "\x0frefunded_amount\x18\x02 \x01(\x03R\x0erefundedAmount\x12$\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs\"\xc3\x02\n" + + "\x10CronBatchRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x15\n" + + "\x06run_id\x18\x03 \x01(\tR\x05runId\x12\x1b\n" + + "\tworker_id\x18\x04 \x01(\tR\bworkerId\x12\x1d\n" + + "\n" + + "batch_size\x18\x05 \x01(\x05R\tbatchSize\x12\x1e\n" + + "\vlock_ttl_ms\x18\x06 \x01(\x03R\tlockTtlMs\x12!\n" + + "\ftrigger_mode\x18\a \x01(\tR\vtriggerMode\x12\x1b\n" + + "\tcycle_key\x18\b \x01(\tR\bcycleKey\x12\x19\n" + + "\buser_ids\x18\t \x03(\x03R\auserIds\x12'\n" + + "\x0fsettlement_role\x18\n" + + " \x01(\tR\x0esettlementRole\"\xc6\x01\n" + + "\x11CronBatchResponse\x12#\n" + + "\rclaimed_count\x18\x01 \x01(\x05R\fclaimedCount\x12'\n" + + "\x0fprocessed_count\x18\x02 \x01(\x05R\x0eprocessedCount\x12#\n" + + "\rsuccess_count\x18\x03 \x01(\x05R\fsuccessCount\x12#\n" + + "\rfailure_count\x18\x04 \x01(\x05R\ffailureCount\x12\x19\n" + + "\bhas_more\x18\x05 \x01(\bR\ahasMore\"\xae\x04\n" + + "\x19ResourceShopPurchaseOrder\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x19\n" + + "\border_id\x18\x02 \x01(\tR\aorderId\x12\x1d\n" + + "\n" + + "command_id\x18\x03 \x01(\tR\tcommandId\x12\x17\n" + + "\auser_id\x18\x04 \x01(\x03R\x06userId\x12 \n" + + "\fshop_item_id\x18\x05 \x01(\x03R\n" + + "shopItemId\x12\x1f\n" + + "\vresource_id\x18\x06 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\a \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12#\n" + + "\rduration_days\x18\b \x01(\x05R\fdurationDays\x12\x1d\n" + + "\n" + + "price_coin\x18\t \x01(\x03R\tpriceCoin\x12\x16\n" + + "\x06status\x18\n" + + " \x01(\tR\x06status\x122\n" + + "\x15wallet_transaction_id\x18\v \x01(\tR\x13walletTransactionId\x12*\n" + + "\x11resource_grant_id\x18\f \x01(\tR\x0fresourceGrantId\x12%\n" + + "\x0eentitlement_id\x18\r \x01(\tR\rentitlementId\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\"\x82\x02\n" + + "%ListResourceShopPurchaseOrdersRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" + + "\auser_id\x18\x03 \x01(\x03R\x06userId\x12#\n" + + "\rresource_type\x18\x04 \x01(\tR\fresourceType\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x06 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\a \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\b \x01(\x05R\bpageSize\"\x82\x01\n" + + "&ListResourceShopPurchaseOrdersResponse\x12B\n" + + "\x06orders\x18\x01 \x03(\v2*.hyapp.wallet.v1.ResourceShopPurchaseOrderR\x06orders\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"X\n" + + "\x1cGetGiftCatalogVersionRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\"9\n" + + "\x1dGetGiftCatalogVersionResponse\x12\x18\n" + + "\aversion\x18\x01 \x01(\x03R\aversion\"\x8d\x01\n" + + "\x10HostRevenueStats\x12)\n" + + "\x10diamond_earnings\x18\x01 \x01(\x03R\x0fdiamondEarnings\x12+\n" + + "\x11diamond_exchanged\x18\x02 \x01(\x03R\x10diamondExchanged\x12!\n" + + "\fgift_senders\x18\x03 \x01(\x03R\vgiftSenders\"\xb4\x01\n" + + "\x1aGetHostRevenueStatsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12 \n" + + "\fhost_user_id\x18\x03 \x01(\x03R\n" + + "hostUserId\x12\x1e\n" + + "\vstart_at_ms\x18\x04 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x05 \x01(\x03R\aendAtMs\"V\n" + + "\x1bGetHostRevenueStatsResponse\x127\n" + + "\x05stats\x18\x01 \x01(\v2!.hyapp.wallet.v1.HostRevenueStatsR\x05stats\"f\n" + + "\x15AgencyPointShareStats\x12!\n" + + "\fshare_income\x18\x01 \x01(\x03R\vshareIncome\x12*\n" + + "\x11gifted_host_count\x18\x02 \x01(\x03R\x0fgiftedHostCount\"\xc8\x01\n" + + "\x1fGetAgencyPointShareStatsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12/\n" + + "\x14agency_owner_user_id\x18\x03 \x01(\x03R\x11agencyOwnerUserId\x12\x1e\n" + + "\vstart_at_ms\x18\x04 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x05 \x01(\x03R\aendAtMs\"`\n" + + " GetAgencyPointShareStatsResponse\x12<\n" + + "\x05stats\x18\x01 \x01(\v2&.hyapp.wallet.v1.AgencyPointShareStatsR\x05stats\"b\n" + + "\x13AgencyHostGiftStats\x12\x1f\n" + + "\vgift_income\x18\x01 \x01(\x03R\n" + + "giftIncome\x12*\n" + + "\x11gifted_host_count\x18\x02 \x01(\x03R\x0fgiftedHostCount\"\xb9\x01\n" + + "\x1dGetAgencyHostGiftStatsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\"\n" + + "\rhost_user_ids\x18\x03 \x03(\x03R\vhostUserIds\x12\x1e\n" + + "\vstart_at_ms\x18\x04 \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\x05 \x01(\x03R\aendAtMs\"\\\n" + + "\x1eGetAgencyHostGiftStatsResponse\x12:\n" + + "\x05stats\x18\x01 \x01(\v2$.hyapp.wallet.v1.AgencyHostGiftStatsR\x05stats\"\xe6\x02\n" + + "\x1fPointWithdrawalCoinSellerConfig\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12$\n" + + "\x0eseller_user_id\x18\x02 \x01(\x03R\fsellerUserId\x12\x1d\n" + + "\n" + + "sort_order\x18\x03 \x01(\x05R\tsortOrder\x12!\n" + + "\fpoint_amount\x18\x04 \x01(\x03R\vpointAmount\x12,\n" + + "\x12seller_coin_amount\x18\x05 \x01(\x03R\x10sellerCoinAmount\x122\n" + + "\x15service_country_codes\x18\x06 \x03(\tR\x13serviceCountryCodes\x12\x16\n" + + "\x06status\x18\a \x01(\tR\x06status\x12\"\n" + + "\rcreated_at_ms\x18\b \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\"\xaf\x01\n" + + "%ListPointWithdrawalCoinSellersRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12!\n" + + "\fcountry_code\x18\x03 \x01(\tR\vcountryCode\x12)\n" + + "\x10include_disabled\x18\x04 \x01(\bR\x0fincludeDisabled\"t\n" + + "&ListPointWithdrawalCoinSellersResponse\x12J\n" + + "\asellers\x18\x01 \x03(\v20.hyapp.wallet.v1.PointWithdrawalCoinSellerConfigR\asellers\"\x93\x02\n" + + " TransferPointToCoinSellerRequest\x12\x1d\n" + + "\n" + + "command_id\x18\x01 \x01(\tR\tcommandId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12$\n" + + "\x0esource_user_id\x18\x03 \x01(\x03R\fsourceUserId\x12$\n" + + "\x0eseller_user_id\x18\x04 \x01(\x03R\fsellerUserId\x12!\n" + + "\fpoint_amount\x18\x05 \x01(\x03R\vpointAmount\x12.\n" + + "\x13source_country_code\x18\x06 \x01(\tR\x11sourceCountryCode\x12\x16\n" + + "\x06reason\x18\a \x01(\tR\x06reason\"\xf1\x02\n" + + "!TransferPointToCoinSellerResponse\x12%\n" + + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\x12;\n" + + "\x1asource_point_balance_after\x18\x02 \x01(\x03R\x17sourcePointBalanceAfter\x120\n" + + "\x14seller_balance_after\x18\x03 \x01(\x03R\x12sellerBalanceAfter\x12!\n" + + "\fpoint_amount\x18\x04 \x01(\x03R\vpointAmount\x12,\n" + + "\x12seller_coin_amount\x18\x05 \x01(\x03R\x10sellerCoinAmount\x12,\n" + + "\x12ratio_point_amount\x18\x06 \x01(\x03R\x10ratioPointAmount\x127\n" + + "\x18ratio_seller_coin_amount\x18\a \x01(\x03R\x15ratioSellerCoinAmount\"\x8f\x01\n" + + "\x1fGetPointWithdrawalConfigRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x1b\n" + + "\tregion_id\x18\x03 \x01(\x03R\bregionId\x12\x15\n" + + "\x06now_ms\x18\x04 \x01(\x03R\x05nowMs\"\xd0\x01\n" + + " GetPointWithdrawalConfigResponse\x12\x14\n" + + "\x05found\x18\x01 \x01(\bR\x05found\x12$\n" + + "\x0epoints_per_usd\x18\x02 \x01(\x03R\fpointsPerUsd\x12\x17\n" + + "\afee_bps\x18\x03 \x01(\x05R\x06feeBps\x12%\n" + + "\x0eminimum_points\x18\x04 \x01(\x03R\rminimumPoints\x120\n" + + "\x14policy_instance_code\x18\x05 \x01(\tR\x12policyInstanceCode2\xf4\x03\n" + + "\x11WalletCronService\x12n\n" + + "%ProcessHostSalaryDailySettlementBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12r\n" + + ")ProcessHostSalaryHalfMonthSettlementBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12g\n" + + "\x1eProcessHostSalaryMonthEndBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12\x91\x01\n" + + "\x1eProcessVipDailyCoinRebateBatch\x126.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest\x1a7.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse2\xe0r\n" + + "\rWalletService\x12R\n" + + "\tDebitGift\x12!.hyapp.wallet.v1.DebitGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12^\n" + + "\x0fDebitDirectGift\x12'.hyapp.wallet.v1.DebitDirectGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12a\n" + + "\x0eBatchDebitGift\x12&.hyapp.wallet.v1.BatchDebitGiftRequest\x1a'.hyapp.wallet.v1.BatchDebitGiftResponse\x12\\\n" + + "\x0eDebitRobotGift\x12&.hyapp.wallet.v1.DebitRobotGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12X\n" + + "\vGetBalances\x12#.hyapp.wallet.v1.GetBalancesRequest\x1a$.hyapp.wallet.v1.GetBalancesResponse\x12\x82\x01\n" + + "\x19GetActiveHostSalaryPolicy\x121.hyapp.wallet.v1.GetActiveHostSalaryPolicyRequest\x1a2.hyapp.wallet.v1.GetActiveHostSalaryPolicyResponse\x12v\n" + + "\x15GetHostSalaryProgress\x12-.hyapp.wallet.v1.GetHostSalaryProgressRequest\x1a..hyapp.wallet.v1.GetHostSalaryProgressResponse\x12p\n" + + "\x13GetHostRevenueStats\x12+.hyapp.wallet.v1.GetHostRevenueStatsRequest\x1a,.hyapp.wallet.v1.GetHostRevenueStatsResponse\x12\x7f\n" + + "\x18GetAgencyPointShareStats\x120.hyapp.wallet.v1.GetAgencyPointShareStatsRequest\x1a1.hyapp.wallet.v1.GetAgencyPointShareStatsResponse\x12y\n" + + "\x16GetAgencyHostGiftStats\x12..hyapp.wallet.v1.GetAgencyHostGiftStatsRequest\x1a/.hyapp.wallet.v1.GetAgencyHostGiftStatsResponse\x12y\n" + + "\x16GetTeamHostSalaryStats\x12..hyapp.wallet.v1.GetTeamHostSalaryStatsRequest\x1a/.hyapp.wallet.v1.GetTeamHostSalaryStatsResponse\x12g\n" + + "\x10AdminCreditAsset\x12(.hyapp.wallet.v1.AdminCreditAssetRequest\x1a).hyapp.wallet.v1.AdminCreditAssetResponse\x12\x85\x01\n" + + "\x1aAdminCreditCoinSellerStock\x122.hyapp.wallet.v1.AdminCreditCoinSellerStockRequest\x1a3.hyapp.wallet.v1.AdminCreditCoinSellerStockResponse\x12y\n" + + "\x16TransferCoinFromSeller\x12..hyapp.wallet.v1.TransferCoinFromSellerRequest\x1a/.hyapp.wallet.v1.TransferCoinFromSellerResponse\x12\x91\x01\n" + + "\x1eTransferCoinSellerStockToChild\x126.hyapp.wallet.v1.TransferCoinSellerStockToChildRequest\x1a7.hyapp.wallet.v1.TransferCoinSellerStockToChildResponse\x12\xa6\x01\n" + + "%ListCoinSellerSalaryExchangeRateTiers\x12=.hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersRequest\x1a>.hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersResponse\x12s\n" + + "\x14ExchangeSalaryToCoin\x12,.hyapp.wallet.v1.ExchangeSalaryToCoinRequest\x1a-.hyapp.wallet.v1.ExchangeSalaryToCoinResponse\x12\x85\x01\n" + + "\x1aTransferSalaryToCoinSeller\x122.hyapp.wallet.v1.TransferSalaryToCoinSellerRequest\x1a3.hyapp.wallet.v1.TransferSalaryToCoinSellerResponse\x12\x91\x01\n" + + "\x1eListPointWithdrawalCoinSellers\x126.hyapp.wallet.v1.ListPointWithdrawalCoinSellersRequest\x1a7.hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse\x12\x82\x01\n" + + "\x19TransferPointToCoinSeller\x121.hyapp.wallet.v1.TransferPointToCoinSellerRequest\x1a2.hyapp.wallet.v1.TransferPointToCoinSellerResponse\x12\x7f\n" + + "\x18GetPointWithdrawalConfig\x120.hyapp.wallet.v1.GetPointWithdrawalConfigRequest\x1a1.hyapp.wallet.v1.GetPointWithdrawalConfigResponse\x12y\n" + + "\x16FreezeSalaryWithdrawal\x12..hyapp.wallet.v1.FreezeSalaryWithdrawalRequest\x1a/.hyapp.wallet.v1.FreezeSalaryWithdrawalResponse\x12y\n" + + "\x16SettleSalaryWithdrawal\x12..hyapp.wallet.v1.SettleSalaryWithdrawalRequest\x1a/.hyapp.wallet.v1.SettleSalaryWithdrawalResponse\x12|\n" + + "\x17ReleaseSalaryWithdrawal\x12/.hyapp.wallet.v1.ReleaseSalaryWithdrawalRequest\x1a0.hyapp.wallet.v1.ReleaseSalaryWithdrawalResponse\x12v\n" + + "\x15FreezePointWithdrawal\x12-.hyapp.wallet.v1.FreezePointWithdrawalRequest\x1a..hyapp.wallet.v1.FreezePointWithdrawalResponse\x12v\n" + + "\x15SettlePointWithdrawal\x12-.hyapp.wallet.v1.SettlePointWithdrawalRequest\x1a..hyapp.wallet.v1.SettlePointWithdrawalResponse\x12y\n" + + "\x16ReleasePointWithdrawal\x12..hyapp.wallet.v1.ReleasePointWithdrawalRequest\x1a/.hyapp.wallet.v1.ReleasePointWithdrawalResponse\x12^\n" + + "\rListResources\x12%.hyapp.wallet.v1.ListResourcesRequest\x1a&.hyapp.wallet.v1.ListResourcesResponse\x12X\n" + + "\vGetResource\x12#.hyapp.wallet.v1.GetResourceRequest\x1a$.hyapp.wallet.v1.GetResourceResponse\x12[\n" + + "\x0eCreateResource\x12&.hyapp.wallet.v1.CreateResourceRequest\x1a!.hyapp.wallet.v1.ResourceResponse\x12[\n" + + "\x0eUpdateResource\x12&.hyapp.wallet.v1.UpdateResourceRequest\x1a!.hyapp.wallet.v1.ResourceResponse\x12a\n" + + "\x11SetResourceStatus\x12).hyapp.wallet.v1.SetResourceStatusRequest\x1a!.hyapp.wallet.v1.ResourceResponse\x12[\n" + + "\x0eDeleteResource\x12&.hyapp.wallet.v1.DeleteResourceRequest\x1a!.hyapp.wallet.v1.ResourceResponse\x12s\n" + + "\x14BatchDeleteResources\x12,.hyapp.wallet.v1.BatchDeleteResourcesRequest\x1a-.hyapp.wallet.v1.BatchDeleteResourcesResponse\x12m\n" + + "\x12ListResourceGroups\x12*.hyapp.wallet.v1.ListResourceGroupsRequest\x1a+.hyapp.wallet.v1.ListResourceGroupsResponse\x12g\n" + + "\x10GetResourceGroup\x12(.hyapp.wallet.v1.GetResourceGroupRequest\x1a).hyapp.wallet.v1.GetResourceGroupResponse\x12j\n" + + "\x13CreateResourceGroup\x12+.hyapp.wallet.v1.CreateResourceGroupRequest\x1a&.hyapp.wallet.v1.ResourceGroupResponse\x12j\n" + + "\x13UpdateResourceGroup\x12+.hyapp.wallet.v1.UpdateResourceGroupRequest\x1a&.hyapp.wallet.v1.ResourceGroupResponse\x12p\n" + + "\x16SetResourceGroupStatus\x12..hyapp.wallet.v1.SetResourceGroupStatusRequest\x1a&.hyapp.wallet.v1.ResourceGroupResponse\x12\x7f\n" + + "\x18PinResourceGroupSnapshot\x120.hyapp.wallet.v1.PinResourceGroupSnapshotRequest\x1a1.hyapp.wallet.v1.PinResourceGroupSnapshotResponse\x12d\n" + + "\x0fListGiftConfigs\x12'.hyapp.wallet.v1.ListGiftConfigsRequest\x1a(.hyapp.wallet.v1.ListGiftConfigsResponse\x12p\n" + + "\x13ListGiftTypeConfigs\x12+.hyapp.wallet.v1.ListGiftTypeConfigsRequest\x1a,.hyapp.wallet.v1.ListGiftTypeConfigsResponse\x12v\n" + + "\x15GetGiftCatalogVersion\x12-.hyapp.wallet.v1.GetGiftCatalogVersionRequest\x1a..hyapp.wallet.v1.GetGiftCatalogVersionResponse\x12a\n" + + "\x10CreateGiftConfig\x12(.hyapp.wallet.v1.CreateGiftConfigRequest\x1a#.hyapp.wallet.v1.GiftConfigResponse\x12y\n" + + "\x16BatchCreateGiftConfigs\x12..hyapp.wallet.v1.BatchCreateGiftConfigsRequest\x1a/.hyapp.wallet.v1.BatchCreateGiftConfigsResponse\x12a\n" + + "\x10UpdateGiftConfig\x12(.hyapp.wallet.v1.UpdateGiftConfigRequest\x1a#.hyapp.wallet.v1.GiftConfigResponse\x12g\n" + + "\x13SetGiftConfigStatus\x12+.hyapp.wallet.v1.SetGiftConfigStatusRequest\x1a#.hyapp.wallet.v1.GiftConfigResponse\x12a\n" + + "\x10DeleteGiftConfig\x12(.hyapp.wallet.v1.DeleteGiftConfigRequest\x1a#.hyapp.wallet.v1.GiftConfigResponse\x12m\n" + + "\x14UpsertGiftTypeConfig\x12,.hyapp.wallet.v1.UpsertGiftTypeConfigRequest\x1a'.hyapp.wallet.v1.GiftTypeConfigResponse\x12^\n" + + "\rGrantResource\x12%.hyapp.wallet.v1.GrantResourceRequest\x1a&.hyapp.wallet.v1.ResourceGrantResponse\x12h\n" + + "\x12GrantResourceGroup\x12*.hyapp.wallet.v1.GrantResourceGroupRequest\x1a&.hyapp.wallet.v1.ResourceGrantResponse\x12t\n" + + "\x18GrantPinnedResourceGroup\x120.hyapp.wallet.v1.GrantPinnedResourceGroupRequest\x1a&.hyapp.wallet.v1.ResourceGrantResponse\x12j\n" + + "\x13RevokeResourceGrant\x12+.hyapp.wallet.v1.RevokeResourceGrantRequest\x1a&.hyapp.wallet.v1.ResourceGrantResponse\x12j\n" + + "\x11ListUserResources\x12).hyapp.wallet.v1.ListUserResourcesRequest\x1a*.hyapp.wallet.v1.ListUserResourcesResponse\x12j\n" + + "\x11EquipUserResource\x12).hyapp.wallet.v1.EquipUserResourceRequest\x1a*.hyapp.wallet.v1.EquipUserResourceResponse\x12p\n" + + "\x13UnequipUserResource\x12+.hyapp.wallet.v1.UnequipUserResourceRequest\x1a,.hyapp.wallet.v1.UnequipUserResourceResponse\x12\x8e\x01\n" + + "\x1dBatchGetUserEquippedResources\x125.hyapp.wallet.v1.BatchGetUserEquippedResourcesRequest\x1a6.hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse\x12m\n" + + "\x12ListResourceGrants\x12*.hyapp.wallet.v1.ListResourceGrantsRequest\x1a+.hyapp.wallet.v1.ListResourceGrantsResponse\x12v\n" + + "\x15ListResourceShopItems\x12-.hyapp.wallet.v1.ListResourceShopItemsRequest\x1a..hyapp.wallet.v1.ListResourceShopItemsResponse\x12|\n" + + "\x17UpsertResourceShopItems\x12/.hyapp.wallet.v1.UpsertResourceShopItemsRequest\x1a0.hyapp.wallet.v1.UpsertResourceShopItemsResponse\x12y\n" + + "\x19SetResourceShopItemStatus\x121.hyapp.wallet.v1.SetResourceShopItemStatusRequest\x1a).hyapp.wallet.v1.ResourceShopItemResponse\x12\x91\x01\n" + + "\x1eListResourceShopPurchaseOrders\x126.hyapp.wallet.v1.ListResourceShopPurchaseOrdersRequest\x1a7.hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse\x12\x7f\n" + + "\x18PurchaseResourceShopItem\x120.hyapp.wallet.v1.PurchaseResourceShopItemRequest\x1a1.hyapp.wallet.v1.PurchaseResourceShopItemResponse\x12j\n" + + "\x11ListRechargeBills\x12).hyapp.wallet.v1.ListRechargeBillsRequest\x1a*.hyapp.wallet.v1.ListRechargeBillsResponse\x12y\n" + + "\x16GetRechargeBillSummary\x12..hyapp.wallet.v1.GetRechargeBillSummaryRequest\x1a/.hyapp.wallet.v1.GetRechargeBillSummaryResponse\x12\x82\x01\n" + + "\x19BatchGetUserRechargeStats\x121.hyapp.wallet.v1.BatchGetUserRechargeStatsRequest\x1a2.hyapp.wallet.v1.BatchGetUserRechargeStatsResponse\x12|\n" + + "\x17GetRechargeBillOverview\x12/.hyapp.wallet.v1.GetRechargeBillOverviewRequest\x1a0.hyapp.wallet.v1.GetRechargeBillOverviewResponse\x12\x85\x01\n" + + "\x1aRefreshGooglePaymentPrices\x122.hyapp.wallet.v1.RefreshGooglePaymentPricesRequest\x1a3.hyapp.wallet.v1.RefreshGooglePaymentPricesResponse\x12j\n" + + "\x11GetWalletOverview\x12).hyapp.wallet.v1.GetWalletOverviewRequest\x1a*.hyapp.wallet.v1.GetWalletOverviewResponse\x12v\n" + + "\x15GetWalletValueSummary\x12-.hyapp.wallet.v1.GetWalletValueSummaryRequest\x1a..hyapp.wallet.v1.GetWalletValueSummaryResponse\x12d\n" + + "\x0fGetUserGiftWall\x12'.hyapp.wallet.v1.GetUserGiftWallRequest\x1a(.hyapp.wallet.v1.GetUserGiftWallResponse\x12s\n" + + "\x14ListRechargeProducts\x12,.hyapp.wallet.v1.ListRechargeProductsRequest\x1a-.hyapp.wallet.v1.ListRechargeProductsResponse\x12s\n" + + "\x14ConfirmGooglePayment\x12,.hyapp.wallet.v1.ConfirmGooglePaymentRequest\x1a-.hyapp.wallet.v1.ConfirmGooglePaymentResponse\x12\x82\x01\n" + + "\x19ListAdminRechargeProducts\x121.hyapp.wallet.v1.ListAdminRechargeProductsRequest\x1a2.hyapp.wallet.v1.ListAdminRechargeProductsResponse\x12p\n" + + "\x15CreateRechargeProduct\x12-.hyapp.wallet.v1.CreateRechargeProductRequest\x1a(.hyapp.wallet.v1.RechargeProductResponse\x12p\n" + + "\x15UpdateRechargeProduct\x12-.hyapp.wallet.v1.UpdateRechargeProductRequest\x1a(.hyapp.wallet.v1.RechargeProductResponse\x12v\n" + + "\x15DeleteRechargeProduct\x12-.hyapp.wallet.v1.DeleteRechargeProductRequest\x1a..hyapp.wallet.v1.DeleteRechargeProductResponse\x12\x8e\x01\n" + + "\x1dListThirdPartyPaymentChannels\x125.hyapp.wallet.v1.ListThirdPartyPaymentChannelsRequest\x1a6.hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse\x12\x8e\x01\n" + + " SetThirdPartyPaymentMethodStatus\x128.hyapp.wallet.v1.SetThirdPartyPaymentMethodStatusRequest\x1a0.hyapp.wallet.v1.ThirdPartyPaymentMethodResponse\x12\x84\x01\n" + + "\x1bUpdateThirdPartyPaymentRate\x123.hyapp.wallet.v1.UpdateThirdPartyPaymentRateRequest\x1a0.hyapp.wallet.v1.ThirdPartyPaymentMethodResponse\x12\x8b\x01\n" + + "\x1cSyncThirdPartyPaymentMethods\x124.hyapp.wallet.v1.SyncThirdPartyPaymentMethodsRequest\x1a5.hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse\x12n\n" + + "\x15ListH5RechargeOptions\x12).hyapp.wallet.v1.H5RechargeOptionsRequest\x1a*.hyapp.wallet.v1.H5RechargeOptionsResponse\x12p\n" + + "\x15CreateH5RechargeOrder\x12-.hyapp.wallet.v1.CreateH5RechargeOrderRequest\x1a(.hyapp.wallet.v1.H5RechargeOrderResponse\x12~\n" + + "\x1cCreateTemporaryRechargeOrder\x124.hyapp.wallet.v1.CreateTemporaryRechargeOrderRequest\x1a(.hyapp.wallet.v1.H5RechargeOrderResponse\x12x\n" + + "\x19GetTemporaryRechargeOrder\x121.hyapp.wallet.v1.GetTemporaryRechargeOrderRequest\x1a(.hyapp.wallet.v1.H5RechargeOrderResponse\x12\x88\x01\n" + + "\x1bListTemporaryRechargeOrders\x123.hyapp.wallet.v1.ListTemporaryRechargeOrdersRequest\x1a4.hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse\x12j\n" + + "\x12SubmitH5RechargeTx\x12*.hyapp.wallet.v1.SubmitH5RechargeTxRequest\x1a(.hyapp.wallet.v1.H5RechargeOrderResponse\x12j\n" + + "\x12GetH5RechargeOrder\x12*.hyapp.wallet.v1.GetH5RechargeOrderRequest\x1a(.hyapp.wallet.v1.H5RechargeOrderResponse\x12\x94\x01\n" + + "\x1fVerifyCoinSellerRechargeReceipt\x127.hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptRequest\x1a8.hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse\x12p\n" + + "\x13HandleMifapayNotify\x12+.hyapp.wallet.v1.HandleMifapayNotifyRequest\x1a,.hyapp.wallet.v1.HandleMifapayNotifyResponse\x12j\n" + + "\x11HandleV5PayNotify\x12).hyapp.wallet.v1.HandleV5PayNotifyRequest\x1a*.hyapp.wallet.v1.HandleV5PayNotifyResponse\x12\x7f\n" + + "\x18GetDiamondExchangeConfig\x120.hyapp.wallet.v1.GetDiamondExchangeConfigRequest\x1a1.hyapp.wallet.v1.GetDiamondExchangeConfigResponse\x12y\n" + + "\x16ListWalletTransactions\x12..hyapp.wallet.v1.ListWalletTransactionsRequest\x1a/.hyapp.wallet.v1.ListWalletTransactionsResponse\x12d\n" + + "\x0fListVipPackages\x12'.hyapp.wallet.v1.ListVipPackagesRequest\x1a(.hyapp.wallet.v1.ListVipPackagesResponse\x12p\n" + + "\x13GetVipProgramConfig\x12+.hyapp.wallet.v1.GetVipProgramConfigRequest\x1a,.hyapp.wallet.v1.GetVipProgramConfigResponse\x12O\n" + + "\bGetMyVip\x12 .hyapp.wallet.v1.GetMyVipRequest\x1a!.hyapp.wallet.v1.GetMyVipResponse\x12d\n" + + "\x0fCheckVipBenefit\x12'.hyapp.wallet.v1.CheckVipBenefitRequest\x1a(.hyapp.wallet.v1.CheckVipBenefitResponse\x12X\n" + + "\vPurchaseVip\x12#.hyapp.wallet.v1.PurchaseVipRequest\x1a$.hyapp.wallet.v1.PurchaseVipResponse\x12j\n" + + "\x11DebitCPBreakupFee\x12).hyapp.wallet.v1.DebitCPBreakupFeeRequest\x1a*.hyapp.wallet.v1.DebitCPBreakupFeeResponse\x12a\n" + + "\x0eDebitWheelDraw\x12&.hyapp.wallet.v1.DebitWheelDrawRequest\x1a'.hyapp.wallet.v1.DebitWheelDrawResponse\x12O\n" + + "\bGrantVip\x12 .hyapp.wallet.v1.GrantVipRequest\x1a!.hyapp.wallet.v1.GrantVipResponse\x12j\n" + + "\x11GrantVipTrialCard\x12).hyapp.wallet.v1.GrantVipTrialCardRequest\x1a*.hyapp.wallet.v1.GrantVipTrialCardResponse\x12j\n" + + "\x11EquipVipTrialCard\x12).hyapp.wallet.v1.EquipVipTrialCardRequest\x1a*.hyapp.wallet.v1.EquipVipTrialCardResponse\x12p\n" + + "\x13UnequipVipTrialCard\x12+.hyapp.wallet.v1.UnequipVipTrialCardRequest\x1a,.hyapp.wallet.v1.UnequipVipTrialCardResponse\x12m\n" + + "\x12ListAdminVipLevels\x12*.hyapp.wallet.v1.ListAdminVipLevelsRequest\x1a+.hyapp.wallet.v1.ListAdminVipLevelsResponse\x12s\n" + + "\x14UpdateAdminVipLevels\x12,.hyapp.wallet.v1.UpdateAdminVipLevelsRequest\x1a-.hyapp.wallet.v1.UpdateAdminVipLevelsResponse\x12\x88\x01\n" + + "\x1bUpdateAdminVipProgramConfig\x123.hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest\x1a4.hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse\x12p\n" + + "\x13UpdateMyVipSettings\x12+.hyapp.wallet.v1.UpdateMyVipSettingsRequest\x1a,.hyapp.wallet.v1.UpdateMyVipSettingsResponse\x12\x91\x01\n" + + "\x1eGetMyCurrentVipDailyCoinRebate\x126.hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest\x1a7.hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse\x12\x97\x01\n" + + " ListMyVipDailyCoinRebateStatuses\x128.hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest\x1a9.hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse\x12|\n" + + "\x17ClaimVipDailyCoinRebate\x12/.hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest\x1a0.hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse\x12g\n" + + "\x10CreditTaskReward\x12(.hyapp.wallet.v1.CreditTaskRewardRequest\x1a).hyapp.wallet.v1.CreditTaskRewardResponse\x12v\n" + + "\x15CreditLuckyGiftReward\x12-.hyapp.wallet.v1.CreditLuckyGiftRewardRequest\x1a..hyapp.wallet.v1.CreditLuckyGiftRewardResponse\x12j\n" + + "\x11CreditWheelReward\x12).hyapp.wallet.v1.CreditWheelRewardRequest\x1a*.hyapp.wallet.v1.CreditWheelRewardResponse\x12\x7f\n" + + "\x18CreditRoomTurnoverReward\x120.hyapp.wallet.v1.CreditRoomTurnoverRewardRequest\x1a1.hyapp.wallet.v1.CreditRoomTurnoverRewardResponse\x12\x85\x01\n" + + "\x1aCreditInviteActivityReward\x122.hyapp.wallet.v1.CreditInviteActivityRewardRequest\x1a3.hyapp.wallet.v1.CreditInviteActivityRewardResponse\x12\x82\x01\n" + + "\x19CreditAgencyOpeningReward\x121.hyapp.wallet.v1.CreditAgencyOpeningRewardRequest\x1a2.hyapp.wallet.v1.CreditAgencyOpeningRewardResponse\x12p\n" + + "\x13ApplyGameCoinChange\x12+.hyapp.wallet.v1.ApplyGameCoinChangeRequest\x1a,.hyapp.wallet.v1.ApplyGameCoinChangeResponse\x12m\n" + + "\x12GetRedPacketConfig\x12*.hyapp.wallet.v1.GetRedPacketConfigRequest\x1a+.hyapp.wallet.v1.GetRedPacketConfigResponse\x12v\n" + + "\x15UpdateRedPacketConfig\x12-.hyapp.wallet.v1.UpdateRedPacketConfigRequest\x1a..hyapp.wallet.v1.UpdateRedPacketConfigResponse\x12d\n" + + "\x0fCreateRedPacket\x12'.hyapp.wallet.v1.CreateRedPacketRequest\x1a(.hyapp.wallet.v1.CreateRedPacketResponse\x12a\n" + + "\x0eClaimRedPacket\x12&.hyapp.wallet.v1.ClaimRedPacketRequest\x1a'.hyapp.wallet.v1.ClaimRedPacketResponse\x12a\n" + + "\x0eListRedPackets\x12&.hyapp.wallet.v1.ListRedPacketsRequest\x1a'.hyapp.wallet.v1.ListRedPacketsResponse\x12[\n" + + "\fGetRedPacket\x12$.hyapp.wallet.v1.GetRedPacketRequest\x1a%.hyapp.wallet.v1.GetRedPacketResponse\x12g\n" + + "\x10ExpireRedPackets\x12(.hyapp.wallet.v1.ExpireRedPacketsRequest\x1a).hyapp.wallet.v1.ExpireRedPacketsResponse\x12s\n" + + "\x14RetryRedPacketRefund\x12,.hyapp.wallet.v1.RetryRedPacketRefundRequest\x1a-.hyapp.wallet.v1.RetryRedPacketRefundResponseB*Z(hyapp.local/api/proto/wallet/v1;walletv1b\x06proto3" var ( file_proto_wallet_v1_wallet_proto_rawDescOnce sync.Once - file_proto_wallet_v1_wallet_proto_rawDescData = file_proto_wallet_v1_wallet_proto_rawDesc + file_proto_wallet_v1_wallet_proto_rawDescData []byte ) func file_proto_wallet_v1_wallet_proto_rawDescGZIP() []byte { file_proto_wallet_v1_wallet_proto_rawDescOnce.Do(func() { - file_proto_wallet_v1_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_wallet_v1_wallet_proto_rawDescData) + file_proto_wallet_v1_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_wallet_v1_wallet_proto_rawDesc), len(file_proto_wallet_v1_wallet_proto_rawDesc))) }) return file_proto_wallet_v1_wallet_proto_rawDescData } -var file_proto_wallet_v1_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 292) +var file_proto_wallet_v1_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 296) var file_proto_wallet_v1_wallet_proto_goTypes = []any{ (*DebitGiftRequest)(nil), // 0: hyapp.wallet.v1.DebitGiftRequest (*DebitDirectGiftRequest)(nil), // 1: hyapp.wallet.v1.DebitDirectGiftRequest @@ -31396,247 +28569,251 @@ var file_proto_wallet_v1_wallet_proto_goTypes = []any{ (*Resource)(nil), // 48: hyapp.wallet.v1.Resource (*ResourceGroupItem)(nil), // 49: hyapp.wallet.v1.ResourceGroupItem (*ResourceGroup)(nil), // 50: hyapp.wallet.v1.ResourceGroup - (*GiftConfig)(nil), // 51: hyapp.wallet.v1.GiftConfig - (*GiftTypeConfig)(nil), // 52: hyapp.wallet.v1.GiftTypeConfig - (*ResourceShopItem)(nil), // 53: hyapp.wallet.v1.ResourceShopItem - (*UserResourceEntitlement)(nil), // 54: hyapp.wallet.v1.UserResourceEntitlement - (*ResourceGrantItem)(nil), // 55: hyapp.wallet.v1.ResourceGrantItem - (*ResourceGrant)(nil), // 56: hyapp.wallet.v1.ResourceGrant - (*ResourceGroupItemInput)(nil), // 57: hyapp.wallet.v1.ResourceGroupItemInput - (*ListResourcesRequest)(nil), // 58: hyapp.wallet.v1.ListResourcesRequest - (*ListResourcesResponse)(nil), // 59: hyapp.wallet.v1.ListResourcesResponse - (*GetResourceRequest)(nil), // 60: hyapp.wallet.v1.GetResourceRequest - (*GetResourceResponse)(nil), // 61: hyapp.wallet.v1.GetResourceResponse - (*CreateResourceRequest)(nil), // 62: hyapp.wallet.v1.CreateResourceRequest - (*UpdateResourceRequest)(nil), // 63: hyapp.wallet.v1.UpdateResourceRequest - (*SetResourceStatusRequest)(nil), // 64: hyapp.wallet.v1.SetResourceStatusRequest - (*DeleteResourceRequest)(nil), // 65: hyapp.wallet.v1.DeleteResourceRequest - (*BatchDeleteResourcesRequest)(nil), // 66: hyapp.wallet.v1.BatchDeleteResourcesRequest - (*BatchDeleteResourcesResponse)(nil), // 67: hyapp.wallet.v1.BatchDeleteResourcesResponse - (*ResourceResponse)(nil), // 68: hyapp.wallet.v1.ResourceResponse - (*ListResourceGroupsRequest)(nil), // 69: hyapp.wallet.v1.ListResourceGroupsRequest - (*ListResourceGroupsResponse)(nil), // 70: hyapp.wallet.v1.ListResourceGroupsResponse - (*GetResourceGroupRequest)(nil), // 71: hyapp.wallet.v1.GetResourceGroupRequest - (*GetResourceGroupResponse)(nil), // 72: hyapp.wallet.v1.GetResourceGroupResponse - (*CreateResourceGroupRequest)(nil), // 73: hyapp.wallet.v1.CreateResourceGroupRequest - (*UpdateResourceGroupRequest)(nil), // 74: hyapp.wallet.v1.UpdateResourceGroupRequest - (*SetResourceGroupStatusRequest)(nil), // 75: hyapp.wallet.v1.SetResourceGroupStatusRequest - (*ResourceGroupResponse)(nil), // 76: hyapp.wallet.v1.ResourceGroupResponse - (*ListGiftConfigsRequest)(nil), // 77: hyapp.wallet.v1.ListGiftConfigsRequest - (*ListGiftConfigsResponse)(nil), // 78: hyapp.wallet.v1.ListGiftConfigsResponse - (*ListGiftTypeConfigsRequest)(nil), // 79: hyapp.wallet.v1.ListGiftTypeConfigsRequest - (*ListGiftTypeConfigsResponse)(nil), // 80: hyapp.wallet.v1.ListGiftTypeConfigsResponse - (*UpsertGiftTypeConfigRequest)(nil), // 81: hyapp.wallet.v1.UpsertGiftTypeConfigRequest - (*GiftTypeConfigResponse)(nil), // 82: hyapp.wallet.v1.GiftTypeConfigResponse - (*CreateGiftConfigRequest)(nil), // 83: hyapp.wallet.v1.CreateGiftConfigRequest - (*BatchCreateGiftConfigsRequest)(nil), // 84: hyapp.wallet.v1.BatchCreateGiftConfigsRequest - (*BatchCreateGiftConfigsResponse)(nil), // 85: hyapp.wallet.v1.BatchCreateGiftConfigsResponse - (*UpdateGiftConfigRequest)(nil), // 86: hyapp.wallet.v1.UpdateGiftConfigRequest - (*SetGiftConfigStatusRequest)(nil), // 87: hyapp.wallet.v1.SetGiftConfigStatusRequest - (*DeleteGiftConfigRequest)(nil), // 88: hyapp.wallet.v1.DeleteGiftConfigRequest - (*GiftConfigResponse)(nil), // 89: hyapp.wallet.v1.GiftConfigResponse - (*GrantResourceRequest)(nil), // 90: hyapp.wallet.v1.GrantResourceRequest - (*GrantResourceGroupRequest)(nil), // 91: hyapp.wallet.v1.GrantResourceGroupRequest - (*RevokeResourceGrantRequest)(nil), // 92: hyapp.wallet.v1.RevokeResourceGrantRequest - (*ResourceGrantResponse)(nil), // 93: hyapp.wallet.v1.ResourceGrantResponse - (*ListUserResourcesRequest)(nil), // 94: hyapp.wallet.v1.ListUserResourcesRequest - (*ListUserResourcesResponse)(nil), // 95: hyapp.wallet.v1.ListUserResourcesResponse - (*EquipUserResourceRequest)(nil), // 96: hyapp.wallet.v1.EquipUserResourceRequest - (*EquipUserResourceResponse)(nil), // 97: hyapp.wallet.v1.EquipUserResourceResponse - (*UnequipUserResourceRequest)(nil), // 98: hyapp.wallet.v1.UnequipUserResourceRequest - (*UnequipUserResourceResponse)(nil), // 99: hyapp.wallet.v1.UnequipUserResourceResponse - (*BatchGetUserEquippedResourcesRequest)(nil), // 100: hyapp.wallet.v1.BatchGetUserEquippedResourcesRequest - (*UserEquippedResources)(nil), // 101: hyapp.wallet.v1.UserEquippedResources - (*BatchGetUserEquippedResourcesResponse)(nil), // 102: hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse - (*ListResourceGrantsRequest)(nil), // 103: hyapp.wallet.v1.ListResourceGrantsRequest - (*ListResourceGrantsResponse)(nil), // 104: hyapp.wallet.v1.ListResourceGrantsResponse - (*ResourceShopItemInput)(nil), // 105: hyapp.wallet.v1.ResourceShopItemInput - (*ListResourceShopItemsRequest)(nil), // 106: hyapp.wallet.v1.ListResourceShopItemsRequest - (*ListResourceShopItemsResponse)(nil), // 107: hyapp.wallet.v1.ListResourceShopItemsResponse - (*UpsertResourceShopItemsRequest)(nil), // 108: hyapp.wallet.v1.UpsertResourceShopItemsRequest - (*UpsertResourceShopItemsResponse)(nil), // 109: hyapp.wallet.v1.UpsertResourceShopItemsResponse - (*SetResourceShopItemStatusRequest)(nil), // 110: hyapp.wallet.v1.SetResourceShopItemStatusRequest - (*ResourceShopItemResponse)(nil), // 111: hyapp.wallet.v1.ResourceShopItemResponse - (*PurchaseResourceShopItemRequest)(nil), // 112: hyapp.wallet.v1.PurchaseResourceShopItemRequest - (*PurchaseResourceShopItemResponse)(nil), // 113: hyapp.wallet.v1.PurchaseResourceShopItemResponse - (*RechargeBill)(nil), // 114: hyapp.wallet.v1.RechargeBill - (*ListRechargeBillsRequest)(nil), // 115: hyapp.wallet.v1.ListRechargeBillsRequest - (*ListRechargeBillsResponse)(nil), // 116: hyapp.wallet.v1.ListRechargeBillsResponse - (*GetRechargeBillSummaryRequest)(nil), // 117: hyapp.wallet.v1.GetRechargeBillSummaryRequest - (*RechargeBillSummaryBucket)(nil), // 118: hyapp.wallet.v1.RechargeBillSummaryBucket - (*GetRechargeBillSummaryResponse)(nil), // 119: hyapp.wallet.v1.GetRechargeBillSummaryResponse - (*UserRechargeStats)(nil), // 120: hyapp.wallet.v1.UserRechargeStats - (*BatchGetUserRechargeStatsRequest)(nil), // 121: hyapp.wallet.v1.BatchGetUserRechargeStatsRequest - (*BatchGetUserRechargeStatsResponse)(nil), // 122: hyapp.wallet.v1.BatchGetUserRechargeStatsResponse - (*GetRechargeBillOverviewRequest)(nil), // 123: hyapp.wallet.v1.GetRechargeBillOverviewRequest - (*RechargeBillDailyBucket)(nil), // 124: hyapp.wallet.v1.RechargeBillDailyBucket - (*RechargeBillRegionBucket)(nil), // 125: hyapp.wallet.v1.RechargeBillRegionBucket - (*RechargeBillGooglePaidStats)(nil), // 126: hyapp.wallet.v1.RechargeBillGooglePaidStats - (*RechargeBillSalaryTransferStats)(nil), // 127: hyapp.wallet.v1.RechargeBillSalaryTransferStats - (*GetRechargeBillOverviewResponse)(nil), // 128: hyapp.wallet.v1.GetRechargeBillOverviewResponse - (*RefreshGooglePaymentPricesRequest)(nil), // 129: hyapp.wallet.v1.RefreshGooglePaymentPricesRequest - (*GooglePaymentPrice)(nil), // 130: hyapp.wallet.v1.GooglePaymentPrice - (*RefreshGooglePaymentPricesResponse)(nil), // 131: hyapp.wallet.v1.RefreshGooglePaymentPricesResponse - (*WalletFeatureFlags)(nil), // 132: hyapp.wallet.v1.WalletFeatureFlags - (*GetWalletOverviewRequest)(nil), // 133: hyapp.wallet.v1.GetWalletOverviewRequest - (*GetWalletOverviewResponse)(nil), // 134: hyapp.wallet.v1.GetWalletOverviewResponse - (*WalletValueSummary)(nil), // 135: hyapp.wallet.v1.WalletValueSummary - (*GetWalletValueSummaryRequest)(nil), // 136: hyapp.wallet.v1.GetWalletValueSummaryRequest - (*GetWalletValueSummaryResponse)(nil), // 137: hyapp.wallet.v1.GetWalletValueSummaryResponse - (*GiftWallItem)(nil), // 138: hyapp.wallet.v1.GiftWallItem - (*GetUserGiftWallRequest)(nil), // 139: hyapp.wallet.v1.GetUserGiftWallRequest - (*GetUserGiftWallResponse)(nil), // 140: hyapp.wallet.v1.GetUserGiftWallResponse - (*RechargeProduct)(nil), // 141: hyapp.wallet.v1.RechargeProduct - (*ListRechargeProductsRequest)(nil), // 142: hyapp.wallet.v1.ListRechargeProductsRequest - (*ListRechargeProductsResponse)(nil), // 143: hyapp.wallet.v1.ListRechargeProductsResponse - (*ConfirmGooglePaymentRequest)(nil), // 144: hyapp.wallet.v1.ConfirmGooglePaymentRequest - (*ConfirmGooglePaymentResponse)(nil), // 145: hyapp.wallet.v1.ConfirmGooglePaymentResponse - (*ListAdminRechargeProductsRequest)(nil), // 146: hyapp.wallet.v1.ListAdminRechargeProductsRequest - (*ListAdminRechargeProductsResponse)(nil), // 147: hyapp.wallet.v1.ListAdminRechargeProductsResponse - (*CreateRechargeProductRequest)(nil), // 148: hyapp.wallet.v1.CreateRechargeProductRequest - (*UpdateRechargeProductRequest)(nil), // 149: hyapp.wallet.v1.UpdateRechargeProductRequest - (*DeleteRechargeProductRequest)(nil), // 150: hyapp.wallet.v1.DeleteRechargeProductRequest - (*RechargeProductResponse)(nil), // 151: hyapp.wallet.v1.RechargeProductResponse - (*DeleteRechargeProductResponse)(nil), // 152: hyapp.wallet.v1.DeleteRechargeProductResponse - (*ThirdPartyPaymentMethod)(nil), // 153: hyapp.wallet.v1.ThirdPartyPaymentMethod - (*ThirdPartyPaymentChannel)(nil), // 154: hyapp.wallet.v1.ThirdPartyPaymentChannel - (*ListThirdPartyPaymentChannelsRequest)(nil), // 155: hyapp.wallet.v1.ListThirdPartyPaymentChannelsRequest - (*ListThirdPartyPaymentChannelsResponse)(nil), // 156: hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse - (*SetThirdPartyPaymentMethodStatusRequest)(nil), // 157: hyapp.wallet.v1.SetThirdPartyPaymentMethodStatusRequest - (*ThirdPartyPaymentMethodResponse)(nil), // 158: hyapp.wallet.v1.ThirdPartyPaymentMethodResponse - (*UpdateThirdPartyPaymentRateRequest)(nil), // 159: hyapp.wallet.v1.UpdateThirdPartyPaymentRateRequest - (*ThirdPartyPaymentMethodSyncIssue)(nil), // 160: hyapp.wallet.v1.ThirdPartyPaymentMethodSyncIssue - (*SyncThirdPartyPaymentMethodsRequest)(nil), // 161: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsRequest - (*SyncThirdPartyPaymentMethodsResponse)(nil), // 162: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse - (*H5RechargeOptionsRequest)(nil), // 163: hyapp.wallet.v1.H5RechargeOptionsRequest - (*H5RechargeOptionsResponse)(nil), // 164: hyapp.wallet.v1.H5RechargeOptionsResponse - (*ExternalRechargeOrder)(nil), // 165: hyapp.wallet.v1.ExternalRechargeOrder - (*CreateH5RechargeOrderRequest)(nil), // 166: hyapp.wallet.v1.CreateH5RechargeOrderRequest - (*CreateTemporaryRechargeOrderRequest)(nil), // 167: hyapp.wallet.v1.CreateTemporaryRechargeOrderRequest - (*GetTemporaryRechargeOrderRequest)(nil), // 168: hyapp.wallet.v1.GetTemporaryRechargeOrderRequest - (*ListTemporaryRechargeOrdersRequest)(nil), // 169: hyapp.wallet.v1.ListTemporaryRechargeOrdersRequest - (*ListTemporaryRechargeOrdersResponse)(nil), // 170: hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse - (*SubmitH5RechargeTxRequest)(nil), // 171: hyapp.wallet.v1.SubmitH5RechargeTxRequest - (*GetH5RechargeOrderRequest)(nil), // 172: hyapp.wallet.v1.GetH5RechargeOrderRequest - (*H5RechargeOrderResponse)(nil), // 173: hyapp.wallet.v1.H5RechargeOrderResponse - (*VerifyCoinSellerRechargeReceiptRequest)(nil), // 174: hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptRequest - (*VerifyCoinSellerRechargeReceiptResponse)(nil), // 175: hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse - (*HandleMifapayNotifyRequest)(nil), // 176: hyapp.wallet.v1.HandleMifapayNotifyRequest - (*HandleMifapayNotifyResponse)(nil), // 177: hyapp.wallet.v1.HandleMifapayNotifyResponse - (*HandleV5PayNotifyRequest)(nil), // 178: hyapp.wallet.v1.HandleV5PayNotifyRequest - (*HandleV5PayNotifyResponse)(nil), // 179: hyapp.wallet.v1.HandleV5PayNotifyResponse - (*DiamondExchangeRule)(nil), // 180: hyapp.wallet.v1.DiamondExchangeRule - (*GetDiamondExchangeConfigRequest)(nil), // 181: hyapp.wallet.v1.GetDiamondExchangeConfigRequest - (*GetDiamondExchangeConfigResponse)(nil), // 182: hyapp.wallet.v1.GetDiamondExchangeConfigResponse - (*WalletTransaction)(nil), // 183: hyapp.wallet.v1.WalletTransaction - (*ListWalletTransactionsRequest)(nil), // 184: hyapp.wallet.v1.ListWalletTransactionsRequest - (*ListWalletTransactionsResponse)(nil), // 185: hyapp.wallet.v1.ListWalletTransactionsResponse - (*VipRewardItem)(nil), // 186: hyapp.wallet.v1.VipRewardItem - (*VipProgramConfig)(nil), // 187: hyapp.wallet.v1.VipProgramConfig - (*VipBenefit)(nil), // 188: hyapp.wallet.v1.VipBenefit - (*VipLevel)(nil), // 189: hyapp.wallet.v1.VipLevel - (*UserVip)(nil), // 190: hyapp.wallet.v1.UserVip - (*VipTrialCard)(nil), // 191: hyapp.wallet.v1.VipTrialCard - (*VipUserSettings)(nil), // 192: hyapp.wallet.v1.VipUserSettings - (*VipState)(nil), // 193: hyapp.wallet.v1.VipState - (*ListVipPackagesRequest)(nil), // 194: hyapp.wallet.v1.ListVipPackagesRequest - (*ListVipPackagesResponse)(nil), // 195: hyapp.wallet.v1.ListVipPackagesResponse - (*GetMyVipRequest)(nil), // 196: hyapp.wallet.v1.GetMyVipRequest - (*GetMyVipResponse)(nil), // 197: hyapp.wallet.v1.GetMyVipResponse - (*PurchaseVipRequest)(nil), // 198: hyapp.wallet.v1.PurchaseVipRequest - (*PurchaseVipResponse)(nil), // 199: hyapp.wallet.v1.PurchaseVipResponse - (*DebitCPBreakupFeeRequest)(nil), // 200: hyapp.wallet.v1.DebitCPBreakupFeeRequest - (*DebitCPBreakupFeeResponse)(nil), // 201: hyapp.wallet.v1.DebitCPBreakupFeeResponse - (*DebitWheelDrawRequest)(nil), // 202: hyapp.wallet.v1.DebitWheelDrawRequest - (*DebitWheelDrawResponse)(nil), // 203: hyapp.wallet.v1.DebitWheelDrawResponse - (*GrantVipRequest)(nil), // 204: hyapp.wallet.v1.GrantVipRequest - (*GrantVipResponse)(nil), // 205: hyapp.wallet.v1.GrantVipResponse - (*GetVipProgramConfigRequest)(nil), // 206: hyapp.wallet.v1.GetVipProgramConfigRequest - (*GetVipProgramConfigResponse)(nil), // 207: hyapp.wallet.v1.GetVipProgramConfigResponse - (*UpdateAdminVipProgramConfigRequest)(nil), // 208: hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest - (*UpdateAdminVipProgramConfigResponse)(nil), // 209: hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse - (*UpdateMyVipSettingsRequest)(nil), // 210: hyapp.wallet.v1.UpdateMyVipSettingsRequest - (*UpdateMyVipSettingsResponse)(nil), // 211: hyapp.wallet.v1.UpdateMyVipSettingsResponse - (*VipDailyCoinRebateRun)(nil), // 212: hyapp.wallet.v1.VipDailyCoinRebateRun - (*VipDailyCoinRebate)(nil), // 213: hyapp.wallet.v1.VipDailyCoinRebate - (*ProcessVipDailyCoinRebateBatchRequest)(nil), // 214: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest - (*ProcessVipDailyCoinRebateBatchResponse)(nil), // 215: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse - (*GetMyCurrentVipDailyCoinRebateRequest)(nil), // 216: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest - (*GetMyCurrentVipDailyCoinRebateResponse)(nil), // 217: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse - (*ListMyVipDailyCoinRebateStatusesRequest)(nil), // 218: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest - (*ListMyVipDailyCoinRebateStatusesResponse)(nil), // 219: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse - (*ClaimVipDailyCoinRebateRequest)(nil), // 220: hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest - (*ClaimVipDailyCoinRebateResponse)(nil), // 221: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse - (*GrantVipTrialCardRequest)(nil), // 222: hyapp.wallet.v1.GrantVipTrialCardRequest - (*GrantVipTrialCardResponse)(nil), // 223: hyapp.wallet.v1.GrantVipTrialCardResponse - (*EquipVipTrialCardRequest)(nil), // 224: hyapp.wallet.v1.EquipVipTrialCardRequest - (*EquipVipTrialCardResponse)(nil), // 225: hyapp.wallet.v1.EquipVipTrialCardResponse - (*UnequipVipTrialCardRequest)(nil), // 226: hyapp.wallet.v1.UnequipVipTrialCardRequest - (*UnequipVipTrialCardResponse)(nil), // 227: hyapp.wallet.v1.UnequipVipTrialCardResponse - (*CheckVipBenefitRequest)(nil), // 228: hyapp.wallet.v1.CheckVipBenefitRequest - (*CheckVipBenefitResponse)(nil), // 229: hyapp.wallet.v1.CheckVipBenefitResponse - (*AdminVipLevelInput)(nil), // 230: hyapp.wallet.v1.AdminVipLevelInput - (*ListAdminVipLevelsRequest)(nil), // 231: hyapp.wallet.v1.ListAdminVipLevelsRequest - (*ListAdminVipLevelsResponse)(nil), // 232: hyapp.wallet.v1.ListAdminVipLevelsResponse - (*UpdateAdminVipLevelsRequest)(nil), // 233: hyapp.wallet.v1.UpdateAdminVipLevelsRequest - (*UpdateAdminVipLevelsResponse)(nil), // 234: hyapp.wallet.v1.UpdateAdminVipLevelsResponse - (*CreditTaskRewardRequest)(nil), // 235: hyapp.wallet.v1.CreditTaskRewardRequest - (*CreditTaskRewardResponse)(nil), // 236: hyapp.wallet.v1.CreditTaskRewardResponse - (*CreditLuckyGiftRewardRequest)(nil), // 237: hyapp.wallet.v1.CreditLuckyGiftRewardRequest - (*CreditLuckyGiftRewardResponse)(nil), // 238: hyapp.wallet.v1.CreditLuckyGiftRewardResponse - (*CreditWheelRewardRequest)(nil), // 239: hyapp.wallet.v1.CreditWheelRewardRequest - (*CreditWheelRewardResponse)(nil), // 240: hyapp.wallet.v1.CreditWheelRewardResponse - (*CreditRoomTurnoverRewardRequest)(nil), // 241: hyapp.wallet.v1.CreditRoomTurnoverRewardRequest - (*CreditRoomTurnoverRewardResponse)(nil), // 242: hyapp.wallet.v1.CreditRoomTurnoverRewardResponse - (*CreditInviteActivityRewardRequest)(nil), // 243: hyapp.wallet.v1.CreditInviteActivityRewardRequest - (*CreditInviteActivityRewardResponse)(nil), // 244: hyapp.wallet.v1.CreditInviteActivityRewardResponse - (*CreditAgencyOpeningRewardRequest)(nil), // 245: hyapp.wallet.v1.CreditAgencyOpeningRewardRequest - (*CreditAgencyOpeningRewardResponse)(nil), // 246: hyapp.wallet.v1.CreditAgencyOpeningRewardResponse - (*ApplyGameCoinChangeRequest)(nil), // 247: hyapp.wallet.v1.ApplyGameCoinChangeRequest - (*ApplyGameCoinChangeResponse)(nil), // 248: hyapp.wallet.v1.ApplyGameCoinChangeResponse - (*RedPacketConfig)(nil), // 249: hyapp.wallet.v1.RedPacketConfig - (*RedPacketClaim)(nil), // 250: hyapp.wallet.v1.RedPacketClaim - (*RedPacket)(nil), // 251: hyapp.wallet.v1.RedPacket - (*GetRedPacketConfigRequest)(nil), // 252: hyapp.wallet.v1.GetRedPacketConfigRequest - (*GetRedPacketConfigResponse)(nil), // 253: hyapp.wallet.v1.GetRedPacketConfigResponse - (*UpdateRedPacketConfigRequest)(nil), // 254: hyapp.wallet.v1.UpdateRedPacketConfigRequest - (*UpdateRedPacketConfigResponse)(nil), // 255: hyapp.wallet.v1.UpdateRedPacketConfigResponse - (*CreateRedPacketRequest)(nil), // 256: hyapp.wallet.v1.CreateRedPacketRequest - (*CreateRedPacketResponse)(nil), // 257: hyapp.wallet.v1.CreateRedPacketResponse - (*ClaimRedPacketRequest)(nil), // 258: hyapp.wallet.v1.ClaimRedPacketRequest - (*ClaimRedPacketResponse)(nil), // 259: hyapp.wallet.v1.ClaimRedPacketResponse - (*ListRedPacketsRequest)(nil), // 260: hyapp.wallet.v1.ListRedPacketsRequest - (*ListRedPacketsResponse)(nil), // 261: hyapp.wallet.v1.ListRedPacketsResponse - (*GetRedPacketRequest)(nil), // 262: hyapp.wallet.v1.GetRedPacketRequest - (*GetRedPacketResponse)(nil), // 263: hyapp.wallet.v1.GetRedPacketResponse - (*ExpireRedPacketsRequest)(nil), // 264: hyapp.wallet.v1.ExpireRedPacketsRequest - (*ExpireRedPacketsResponse)(nil), // 265: hyapp.wallet.v1.ExpireRedPacketsResponse - (*RetryRedPacketRefundRequest)(nil), // 266: hyapp.wallet.v1.RetryRedPacketRefundRequest - (*RetryRedPacketRefundResponse)(nil), // 267: hyapp.wallet.v1.RetryRedPacketRefundResponse - (*CronBatchRequest)(nil), // 268: hyapp.wallet.v1.CronBatchRequest - (*CronBatchResponse)(nil), // 269: hyapp.wallet.v1.CronBatchResponse - (*ResourceShopPurchaseOrder)(nil), // 270: hyapp.wallet.v1.ResourceShopPurchaseOrder - (*ListResourceShopPurchaseOrdersRequest)(nil), // 271: hyapp.wallet.v1.ListResourceShopPurchaseOrdersRequest - (*ListResourceShopPurchaseOrdersResponse)(nil), // 272: hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse - (*GetGiftCatalogVersionRequest)(nil), // 273: hyapp.wallet.v1.GetGiftCatalogVersionRequest - (*GetGiftCatalogVersionResponse)(nil), // 274: hyapp.wallet.v1.GetGiftCatalogVersionResponse - (*HostRevenueStats)(nil), // 275: hyapp.wallet.v1.HostRevenueStats - (*GetHostRevenueStatsRequest)(nil), // 276: hyapp.wallet.v1.GetHostRevenueStatsRequest - (*GetHostRevenueStatsResponse)(nil), // 277: hyapp.wallet.v1.GetHostRevenueStatsResponse - (*AgencyPointShareStats)(nil), // 278: hyapp.wallet.v1.AgencyPointShareStats - (*GetAgencyPointShareStatsRequest)(nil), // 279: hyapp.wallet.v1.GetAgencyPointShareStatsRequest - (*GetAgencyPointShareStatsResponse)(nil), // 280: hyapp.wallet.v1.GetAgencyPointShareStatsResponse - (*AgencyHostGiftStats)(nil), // 281: hyapp.wallet.v1.AgencyHostGiftStats - (*GetAgencyHostGiftStatsRequest)(nil), // 282: hyapp.wallet.v1.GetAgencyHostGiftStatsRequest - (*GetAgencyHostGiftStatsResponse)(nil), // 283: hyapp.wallet.v1.GetAgencyHostGiftStatsResponse - (*PointWithdrawalCoinSellerConfig)(nil), // 284: hyapp.wallet.v1.PointWithdrawalCoinSellerConfig - (*ListPointWithdrawalCoinSellersRequest)(nil), // 285: hyapp.wallet.v1.ListPointWithdrawalCoinSellersRequest - (*ListPointWithdrawalCoinSellersResponse)(nil), // 286: hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse - (*TransferPointToCoinSellerRequest)(nil), // 287: hyapp.wallet.v1.TransferPointToCoinSellerRequest - (*TransferPointToCoinSellerResponse)(nil), // 288: hyapp.wallet.v1.TransferPointToCoinSellerResponse - (*GetPointWithdrawalConfigRequest)(nil), // 289: hyapp.wallet.v1.GetPointWithdrawalConfigRequest - (*GetPointWithdrawalConfigResponse)(nil), // 290: hyapp.wallet.v1.GetPointWithdrawalConfigResponse - nil, // 291: hyapp.wallet.v1.HandleV5PayNotifyRequest.FieldsEntry + (*ResourceGroupSnapshot)(nil), // 51: hyapp.wallet.v1.ResourceGroupSnapshot + (*PinResourceGroupSnapshotRequest)(nil), // 52: hyapp.wallet.v1.PinResourceGroupSnapshotRequest + (*PinResourceGroupSnapshotResponse)(nil), // 53: hyapp.wallet.v1.PinResourceGroupSnapshotResponse + (*GiftConfig)(nil), // 54: hyapp.wallet.v1.GiftConfig + (*GiftTypeConfig)(nil), // 55: hyapp.wallet.v1.GiftTypeConfig + (*ResourceShopItem)(nil), // 56: hyapp.wallet.v1.ResourceShopItem + (*UserResourceEntitlement)(nil), // 57: hyapp.wallet.v1.UserResourceEntitlement + (*ResourceGrantItem)(nil), // 58: hyapp.wallet.v1.ResourceGrantItem + (*ResourceGrant)(nil), // 59: hyapp.wallet.v1.ResourceGrant + (*ResourceGroupItemInput)(nil), // 60: hyapp.wallet.v1.ResourceGroupItemInput + (*ListResourcesRequest)(nil), // 61: hyapp.wallet.v1.ListResourcesRequest + (*ListResourcesResponse)(nil), // 62: hyapp.wallet.v1.ListResourcesResponse + (*GetResourceRequest)(nil), // 63: hyapp.wallet.v1.GetResourceRequest + (*GetResourceResponse)(nil), // 64: hyapp.wallet.v1.GetResourceResponse + (*CreateResourceRequest)(nil), // 65: hyapp.wallet.v1.CreateResourceRequest + (*UpdateResourceRequest)(nil), // 66: hyapp.wallet.v1.UpdateResourceRequest + (*SetResourceStatusRequest)(nil), // 67: hyapp.wallet.v1.SetResourceStatusRequest + (*DeleteResourceRequest)(nil), // 68: hyapp.wallet.v1.DeleteResourceRequest + (*BatchDeleteResourcesRequest)(nil), // 69: hyapp.wallet.v1.BatchDeleteResourcesRequest + (*BatchDeleteResourcesResponse)(nil), // 70: hyapp.wallet.v1.BatchDeleteResourcesResponse + (*ResourceResponse)(nil), // 71: hyapp.wallet.v1.ResourceResponse + (*ListResourceGroupsRequest)(nil), // 72: hyapp.wallet.v1.ListResourceGroupsRequest + (*ListResourceGroupsResponse)(nil), // 73: hyapp.wallet.v1.ListResourceGroupsResponse + (*GetResourceGroupRequest)(nil), // 74: hyapp.wallet.v1.GetResourceGroupRequest + (*GetResourceGroupResponse)(nil), // 75: hyapp.wallet.v1.GetResourceGroupResponse + (*CreateResourceGroupRequest)(nil), // 76: hyapp.wallet.v1.CreateResourceGroupRequest + (*UpdateResourceGroupRequest)(nil), // 77: hyapp.wallet.v1.UpdateResourceGroupRequest + (*SetResourceGroupStatusRequest)(nil), // 78: hyapp.wallet.v1.SetResourceGroupStatusRequest + (*ResourceGroupResponse)(nil), // 79: hyapp.wallet.v1.ResourceGroupResponse + (*ListGiftConfigsRequest)(nil), // 80: hyapp.wallet.v1.ListGiftConfigsRequest + (*ListGiftConfigsResponse)(nil), // 81: hyapp.wallet.v1.ListGiftConfigsResponse + (*ListGiftTypeConfigsRequest)(nil), // 82: hyapp.wallet.v1.ListGiftTypeConfigsRequest + (*ListGiftTypeConfigsResponse)(nil), // 83: hyapp.wallet.v1.ListGiftTypeConfigsResponse + (*UpsertGiftTypeConfigRequest)(nil), // 84: hyapp.wallet.v1.UpsertGiftTypeConfigRequest + (*GiftTypeConfigResponse)(nil), // 85: hyapp.wallet.v1.GiftTypeConfigResponse + (*CreateGiftConfigRequest)(nil), // 86: hyapp.wallet.v1.CreateGiftConfigRequest + (*BatchCreateGiftConfigsRequest)(nil), // 87: hyapp.wallet.v1.BatchCreateGiftConfigsRequest + (*BatchCreateGiftConfigsResponse)(nil), // 88: hyapp.wallet.v1.BatchCreateGiftConfigsResponse + (*UpdateGiftConfigRequest)(nil), // 89: hyapp.wallet.v1.UpdateGiftConfigRequest + (*SetGiftConfigStatusRequest)(nil), // 90: hyapp.wallet.v1.SetGiftConfigStatusRequest + (*DeleteGiftConfigRequest)(nil), // 91: hyapp.wallet.v1.DeleteGiftConfigRequest + (*GiftConfigResponse)(nil), // 92: hyapp.wallet.v1.GiftConfigResponse + (*GrantResourceRequest)(nil), // 93: hyapp.wallet.v1.GrantResourceRequest + (*GrantResourceGroupRequest)(nil), // 94: hyapp.wallet.v1.GrantResourceGroupRequest + (*GrantPinnedResourceGroupRequest)(nil), // 95: hyapp.wallet.v1.GrantPinnedResourceGroupRequest + (*RevokeResourceGrantRequest)(nil), // 96: hyapp.wallet.v1.RevokeResourceGrantRequest + (*ResourceGrantResponse)(nil), // 97: hyapp.wallet.v1.ResourceGrantResponse + (*ListUserResourcesRequest)(nil), // 98: hyapp.wallet.v1.ListUserResourcesRequest + (*ListUserResourcesResponse)(nil), // 99: hyapp.wallet.v1.ListUserResourcesResponse + (*EquipUserResourceRequest)(nil), // 100: hyapp.wallet.v1.EquipUserResourceRequest + (*EquipUserResourceResponse)(nil), // 101: hyapp.wallet.v1.EquipUserResourceResponse + (*UnequipUserResourceRequest)(nil), // 102: hyapp.wallet.v1.UnequipUserResourceRequest + (*UnequipUserResourceResponse)(nil), // 103: hyapp.wallet.v1.UnequipUserResourceResponse + (*BatchGetUserEquippedResourcesRequest)(nil), // 104: hyapp.wallet.v1.BatchGetUserEquippedResourcesRequest + (*UserEquippedResources)(nil), // 105: hyapp.wallet.v1.UserEquippedResources + (*BatchGetUserEquippedResourcesResponse)(nil), // 106: hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse + (*ListResourceGrantsRequest)(nil), // 107: hyapp.wallet.v1.ListResourceGrantsRequest + (*ListResourceGrantsResponse)(nil), // 108: hyapp.wallet.v1.ListResourceGrantsResponse + (*ResourceShopItemInput)(nil), // 109: hyapp.wallet.v1.ResourceShopItemInput + (*ListResourceShopItemsRequest)(nil), // 110: hyapp.wallet.v1.ListResourceShopItemsRequest + (*ListResourceShopItemsResponse)(nil), // 111: hyapp.wallet.v1.ListResourceShopItemsResponse + (*UpsertResourceShopItemsRequest)(nil), // 112: hyapp.wallet.v1.UpsertResourceShopItemsRequest + (*UpsertResourceShopItemsResponse)(nil), // 113: hyapp.wallet.v1.UpsertResourceShopItemsResponse + (*SetResourceShopItemStatusRequest)(nil), // 114: hyapp.wallet.v1.SetResourceShopItemStatusRequest + (*ResourceShopItemResponse)(nil), // 115: hyapp.wallet.v1.ResourceShopItemResponse + (*PurchaseResourceShopItemRequest)(nil), // 116: hyapp.wallet.v1.PurchaseResourceShopItemRequest + (*PurchaseResourceShopItemResponse)(nil), // 117: hyapp.wallet.v1.PurchaseResourceShopItemResponse + (*RechargeBill)(nil), // 118: hyapp.wallet.v1.RechargeBill + (*ListRechargeBillsRequest)(nil), // 119: hyapp.wallet.v1.ListRechargeBillsRequest + (*ListRechargeBillsResponse)(nil), // 120: hyapp.wallet.v1.ListRechargeBillsResponse + (*GetRechargeBillSummaryRequest)(nil), // 121: hyapp.wallet.v1.GetRechargeBillSummaryRequest + (*RechargeBillSummaryBucket)(nil), // 122: hyapp.wallet.v1.RechargeBillSummaryBucket + (*GetRechargeBillSummaryResponse)(nil), // 123: hyapp.wallet.v1.GetRechargeBillSummaryResponse + (*UserRechargeStats)(nil), // 124: hyapp.wallet.v1.UserRechargeStats + (*BatchGetUserRechargeStatsRequest)(nil), // 125: hyapp.wallet.v1.BatchGetUserRechargeStatsRequest + (*BatchGetUserRechargeStatsResponse)(nil), // 126: hyapp.wallet.v1.BatchGetUserRechargeStatsResponse + (*GetRechargeBillOverviewRequest)(nil), // 127: hyapp.wallet.v1.GetRechargeBillOverviewRequest + (*RechargeBillDailyBucket)(nil), // 128: hyapp.wallet.v1.RechargeBillDailyBucket + (*RechargeBillRegionBucket)(nil), // 129: hyapp.wallet.v1.RechargeBillRegionBucket + (*RechargeBillGooglePaidStats)(nil), // 130: hyapp.wallet.v1.RechargeBillGooglePaidStats + (*RechargeBillSalaryTransferStats)(nil), // 131: hyapp.wallet.v1.RechargeBillSalaryTransferStats + (*GetRechargeBillOverviewResponse)(nil), // 132: hyapp.wallet.v1.GetRechargeBillOverviewResponse + (*RefreshGooglePaymentPricesRequest)(nil), // 133: hyapp.wallet.v1.RefreshGooglePaymentPricesRequest + (*GooglePaymentPrice)(nil), // 134: hyapp.wallet.v1.GooglePaymentPrice + (*RefreshGooglePaymentPricesResponse)(nil), // 135: hyapp.wallet.v1.RefreshGooglePaymentPricesResponse + (*WalletFeatureFlags)(nil), // 136: hyapp.wallet.v1.WalletFeatureFlags + (*GetWalletOverviewRequest)(nil), // 137: hyapp.wallet.v1.GetWalletOverviewRequest + (*GetWalletOverviewResponse)(nil), // 138: hyapp.wallet.v1.GetWalletOverviewResponse + (*WalletValueSummary)(nil), // 139: hyapp.wallet.v1.WalletValueSummary + (*GetWalletValueSummaryRequest)(nil), // 140: hyapp.wallet.v1.GetWalletValueSummaryRequest + (*GetWalletValueSummaryResponse)(nil), // 141: hyapp.wallet.v1.GetWalletValueSummaryResponse + (*GiftWallItem)(nil), // 142: hyapp.wallet.v1.GiftWallItem + (*GetUserGiftWallRequest)(nil), // 143: hyapp.wallet.v1.GetUserGiftWallRequest + (*GetUserGiftWallResponse)(nil), // 144: hyapp.wallet.v1.GetUserGiftWallResponse + (*RechargeProduct)(nil), // 145: hyapp.wallet.v1.RechargeProduct + (*ListRechargeProductsRequest)(nil), // 146: hyapp.wallet.v1.ListRechargeProductsRequest + (*ListRechargeProductsResponse)(nil), // 147: hyapp.wallet.v1.ListRechargeProductsResponse + (*ConfirmGooglePaymentRequest)(nil), // 148: hyapp.wallet.v1.ConfirmGooglePaymentRequest + (*ConfirmGooglePaymentResponse)(nil), // 149: hyapp.wallet.v1.ConfirmGooglePaymentResponse + (*ListAdminRechargeProductsRequest)(nil), // 150: hyapp.wallet.v1.ListAdminRechargeProductsRequest + (*ListAdminRechargeProductsResponse)(nil), // 151: hyapp.wallet.v1.ListAdminRechargeProductsResponse + (*CreateRechargeProductRequest)(nil), // 152: hyapp.wallet.v1.CreateRechargeProductRequest + (*UpdateRechargeProductRequest)(nil), // 153: hyapp.wallet.v1.UpdateRechargeProductRequest + (*DeleteRechargeProductRequest)(nil), // 154: hyapp.wallet.v1.DeleteRechargeProductRequest + (*RechargeProductResponse)(nil), // 155: hyapp.wallet.v1.RechargeProductResponse + (*DeleteRechargeProductResponse)(nil), // 156: hyapp.wallet.v1.DeleteRechargeProductResponse + (*ThirdPartyPaymentMethod)(nil), // 157: hyapp.wallet.v1.ThirdPartyPaymentMethod + (*ThirdPartyPaymentChannel)(nil), // 158: hyapp.wallet.v1.ThirdPartyPaymentChannel + (*ListThirdPartyPaymentChannelsRequest)(nil), // 159: hyapp.wallet.v1.ListThirdPartyPaymentChannelsRequest + (*ListThirdPartyPaymentChannelsResponse)(nil), // 160: hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse + (*SetThirdPartyPaymentMethodStatusRequest)(nil), // 161: hyapp.wallet.v1.SetThirdPartyPaymentMethodStatusRequest + (*ThirdPartyPaymentMethodResponse)(nil), // 162: hyapp.wallet.v1.ThirdPartyPaymentMethodResponse + (*UpdateThirdPartyPaymentRateRequest)(nil), // 163: hyapp.wallet.v1.UpdateThirdPartyPaymentRateRequest + (*ThirdPartyPaymentMethodSyncIssue)(nil), // 164: hyapp.wallet.v1.ThirdPartyPaymentMethodSyncIssue + (*SyncThirdPartyPaymentMethodsRequest)(nil), // 165: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsRequest + (*SyncThirdPartyPaymentMethodsResponse)(nil), // 166: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse + (*H5RechargeOptionsRequest)(nil), // 167: hyapp.wallet.v1.H5RechargeOptionsRequest + (*H5RechargeOptionsResponse)(nil), // 168: hyapp.wallet.v1.H5RechargeOptionsResponse + (*ExternalRechargeOrder)(nil), // 169: hyapp.wallet.v1.ExternalRechargeOrder + (*CreateH5RechargeOrderRequest)(nil), // 170: hyapp.wallet.v1.CreateH5RechargeOrderRequest + (*CreateTemporaryRechargeOrderRequest)(nil), // 171: hyapp.wallet.v1.CreateTemporaryRechargeOrderRequest + (*GetTemporaryRechargeOrderRequest)(nil), // 172: hyapp.wallet.v1.GetTemporaryRechargeOrderRequest + (*ListTemporaryRechargeOrdersRequest)(nil), // 173: hyapp.wallet.v1.ListTemporaryRechargeOrdersRequest + (*ListTemporaryRechargeOrdersResponse)(nil), // 174: hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse + (*SubmitH5RechargeTxRequest)(nil), // 175: hyapp.wallet.v1.SubmitH5RechargeTxRequest + (*GetH5RechargeOrderRequest)(nil), // 176: hyapp.wallet.v1.GetH5RechargeOrderRequest + (*H5RechargeOrderResponse)(nil), // 177: hyapp.wallet.v1.H5RechargeOrderResponse + (*VerifyCoinSellerRechargeReceiptRequest)(nil), // 178: hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptRequest + (*VerifyCoinSellerRechargeReceiptResponse)(nil), // 179: hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse + (*HandleMifapayNotifyRequest)(nil), // 180: hyapp.wallet.v1.HandleMifapayNotifyRequest + (*HandleMifapayNotifyResponse)(nil), // 181: hyapp.wallet.v1.HandleMifapayNotifyResponse + (*HandleV5PayNotifyRequest)(nil), // 182: hyapp.wallet.v1.HandleV5PayNotifyRequest + (*HandleV5PayNotifyResponse)(nil), // 183: hyapp.wallet.v1.HandleV5PayNotifyResponse + (*DiamondExchangeRule)(nil), // 184: hyapp.wallet.v1.DiamondExchangeRule + (*GetDiamondExchangeConfigRequest)(nil), // 185: hyapp.wallet.v1.GetDiamondExchangeConfigRequest + (*GetDiamondExchangeConfigResponse)(nil), // 186: hyapp.wallet.v1.GetDiamondExchangeConfigResponse + (*WalletTransaction)(nil), // 187: hyapp.wallet.v1.WalletTransaction + (*ListWalletTransactionsRequest)(nil), // 188: hyapp.wallet.v1.ListWalletTransactionsRequest + (*ListWalletTransactionsResponse)(nil), // 189: hyapp.wallet.v1.ListWalletTransactionsResponse + (*VipRewardItem)(nil), // 190: hyapp.wallet.v1.VipRewardItem + (*VipProgramConfig)(nil), // 191: hyapp.wallet.v1.VipProgramConfig + (*VipBenefit)(nil), // 192: hyapp.wallet.v1.VipBenefit + (*VipLevel)(nil), // 193: hyapp.wallet.v1.VipLevel + (*UserVip)(nil), // 194: hyapp.wallet.v1.UserVip + (*VipTrialCard)(nil), // 195: hyapp.wallet.v1.VipTrialCard + (*VipUserSettings)(nil), // 196: hyapp.wallet.v1.VipUserSettings + (*VipState)(nil), // 197: hyapp.wallet.v1.VipState + (*ListVipPackagesRequest)(nil), // 198: hyapp.wallet.v1.ListVipPackagesRequest + (*ListVipPackagesResponse)(nil), // 199: hyapp.wallet.v1.ListVipPackagesResponse + (*GetMyVipRequest)(nil), // 200: hyapp.wallet.v1.GetMyVipRequest + (*GetMyVipResponse)(nil), // 201: hyapp.wallet.v1.GetMyVipResponse + (*PurchaseVipRequest)(nil), // 202: hyapp.wallet.v1.PurchaseVipRequest + (*PurchaseVipResponse)(nil), // 203: hyapp.wallet.v1.PurchaseVipResponse + (*DebitCPBreakupFeeRequest)(nil), // 204: hyapp.wallet.v1.DebitCPBreakupFeeRequest + (*DebitCPBreakupFeeResponse)(nil), // 205: hyapp.wallet.v1.DebitCPBreakupFeeResponse + (*DebitWheelDrawRequest)(nil), // 206: hyapp.wallet.v1.DebitWheelDrawRequest + (*DebitWheelDrawResponse)(nil), // 207: hyapp.wallet.v1.DebitWheelDrawResponse + (*GrantVipRequest)(nil), // 208: hyapp.wallet.v1.GrantVipRequest + (*GrantVipResponse)(nil), // 209: hyapp.wallet.v1.GrantVipResponse + (*GetVipProgramConfigRequest)(nil), // 210: hyapp.wallet.v1.GetVipProgramConfigRequest + (*GetVipProgramConfigResponse)(nil), // 211: hyapp.wallet.v1.GetVipProgramConfigResponse + (*UpdateAdminVipProgramConfigRequest)(nil), // 212: hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest + (*UpdateAdminVipProgramConfigResponse)(nil), // 213: hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse + (*UpdateMyVipSettingsRequest)(nil), // 214: hyapp.wallet.v1.UpdateMyVipSettingsRequest + (*UpdateMyVipSettingsResponse)(nil), // 215: hyapp.wallet.v1.UpdateMyVipSettingsResponse + (*VipDailyCoinRebateRun)(nil), // 216: hyapp.wallet.v1.VipDailyCoinRebateRun + (*VipDailyCoinRebate)(nil), // 217: hyapp.wallet.v1.VipDailyCoinRebate + (*ProcessVipDailyCoinRebateBatchRequest)(nil), // 218: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest + (*ProcessVipDailyCoinRebateBatchResponse)(nil), // 219: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse + (*GetMyCurrentVipDailyCoinRebateRequest)(nil), // 220: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest + (*GetMyCurrentVipDailyCoinRebateResponse)(nil), // 221: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse + (*ListMyVipDailyCoinRebateStatusesRequest)(nil), // 222: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest + (*ListMyVipDailyCoinRebateStatusesResponse)(nil), // 223: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse + (*ClaimVipDailyCoinRebateRequest)(nil), // 224: hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest + (*ClaimVipDailyCoinRebateResponse)(nil), // 225: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse + (*GrantVipTrialCardRequest)(nil), // 226: hyapp.wallet.v1.GrantVipTrialCardRequest + (*GrantVipTrialCardResponse)(nil), // 227: hyapp.wallet.v1.GrantVipTrialCardResponse + (*EquipVipTrialCardRequest)(nil), // 228: hyapp.wallet.v1.EquipVipTrialCardRequest + (*EquipVipTrialCardResponse)(nil), // 229: hyapp.wallet.v1.EquipVipTrialCardResponse + (*UnequipVipTrialCardRequest)(nil), // 230: hyapp.wallet.v1.UnequipVipTrialCardRequest + (*UnequipVipTrialCardResponse)(nil), // 231: hyapp.wallet.v1.UnequipVipTrialCardResponse + (*CheckVipBenefitRequest)(nil), // 232: hyapp.wallet.v1.CheckVipBenefitRequest + (*CheckVipBenefitResponse)(nil), // 233: hyapp.wallet.v1.CheckVipBenefitResponse + (*AdminVipLevelInput)(nil), // 234: hyapp.wallet.v1.AdminVipLevelInput + (*ListAdminVipLevelsRequest)(nil), // 235: hyapp.wallet.v1.ListAdminVipLevelsRequest + (*ListAdminVipLevelsResponse)(nil), // 236: hyapp.wallet.v1.ListAdminVipLevelsResponse + (*UpdateAdminVipLevelsRequest)(nil), // 237: hyapp.wallet.v1.UpdateAdminVipLevelsRequest + (*UpdateAdminVipLevelsResponse)(nil), // 238: hyapp.wallet.v1.UpdateAdminVipLevelsResponse + (*CreditTaskRewardRequest)(nil), // 239: hyapp.wallet.v1.CreditTaskRewardRequest + (*CreditTaskRewardResponse)(nil), // 240: hyapp.wallet.v1.CreditTaskRewardResponse + (*CreditLuckyGiftRewardRequest)(nil), // 241: hyapp.wallet.v1.CreditLuckyGiftRewardRequest + (*CreditLuckyGiftRewardResponse)(nil), // 242: hyapp.wallet.v1.CreditLuckyGiftRewardResponse + (*CreditWheelRewardRequest)(nil), // 243: hyapp.wallet.v1.CreditWheelRewardRequest + (*CreditWheelRewardResponse)(nil), // 244: hyapp.wallet.v1.CreditWheelRewardResponse + (*CreditRoomTurnoverRewardRequest)(nil), // 245: hyapp.wallet.v1.CreditRoomTurnoverRewardRequest + (*CreditRoomTurnoverRewardResponse)(nil), // 246: hyapp.wallet.v1.CreditRoomTurnoverRewardResponse + (*CreditInviteActivityRewardRequest)(nil), // 247: hyapp.wallet.v1.CreditInviteActivityRewardRequest + (*CreditInviteActivityRewardResponse)(nil), // 248: hyapp.wallet.v1.CreditInviteActivityRewardResponse + (*CreditAgencyOpeningRewardRequest)(nil), // 249: hyapp.wallet.v1.CreditAgencyOpeningRewardRequest + (*CreditAgencyOpeningRewardResponse)(nil), // 250: hyapp.wallet.v1.CreditAgencyOpeningRewardResponse + (*ApplyGameCoinChangeRequest)(nil), // 251: hyapp.wallet.v1.ApplyGameCoinChangeRequest + (*ApplyGameCoinChangeResponse)(nil), // 252: hyapp.wallet.v1.ApplyGameCoinChangeResponse + (*RedPacketConfig)(nil), // 253: hyapp.wallet.v1.RedPacketConfig + (*RedPacketClaim)(nil), // 254: hyapp.wallet.v1.RedPacketClaim + (*RedPacket)(nil), // 255: hyapp.wallet.v1.RedPacket + (*GetRedPacketConfigRequest)(nil), // 256: hyapp.wallet.v1.GetRedPacketConfigRequest + (*GetRedPacketConfigResponse)(nil), // 257: hyapp.wallet.v1.GetRedPacketConfigResponse + (*UpdateRedPacketConfigRequest)(nil), // 258: hyapp.wallet.v1.UpdateRedPacketConfigRequest + (*UpdateRedPacketConfigResponse)(nil), // 259: hyapp.wallet.v1.UpdateRedPacketConfigResponse + (*CreateRedPacketRequest)(nil), // 260: hyapp.wallet.v1.CreateRedPacketRequest + (*CreateRedPacketResponse)(nil), // 261: hyapp.wallet.v1.CreateRedPacketResponse + (*ClaimRedPacketRequest)(nil), // 262: hyapp.wallet.v1.ClaimRedPacketRequest + (*ClaimRedPacketResponse)(nil), // 263: hyapp.wallet.v1.ClaimRedPacketResponse + (*ListRedPacketsRequest)(nil), // 264: hyapp.wallet.v1.ListRedPacketsRequest + (*ListRedPacketsResponse)(nil), // 265: hyapp.wallet.v1.ListRedPacketsResponse + (*GetRedPacketRequest)(nil), // 266: hyapp.wallet.v1.GetRedPacketRequest + (*GetRedPacketResponse)(nil), // 267: hyapp.wallet.v1.GetRedPacketResponse + (*ExpireRedPacketsRequest)(nil), // 268: hyapp.wallet.v1.ExpireRedPacketsRequest + (*ExpireRedPacketsResponse)(nil), // 269: hyapp.wallet.v1.ExpireRedPacketsResponse + (*RetryRedPacketRefundRequest)(nil), // 270: hyapp.wallet.v1.RetryRedPacketRefundRequest + (*RetryRedPacketRefundResponse)(nil), // 271: hyapp.wallet.v1.RetryRedPacketRefundResponse + (*CronBatchRequest)(nil), // 272: hyapp.wallet.v1.CronBatchRequest + (*CronBatchResponse)(nil), // 273: hyapp.wallet.v1.CronBatchResponse + (*ResourceShopPurchaseOrder)(nil), // 274: hyapp.wallet.v1.ResourceShopPurchaseOrder + (*ListResourceShopPurchaseOrdersRequest)(nil), // 275: hyapp.wallet.v1.ListResourceShopPurchaseOrdersRequest + (*ListResourceShopPurchaseOrdersResponse)(nil), // 276: hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse + (*GetGiftCatalogVersionRequest)(nil), // 277: hyapp.wallet.v1.GetGiftCatalogVersionRequest + (*GetGiftCatalogVersionResponse)(nil), // 278: hyapp.wallet.v1.GetGiftCatalogVersionResponse + (*HostRevenueStats)(nil), // 279: hyapp.wallet.v1.HostRevenueStats + (*GetHostRevenueStatsRequest)(nil), // 280: hyapp.wallet.v1.GetHostRevenueStatsRequest + (*GetHostRevenueStatsResponse)(nil), // 281: hyapp.wallet.v1.GetHostRevenueStatsResponse + (*AgencyPointShareStats)(nil), // 282: hyapp.wallet.v1.AgencyPointShareStats + (*GetAgencyPointShareStatsRequest)(nil), // 283: hyapp.wallet.v1.GetAgencyPointShareStatsRequest + (*GetAgencyPointShareStatsResponse)(nil), // 284: hyapp.wallet.v1.GetAgencyPointShareStatsResponse + (*AgencyHostGiftStats)(nil), // 285: hyapp.wallet.v1.AgencyHostGiftStats + (*GetAgencyHostGiftStatsRequest)(nil), // 286: hyapp.wallet.v1.GetAgencyHostGiftStatsRequest + (*GetAgencyHostGiftStatsResponse)(nil), // 287: hyapp.wallet.v1.GetAgencyHostGiftStatsResponse + (*PointWithdrawalCoinSellerConfig)(nil), // 288: hyapp.wallet.v1.PointWithdrawalCoinSellerConfig + (*ListPointWithdrawalCoinSellersRequest)(nil), // 289: hyapp.wallet.v1.ListPointWithdrawalCoinSellersRequest + (*ListPointWithdrawalCoinSellersResponse)(nil), // 290: hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse + (*TransferPointToCoinSellerRequest)(nil), // 291: hyapp.wallet.v1.TransferPointToCoinSellerRequest + (*TransferPointToCoinSellerResponse)(nil), // 292: hyapp.wallet.v1.TransferPointToCoinSellerResponse + (*GetPointWithdrawalConfigRequest)(nil), // 293: hyapp.wallet.v1.GetPointWithdrawalConfigRequest + (*GetPointWithdrawalConfigResponse)(nil), // 294: hyapp.wallet.v1.GetPointWithdrawalConfigResponse + nil, // 295: hyapp.wallet.v1.HandleV5PayNotifyRequest.FieldsEntry } var file_proto_wallet_v1_wallet_proto_depIdxs = []int32{ 3, // 0: hyapp.wallet.v1.BatchDebitGiftRequest.targets:type_name -> hyapp.wallet.v1.DebitGiftTarget @@ -31658,396 +28835,403 @@ var file_proto_wallet_v1_wallet_proto_depIdxs = []int32{ 8, // 16: hyapp.wallet.v1.ReleasePointWithdrawalResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance 48, // 17: hyapp.wallet.v1.ResourceGroupItem.resource:type_name -> hyapp.wallet.v1.Resource 49, // 18: hyapp.wallet.v1.ResourceGroup.items:type_name -> hyapp.wallet.v1.ResourceGroupItem - 48, // 19: hyapp.wallet.v1.GiftConfig.resource:type_name -> hyapp.wallet.v1.Resource - 48, // 20: hyapp.wallet.v1.ResourceShopItem.resource:type_name -> hyapp.wallet.v1.Resource - 48, // 21: hyapp.wallet.v1.UserResourceEntitlement.resource:type_name -> hyapp.wallet.v1.Resource - 55, // 22: hyapp.wallet.v1.ResourceGrant.items:type_name -> hyapp.wallet.v1.ResourceGrantItem - 48, // 23: hyapp.wallet.v1.ListResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource - 48, // 24: hyapp.wallet.v1.GetResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource - 48, // 25: hyapp.wallet.v1.BatchDeleteResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource - 48, // 26: hyapp.wallet.v1.ResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource - 50, // 27: hyapp.wallet.v1.ListResourceGroupsResponse.groups:type_name -> hyapp.wallet.v1.ResourceGroup - 50, // 28: hyapp.wallet.v1.GetResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup - 57, // 29: hyapp.wallet.v1.CreateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput - 57, // 30: hyapp.wallet.v1.UpdateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput - 50, // 31: hyapp.wallet.v1.ResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup - 51, // 32: hyapp.wallet.v1.ListGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig - 52, // 33: hyapp.wallet.v1.ListGiftTypeConfigsResponse.gift_types:type_name -> hyapp.wallet.v1.GiftTypeConfig - 52, // 34: hyapp.wallet.v1.GiftTypeConfigResponse.gift_type:type_name -> hyapp.wallet.v1.GiftTypeConfig - 83, // 35: hyapp.wallet.v1.BatchCreateGiftConfigsRequest.items:type_name -> hyapp.wallet.v1.CreateGiftConfigRequest - 51, // 36: hyapp.wallet.v1.BatchCreateGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig - 51, // 37: hyapp.wallet.v1.GiftConfigResponse.gift:type_name -> hyapp.wallet.v1.GiftConfig - 56, // 38: hyapp.wallet.v1.ResourceGrantResponse.grant:type_name -> hyapp.wallet.v1.ResourceGrant - 54, // 39: hyapp.wallet.v1.ListUserResourcesResponse.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 54, // 40: hyapp.wallet.v1.EquipUserResourceResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 54, // 41: hyapp.wallet.v1.UserEquippedResources.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 101, // 42: hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse.users:type_name -> hyapp.wallet.v1.UserEquippedResources - 56, // 43: hyapp.wallet.v1.ListResourceGrantsResponse.grants:type_name -> hyapp.wallet.v1.ResourceGrant - 53, // 44: hyapp.wallet.v1.ListResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem - 105, // 45: hyapp.wallet.v1.UpsertResourceShopItemsRequest.items:type_name -> hyapp.wallet.v1.ResourceShopItemInput - 53, // 46: hyapp.wallet.v1.UpsertResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem - 53, // 47: hyapp.wallet.v1.ResourceShopItemResponse.item:type_name -> hyapp.wallet.v1.ResourceShopItem - 53, // 48: hyapp.wallet.v1.PurchaseResourceShopItemResponse.shop_item:type_name -> hyapp.wallet.v1.ResourceShopItem - 54, // 49: hyapp.wallet.v1.PurchaseResourceShopItemResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 8, // 50: hyapp.wallet.v1.PurchaseResourceShopItemResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 114, // 51: hyapp.wallet.v1.ListRechargeBillsResponse.bills:type_name -> hyapp.wallet.v1.RechargeBill - 118, // 52: hyapp.wallet.v1.GetRechargeBillSummaryResponse.total:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket - 118, // 53: hyapp.wallet.v1.GetRechargeBillSummaryResponse.google_play:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket - 118, // 54: hyapp.wallet.v1.GetRechargeBillSummaryResponse.third_party:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket - 118, // 55: hyapp.wallet.v1.GetRechargeBillSummaryResponse.coin_seller:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket - 120, // 56: hyapp.wallet.v1.BatchGetUserRechargeStatsResponse.items:type_name -> hyapp.wallet.v1.UserRechargeStats - 124, // 57: hyapp.wallet.v1.GetRechargeBillOverviewResponse.daily:type_name -> hyapp.wallet.v1.RechargeBillDailyBucket - 125, // 58: hyapp.wallet.v1.GetRechargeBillOverviewResponse.regions:type_name -> hyapp.wallet.v1.RechargeBillRegionBucket - 126, // 59: hyapp.wallet.v1.GetRechargeBillOverviewResponse.google_paid:type_name -> hyapp.wallet.v1.RechargeBillGooglePaidStats - 127, // 60: hyapp.wallet.v1.GetRechargeBillOverviewResponse.salary_transfer:type_name -> hyapp.wallet.v1.RechargeBillSalaryTransferStats - 130, // 61: hyapp.wallet.v1.RefreshGooglePaymentPricesResponse.prices:type_name -> hyapp.wallet.v1.GooglePaymentPrice - 8, // 62: hyapp.wallet.v1.GetWalletOverviewResponse.balances:type_name -> hyapp.wallet.v1.AssetBalance - 132, // 63: hyapp.wallet.v1.GetWalletOverviewResponse.feature_flags:type_name -> hyapp.wallet.v1.WalletFeatureFlags - 135, // 64: hyapp.wallet.v1.GetWalletValueSummaryResponse.summary:type_name -> hyapp.wallet.v1.WalletValueSummary - 48, // 65: hyapp.wallet.v1.GiftWallItem.resource:type_name -> hyapp.wallet.v1.Resource - 138, // 66: hyapp.wallet.v1.GetUserGiftWallResponse.items:type_name -> hyapp.wallet.v1.GiftWallItem - 141, // 67: hyapp.wallet.v1.ListRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct - 8, // 68: hyapp.wallet.v1.ConfirmGooglePaymentResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 141, // 69: hyapp.wallet.v1.ListAdminRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct - 141, // 70: hyapp.wallet.v1.RechargeProductResponse.product:type_name -> hyapp.wallet.v1.RechargeProduct - 153, // 71: hyapp.wallet.v1.ThirdPartyPaymentChannel.methods:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod - 154, // 72: hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse.channels:type_name -> hyapp.wallet.v1.ThirdPartyPaymentChannel - 153, // 73: hyapp.wallet.v1.ThirdPartyPaymentMethodResponse.method:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod - 160, // 74: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse.issues:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethodSyncIssue - 141, // 75: hyapp.wallet.v1.H5RechargeOptionsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct - 153, // 76: hyapp.wallet.v1.H5RechargeOptionsResponse.payment_methods:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod - 165, // 77: hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse.orders:type_name -> hyapp.wallet.v1.ExternalRechargeOrder - 165, // 78: hyapp.wallet.v1.H5RechargeOrderResponse.order:type_name -> hyapp.wallet.v1.ExternalRechargeOrder - 291, // 79: hyapp.wallet.v1.HandleV5PayNotifyRequest.fields:type_name -> hyapp.wallet.v1.HandleV5PayNotifyRequest.FieldsEntry - 180, // 80: hyapp.wallet.v1.GetDiamondExchangeConfigResponse.rules:type_name -> hyapp.wallet.v1.DiamondExchangeRule - 183, // 81: hyapp.wallet.v1.ListWalletTransactionsResponse.transactions:type_name -> hyapp.wallet.v1.WalletTransaction - 186, // 82: hyapp.wallet.v1.VipLevel.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 188, // 83: hyapp.wallet.v1.VipLevel.benefits:type_name -> hyapp.wallet.v1.VipBenefit - 190, // 84: hyapp.wallet.v1.VipState.paid_vip:type_name -> hyapp.wallet.v1.UserVip - 191, // 85: hyapp.wallet.v1.VipState.equipped_trial_card:type_name -> hyapp.wallet.v1.VipTrialCard - 190, // 86: hyapp.wallet.v1.VipState.effective_vip:type_name -> hyapp.wallet.v1.UserVip - 188, // 87: hyapp.wallet.v1.VipState.effective_benefits:type_name -> hyapp.wallet.v1.VipBenefit - 187, // 88: hyapp.wallet.v1.VipState.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig - 192, // 89: hyapp.wallet.v1.VipState.user_settings:type_name -> hyapp.wallet.v1.VipUserSettings - 190, // 90: hyapp.wallet.v1.ListVipPackagesResponse.current_vip:type_name -> hyapp.wallet.v1.UserVip - 189, // 91: hyapp.wallet.v1.ListVipPackagesResponse.packages:type_name -> hyapp.wallet.v1.VipLevel - 193, // 92: hyapp.wallet.v1.ListVipPackagesResponse.state:type_name -> hyapp.wallet.v1.VipState - 187, // 93: hyapp.wallet.v1.ListVipPackagesResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig - 190, // 94: hyapp.wallet.v1.GetMyVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 193, // 95: hyapp.wallet.v1.GetMyVipResponse.state:type_name -> hyapp.wallet.v1.VipState - 190, // 96: hyapp.wallet.v1.PurchaseVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 186, // 97: hyapp.wallet.v1.PurchaseVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 193, // 98: hyapp.wallet.v1.PurchaseVipResponse.state:type_name -> hyapp.wallet.v1.VipState - 8, // 99: hyapp.wallet.v1.DebitCPBreakupFeeResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 100: hyapp.wallet.v1.DebitWheelDrawResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 190, // 101: hyapp.wallet.v1.GrantVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 186, // 102: hyapp.wallet.v1.GrantVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 193, // 103: hyapp.wallet.v1.GrantVipResponse.state:type_name -> hyapp.wallet.v1.VipState - 187, // 104: hyapp.wallet.v1.GetVipProgramConfigResponse.config:type_name -> hyapp.wallet.v1.VipProgramConfig - 188, // 105: hyapp.wallet.v1.GetVipProgramConfigResponse.benefits:type_name -> hyapp.wallet.v1.VipBenefit - 187, // 106: hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest.config:type_name -> hyapp.wallet.v1.VipProgramConfig - 187, // 107: hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse.config:type_name -> hyapp.wallet.v1.VipProgramConfig - 192, // 108: hyapp.wallet.v1.UpdateMyVipSettingsResponse.settings:type_name -> hyapp.wallet.v1.VipUserSettings - 212, // 109: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse.run:type_name -> hyapp.wallet.v1.VipDailyCoinRebateRun - 213, // 110: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse.rebate:type_name -> hyapp.wallet.v1.VipDailyCoinRebate - 213, // 111: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse.rebates:type_name -> hyapp.wallet.v1.VipDailyCoinRebate - 213, // 112: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse.rebate:type_name -> hyapp.wallet.v1.VipDailyCoinRebate - 8, // 113: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse.coin_balance:type_name -> hyapp.wallet.v1.AssetBalance - 191, // 114: hyapp.wallet.v1.GrantVipTrialCardResponse.trial_card:type_name -> hyapp.wallet.v1.VipTrialCard - 193, // 115: hyapp.wallet.v1.GrantVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState - 191, // 116: hyapp.wallet.v1.EquipVipTrialCardResponse.trial_card:type_name -> hyapp.wallet.v1.VipTrialCard - 193, // 117: hyapp.wallet.v1.EquipVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState - 193, // 118: hyapp.wallet.v1.UnequipVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState - 188, // 119: hyapp.wallet.v1.CheckVipBenefitResponse.benefit:type_name -> hyapp.wallet.v1.VipBenefit - 193, // 120: hyapp.wallet.v1.CheckVipBenefitResponse.state:type_name -> hyapp.wallet.v1.VipState - 188, // 121: hyapp.wallet.v1.AdminVipLevelInput.benefits:type_name -> hyapp.wallet.v1.VipBenefit - 189, // 122: hyapp.wallet.v1.ListAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel - 187, // 123: hyapp.wallet.v1.ListAdminVipLevelsResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig - 230, // 124: hyapp.wallet.v1.UpdateAdminVipLevelsRequest.levels:type_name -> hyapp.wallet.v1.AdminVipLevelInput - 189, // 125: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel - 187, // 126: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig - 8, // 127: hyapp.wallet.v1.CreditTaskRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 128: hyapp.wallet.v1.CreditLuckyGiftRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 129: hyapp.wallet.v1.CreditWheelRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 130: hyapp.wallet.v1.CreditRoomTurnoverRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 131: hyapp.wallet.v1.CreditInviteActivityRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 8, // 132: hyapp.wallet.v1.CreditAgencyOpeningRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 250, // 133: hyapp.wallet.v1.RedPacket.claims:type_name -> hyapp.wallet.v1.RedPacketClaim - 249, // 134: hyapp.wallet.v1.GetRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig - 249, // 135: hyapp.wallet.v1.UpdateRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig - 251, // 136: hyapp.wallet.v1.CreateRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 250, // 137: hyapp.wallet.v1.ClaimRedPacketResponse.claim:type_name -> hyapp.wallet.v1.RedPacketClaim - 251, // 138: hyapp.wallet.v1.ClaimRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 251, // 139: hyapp.wallet.v1.ListRedPacketsResponse.packets:type_name -> hyapp.wallet.v1.RedPacket - 251, // 140: hyapp.wallet.v1.GetRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 251, // 141: hyapp.wallet.v1.RetryRedPacketRefundResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 48, // 142: hyapp.wallet.v1.ResourceShopPurchaseOrder.resource:type_name -> hyapp.wallet.v1.Resource - 270, // 143: hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse.orders:type_name -> hyapp.wallet.v1.ResourceShopPurchaseOrder - 275, // 144: hyapp.wallet.v1.GetHostRevenueStatsResponse.stats:type_name -> hyapp.wallet.v1.HostRevenueStats - 278, // 145: hyapp.wallet.v1.GetAgencyPointShareStatsResponse.stats:type_name -> hyapp.wallet.v1.AgencyPointShareStats - 281, // 146: hyapp.wallet.v1.GetAgencyHostGiftStatsResponse.stats:type_name -> hyapp.wallet.v1.AgencyHostGiftStats - 284, // 147: hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse.sellers:type_name -> hyapp.wallet.v1.PointWithdrawalCoinSellerConfig - 268, // 148: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:input_type -> hyapp.wallet.v1.CronBatchRequest - 268, // 149: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:input_type -> hyapp.wallet.v1.CronBatchRequest - 268, // 150: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:input_type -> hyapp.wallet.v1.CronBatchRequest - 214, // 151: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:input_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest - 0, // 152: hyapp.wallet.v1.WalletService.DebitGift:input_type -> hyapp.wallet.v1.DebitGiftRequest - 1, // 153: hyapp.wallet.v1.WalletService.DebitDirectGift:input_type -> hyapp.wallet.v1.DebitDirectGiftRequest - 4, // 154: hyapp.wallet.v1.WalletService.BatchDebitGift:input_type -> hyapp.wallet.v1.BatchDebitGiftRequest - 7, // 155: hyapp.wallet.v1.WalletService.DebitRobotGift:input_type -> hyapp.wallet.v1.DebitRobotGiftRequest - 9, // 156: hyapp.wallet.v1.WalletService.GetBalances:input_type -> hyapp.wallet.v1.GetBalancesRequest - 13, // 157: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:input_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyRequest - 16, // 158: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:input_type -> hyapp.wallet.v1.GetHostSalaryProgressRequest - 276, // 159: hyapp.wallet.v1.WalletService.GetHostRevenueStats:input_type -> hyapp.wallet.v1.GetHostRevenueStatsRequest - 279, // 160: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:input_type -> hyapp.wallet.v1.GetAgencyPointShareStatsRequest - 282, // 161: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:input_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsRequest - 19, // 162: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:input_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsRequest - 21, // 163: hyapp.wallet.v1.WalletService.AdminCreditAsset:input_type -> hyapp.wallet.v1.AdminCreditAssetRequest - 23, // 164: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:input_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockRequest - 25, // 165: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:input_type -> hyapp.wallet.v1.TransferCoinFromSellerRequest - 27, // 166: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:input_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildRequest - 30, // 167: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:input_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersRequest - 32, // 168: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:input_type -> hyapp.wallet.v1.ExchangeSalaryToCoinRequest - 34, // 169: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:input_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerRequest - 285, // 170: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:input_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersRequest - 287, // 171: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:input_type -> hyapp.wallet.v1.TransferPointToCoinSellerRequest - 289, // 172: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:input_type -> hyapp.wallet.v1.GetPointWithdrawalConfigRequest - 36, // 173: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:input_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalRequest - 38, // 174: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:input_type -> hyapp.wallet.v1.SettleSalaryWithdrawalRequest - 40, // 175: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:input_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalRequest - 42, // 176: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:input_type -> hyapp.wallet.v1.FreezePointWithdrawalRequest - 44, // 177: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:input_type -> hyapp.wallet.v1.SettlePointWithdrawalRequest - 46, // 178: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:input_type -> hyapp.wallet.v1.ReleasePointWithdrawalRequest - 58, // 179: hyapp.wallet.v1.WalletService.ListResources:input_type -> hyapp.wallet.v1.ListResourcesRequest - 60, // 180: hyapp.wallet.v1.WalletService.GetResource:input_type -> hyapp.wallet.v1.GetResourceRequest - 62, // 181: hyapp.wallet.v1.WalletService.CreateResource:input_type -> hyapp.wallet.v1.CreateResourceRequest - 63, // 182: hyapp.wallet.v1.WalletService.UpdateResource:input_type -> hyapp.wallet.v1.UpdateResourceRequest - 64, // 183: hyapp.wallet.v1.WalletService.SetResourceStatus:input_type -> hyapp.wallet.v1.SetResourceStatusRequest - 65, // 184: hyapp.wallet.v1.WalletService.DeleteResource:input_type -> hyapp.wallet.v1.DeleteResourceRequest - 66, // 185: hyapp.wallet.v1.WalletService.BatchDeleteResources:input_type -> hyapp.wallet.v1.BatchDeleteResourcesRequest - 69, // 186: hyapp.wallet.v1.WalletService.ListResourceGroups:input_type -> hyapp.wallet.v1.ListResourceGroupsRequest - 71, // 187: hyapp.wallet.v1.WalletService.GetResourceGroup:input_type -> hyapp.wallet.v1.GetResourceGroupRequest - 73, // 188: hyapp.wallet.v1.WalletService.CreateResourceGroup:input_type -> hyapp.wallet.v1.CreateResourceGroupRequest - 74, // 189: hyapp.wallet.v1.WalletService.UpdateResourceGroup:input_type -> hyapp.wallet.v1.UpdateResourceGroupRequest - 75, // 190: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:input_type -> hyapp.wallet.v1.SetResourceGroupStatusRequest - 77, // 191: hyapp.wallet.v1.WalletService.ListGiftConfigs:input_type -> hyapp.wallet.v1.ListGiftConfigsRequest - 79, // 192: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:input_type -> hyapp.wallet.v1.ListGiftTypeConfigsRequest - 273, // 193: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:input_type -> hyapp.wallet.v1.GetGiftCatalogVersionRequest - 83, // 194: hyapp.wallet.v1.WalletService.CreateGiftConfig:input_type -> hyapp.wallet.v1.CreateGiftConfigRequest - 84, // 195: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:input_type -> hyapp.wallet.v1.BatchCreateGiftConfigsRequest - 86, // 196: hyapp.wallet.v1.WalletService.UpdateGiftConfig:input_type -> hyapp.wallet.v1.UpdateGiftConfigRequest - 87, // 197: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:input_type -> hyapp.wallet.v1.SetGiftConfigStatusRequest - 88, // 198: hyapp.wallet.v1.WalletService.DeleteGiftConfig:input_type -> hyapp.wallet.v1.DeleteGiftConfigRequest - 81, // 199: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:input_type -> hyapp.wallet.v1.UpsertGiftTypeConfigRequest - 90, // 200: hyapp.wallet.v1.WalletService.GrantResource:input_type -> hyapp.wallet.v1.GrantResourceRequest - 91, // 201: hyapp.wallet.v1.WalletService.GrantResourceGroup:input_type -> hyapp.wallet.v1.GrantResourceGroupRequest - 92, // 202: hyapp.wallet.v1.WalletService.RevokeResourceGrant:input_type -> hyapp.wallet.v1.RevokeResourceGrantRequest - 94, // 203: hyapp.wallet.v1.WalletService.ListUserResources:input_type -> hyapp.wallet.v1.ListUserResourcesRequest - 96, // 204: hyapp.wallet.v1.WalletService.EquipUserResource:input_type -> hyapp.wallet.v1.EquipUserResourceRequest - 98, // 205: hyapp.wallet.v1.WalletService.UnequipUserResource:input_type -> hyapp.wallet.v1.UnequipUserResourceRequest - 100, // 206: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:input_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesRequest - 103, // 207: hyapp.wallet.v1.WalletService.ListResourceGrants:input_type -> hyapp.wallet.v1.ListResourceGrantsRequest - 106, // 208: hyapp.wallet.v1.WalletService.ListResourceShopItems:input_type -> hyapp.wallet.v1.ListResourceShopItemsRequest - 108, // 209: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:input_type -> hyapp.wallet.v1.UpsertResourceShopItemsRequest - 110, // 210: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:input_type -> hyapp.wallet.v1.SetResourceShopItemStatusRequest - 271, // 211: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:input_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersRequest - 112, // 212: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:input_type -> hyapp.wallet.v1.PurchaseResourceShopItemRequest - 115, // 213: hyapp.wallet.v1.WalletService.ListRechargeBills:input_type -> hyapp.wallet.v1.ListRechargeBillsRequest - 117, // 214: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:input_type -> hyapp.wallet.v1.GetRechargeBillSummaryRequest - 121, // 215: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:input_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsRequest - 123, // 216: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:input_type -> hyapp.wallet.v1.GetRechargeBillOverviewRequest - 129, // 217: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:input_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesRequest - 133, // 218: hyapp.wallet.v1.WalletService.GetWalletOverview:input_type -> hyapp.wallet.v1.GetWalletOverviewRequest - 136, // 219: hyapp.wallet.v1.WalletService.GetWalletValueSummary:input_type -> hyapp.wallet.v1.GetWalletValueSummaryRequest - 139, // 220: hyapp.wallet.v1.WalletService.GetUserGiftWall:input_type -> hyapp.wallet.v1.GetUserGiftWallRequest - 142, // 221: hyapp.wallet.v1.WalletService.ListRechargeProducts:input_type -> hyapp.wallet.v1.ListRechargeProductsRequest - 144, // 222: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:input_type -> hyapp.wallet.v1.ConfirmGooglePaymentRequest - 146, // 223: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:input_type -> hyapp.wallet.v1.ListAdminRechargeProductsRequest - 148, // 224: hyapp.wallet.v1.WalletService.CreateRechargeProduct:input_type -> hyapp.wallet.v1.CreateRechargeProductRequest - 149, // 225: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:input_type -> hyapp.wallet.v1.UpdateRechargeProductRequest - 150, // 226: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:input_type -> hyapp.wallet.v1.DeleteRechargeProductRequest - 155, // 227: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:input_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsRequest - 157, // 228: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:input_type -> hyapp.wallet.v1.SetThirdPartyPaymentMethodStatusRequest - 159, // 229: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:input_type -> hyapp.wallet.v1.UpdateThirdPartyPaymentRateRequest - 161, // 230: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:input_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsRequest - 163, // 231: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:input_type -> hyapp.wallet.v1.H5RechargeOptionsRequest - 166, // 232: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:input_type -> hyapp.wallet.v1.CreateH5RechargeOrderRequest - 167, // 233: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:input_type -> hyapp.wallet.v1.CreateTemporaryRechargeOrderRequest - 168, // 234: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:input_type -> hyapp.wallet.v1.GetTemporaryRechargeOrderRequest - 169, // 235: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:input_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersRequest - 171, // 236: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:input_type -> hyapp.wallet.v1.SubmitH5RechargeTxRequest - 172, // 237: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:input_type -> hyapp.wallet.v1.GetH5RechargeOrderRequest - 174, // 238: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:input_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptRequest - 176, // 239: hyapp.wallet.v1.WalletService.HandleMifapayNotify:input_type -> hyapp.wallet.v1.HandleMifapayNotifyRequest - 178, // 240: hyapp.wallet.v1.WalletService.HandleV5PayNotify:input_type -> hyapp.wallet.v1.HandleV5PayNotifyRequest - 181, // 241: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:input_type -> hyapp.wallet.v1.GetDiamondExchangeConfigRequest - 184, // 242: hyapp.wallet.v1.WalletService.ListWalletTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest - 194, // 243: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest - 206, // 244: hyapp.wallet.v1.WalletService.GetVipProgramConfig:input_type -> hyapp.wallet.v1.GetVipProgramConfigRequest - 196, // 245: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest - 228, // 246: hyapp.wallet.v1.WalletService.CheckVipBenefit:input_type -> hyapp.wallet.v1.CheckVipBenefitRequest - 198, // 247: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest - 200, // 248: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:input_type -> hyapp.wallet.v1.DebitCPBreakupFeeRequest - 202, // 249: hyapp.wallet.v1.WalletService.DebitWheelDraw:input_type -> hyapp.wallet.v1.DebitWheelDrawRequest - 204, // 250: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest - 222, // 251: hyapp.wallet.v1.WalletService.GrantVipTrialCard:input_type -> hyapp.wallet.v1.GrantVipTrialCardRequest - 224, // 252: hyapp.wallet.v1.WalletService.EquipVipTrialCard:input_type -> hyapp.wallet.v1.EquipVipTrialCardRequest - 226, // 253: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:input_type -> hyapp.wallet.v1.UnequipVipTrialCardRequest - 231, // 254: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest - 233, // 255: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest - 208, // 256: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:input_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest - 210, // 257: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:input_type -> hyapp.wallet.v1.UpdateMyVipSettingsRequest - 216, // 258: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:input_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest - 218, // 259: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:input_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest - 220, // 260: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:input_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest - 235, // 261: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest - 237, // 262: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest - 239, // 263: hyapp.wallet.v1.WalletService.CreditWheelReward:input_type -> hyapp.wallet.v1.CreditWheelRewardRequest - 241, // 264: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:input_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardRequest - 243, // 265: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:input_type -> hyapp.wallet.v1.CreditInviteActivityRewardRequest - 245, // 266: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:input_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardRequest - 247, // 267: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest - 252, // 268: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest - 254, // 269: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest - 256, // 270: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest - 258, // 271: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest - 260, // 272: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest - 262, // 273: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest - 264, // 274: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest - 266, // 275: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:input_type -> hyapp.wallet.v1.RetryRedPacketRefundRequest - 269, // 276: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 269, // 277: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 269, // 278: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 215, // 279: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:output_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse - 2, // 280: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 2, // 281: hyapp.wallet.v1.WalletService.DebitDirectGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 6, // 282: hyapp.wallet.v1.WalletService.BatchDebitGift:output_type -> hyapp.wallet.v1.BatchDebitGiftResponse - 2, // 283: hyapp.wallet.v1.WalletService.DebitRobotGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 10, // 284: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse - 14, // 285: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:output_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyResponse - 17, // 286: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:output_type -> hyapp.wallet.v1.GetHostSalaryProgressResponse - 277, // 287: hyapp.wallet.v1.WalletService.GetHostRevenueStats:output_type -> hyapp.wallet.v1.GetHostRevenueStatsResponse - 280, // 288: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:output_type -> hyapp.wallet.v1.GetAgencyPointShareStatsResponse - 283, // 289: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:output_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsResponse - 20, // 290: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:output_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsResponse - 22, // 291: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse - 24, // 292: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse - 26, // 293: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse - 28, // 294: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:output_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildResponse - 31, // 295: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:output_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersResponse - 33, // 296: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:output_type -> hyapp.wallet.v1.ExchangeSalaryToCoinResponse - 35, // 297: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:output_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerResponse - 286, // 298: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:output_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse - 288, // 299: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:output_type -> hyapp.wallet.v1.TransferPointToCoinSellerResponse - 290, // 300: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:output_type -> hyapp.wallet.v1.GetPointWithdrawalConfigResponse - 37, // 301: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:output_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalResponse - 39, // 302: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:output_type -> hyapp.wallet.v1.SettleSalaryWithdrawalResponse - 41, // 303: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:output_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalResponse - 43, // 304: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:output_type -> hyapp.wallet.v1.FreezePointWithdrawalResponse - 45, // 305: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:output_type -> hyapp.wallet.v1.SettlePointWithdrawalResponse - 47, // 306: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:output_type -> hyapp.wallet.v1.ReleasePointWithdrawalResponse - 59, // 307: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse - 61, // 308: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse - 68, // 309: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 68, // 310: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 68, // 311: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse - 68, // 312: hyapp.wallet.v1.WalletService.DeleteResource:output_type -> hyapp.wallet.v1.ResourceResponse - 67, // 313: hyapp.wallet.v1.WalletService.BatchDeleteResources:output_type -> hyapp.wallet.v1.BatchDeleteResourcesResponse - 70, // 314: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse - 72, // 315: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse - 76, // 316: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 76, // 317: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 76, // 318: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 78, // 319: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse - 80, // 320: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse - 274, // 321: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:output_type -> hyapp.wallet.v1.GetGiftCatalogVersionResponse - 89, // 322: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 85, // 323: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:output_type -> hyapp.wallet.v1.BatchCreateGiftConfigsResponse - 89, // 324: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 89, // 325: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse - 89, // 326: hyapp.wallet.v1.WalletService.DeleteGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 82, // 327: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse - 93, // 328: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 93, // 329: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 93, // 330: hyapp.wallet.v1.WalletService.RevokeResourceGrant:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 95, // 331: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse - 97, // 332: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse - 99, // 333: hyapp.wallet.v1.WalletService.UnequipUserResource:output_type -> hyapp.wallet.v1.UnequipUserResourceResponse - 102, // 334: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:output_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse - 104, // 335: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse - 107, // 336: hyapp.wallet.v1.WalletService.ListResourceShopItems:output_type -> hyapp.wallet.v1.ListResourceShopItemsResponse - 109, // 337: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:output_type -> hyapp.wallet.v1.UpsertResourceShopItemsResponse - 111, // 338: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:output_type -> hyapp.wallet.v1.ResourceShopItemResponse - 272, // 339: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:output_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse - 113, // 340: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:output_type -> hyapp.wallet.v1.PurchaseResourceShopItemResponse - 116, // 341: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse - 119, // 342: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:output_type -> hyapp.wallet.v1.GetRechargeBillSummaryResponse - 122, // 343: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:output_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsResponse - 128, // 344: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:output_type -> hyapp.wallet.v1.GetRechargeBillOverviewResponse - 131, // 345: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:output_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesResponse - 134, // 346: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse - 137, // 347: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse - 140, // 348: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse - 143, // 349: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse - 145, // 350: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse - 147, // 351: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse - 151, // 352: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 151, // 353: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 152, // 354: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse - 156, // 355: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:output_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse - 158, // 356: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse - 158, // 357: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse - 162, // 358: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:output_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse - 164, // 359: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:output_type -> hyapp.wallet.v1.H5RechargeOptionsResponse - 173, // 360: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 173, // 361: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 173, // 362: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 170, // 363: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:output_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse - 173, // 364: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 173, // 365: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 175, // 366: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:output_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse - 177, // 367: hyapp.wallet.v1.WalletService.HandleMifapayNotify:output_type -> hyapp.wallet.v1.HandleMifapayNotifyResponse - 179, // 368: hyapp.wallet.v1.WalletService.HandleV5PayNotify:output_type -> hyapp.wallet.v1.HandleV5PayNotifyResponse - 182, // 369: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse - 185, // 370: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse - 195, // 371: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse - 207, // 372: hyapp.wallet.v1.WalletService.GetVipProgramConfig:output_type -> hyapp.wallet.v1.GetVipProgramConfigResponse - 197, // 373: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse - 229, // 374: hyapp.wallet.v1.WalletService.CheckVipBenefit:output_type -> hyapp.wallet.v1.CheckVipBenefitResponse - 199, // 375: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse - 201, // 376: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:output_type -> hyapp.wallet.v1.DebitCPBreakupFeeResponse - 203, // 377: hyapp.wallet.v1.WalletService.DebitWheelDraw:output_type -> hyapp.wallet.v1.DebitWheelDrawResponse - 205, // 378: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse - 223, // 379: hyapp.wallet.v1.WalletService.GrantVipTrialCard:output_type -> hyapp.wallet.v1.GrantVipTrialCardResponse - 225, // 380: hyapp.wallet.v1.WalletService.EquipVipTrialCard:output_type -> hyapp.wallet.v1.EquipVipTrialCardResponse - 227, // 381: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:output_type -> hyapp.wallet.v1.UnequipVipTrialCardResponse - 232, // 382: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse - 234, // 383: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse - 209, // 384: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:output_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse - 211, // 385: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:output_type -> hyapp.wallet.v1.UpdateMyVipSettingsResponse - 217, // 386: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:output_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse - 219, // 387: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:output_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse - 221, // 388: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:output_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse - 236, // 389: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse - 238, // 390: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse - 240, // 391: hyapp.wallet.v1.WalletService.CreditWheelReward:output_type -> hyapp.wallet.v1.CreditWheelRewardResponse - 242, // 392: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:output_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardResponse - 244, // 393: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:output_type -> hyapp.wallet.v1.CreditInviteActivityRewardResponse - 246, // 394: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:output_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardResponse - 248, // 395: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse - 253, // 396: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse - 255, // 397: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse - 257, // 398: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse - 259, // 399: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse - 261, // 400: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse - 263, // 401: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse - 265, // 402: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse - 267, // 403: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:output_type -> hyapp.wallet.v1.RetryRedPacketRefundResponse - 276, // [276:404] is the sub-list for method output_type - 148, // [148:276] is the sub-list for method input_type - 148, // [148:148] is the sub-list for extension type_name - 148, // [148:148] is the sub-list for extension extendee - 0, // [0:148] is the sub-list for field type_name + 50, // 19: hyapp.wallet.v1.ResourceGroupSnapshot.group:type_name -> hyapp.wallet.v1.ResourceGroup + 51, // 20: hyapp.wallet.v1.PinResourceGroupSnapshotResponse.snapshot:type_name -> hyapp.wallet.v1.ResourceGroupSnapshot + 48, // 21: hyapp.wallet.v1.GiftConfig.resource:type_name -> hyapp.wallet.v1.Resource + 48, // 22: hyapp.wallet.v1.ResourceShopItem.resource:type_name -> hyapp.wallet.v1.Resource + 48, // 23: hyapp.wallet.v1.UserResourceEntitlement.resource:type_name -> hyapp.wallet.v1.Resource + 54, // 24: hyapp.wallet.v1.UserResourceEntitlement.pinned_gift_configs:type_name -> hyapp.wallet.v1.GiftConfig + 58, // 25: hyapp.wallet.v1.ResourceGrant.items:type_name -> hyapp.wallet.v1.ResourceGrantItem + 48, // 26: hyapp.wallet.v1.ListResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource + 48, // 27: hyapp.wallet.v1.GetResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource + 48, // 28: hyapp.wallet.v1.BatchDeleteResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource + 48, // 29: hyapp.wallet.v1.ResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource + 50, // 30: hyapp.wallet.v1.ListResourceGroupsResponse.groups:type_name -> hyapp.wallet.v1.ResourceGroup + 50, // 31: hyapp.wallet.v1.GetResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup + 60, // 32: hyapp.wallet.v1.CreateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput + 60, // 33: hyapp.wallet.v1.UpdateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput + 50, // 34: hyapp.wallet.v1.ResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup + 54, // 35: hyapp.wallet.v1.ListGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig + 55, // 36: hyapp.wallet.v1.ListGiftTypeConfigsResponse.gift_types:type_name -> hyapp.wallet.v1.GiftTypeConfig + 55, // 37: hyapp.wallet.v1.GiftTypeConfigResponse.gift_type:type_name -> hyapp.wallet.v1.GiftTypeConfig + 86, // 38: hyapp.wallet.v1.BatchCreateGiftConfigsRequest.items:type_name -> hyapp.wallet.v1.CreateGiftConfigRequest + 54, // 39: hyapp.wallet.v1.BatchCreateGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig + 54, // 40: hyapp.wallet.v1.GiftConfigResponse.gift:type_name -> hyapp.wallet.v1.GiftConfig + 59, // 41: hyapp.wallet.v1.ResourceGrantResponse.grant:type_name -> hyapp.wallet.v1.ResourceGrant + 57, // 42: hyapp.wallet.v1.ListUserResourcesResponse.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 57, // 43: hyapp.wallet.v1.EquipUserResourceResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 57, // 44: hyapp.wallet.v1.UserEquippedResources.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 105, // 45: hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse.users:type_name -> hyapp.wallet.v1.UserEquippedResources + 59, // 46: hyapp.wallet.v1.ListResourceGrantsResponse.grants:type_name -> hyapp.wallet.v1.ResourceGrant + 56, // 47: hyapp.wallet.v1.ListResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem + 109, // 48: hyapp.wallet.v1.UpsertResourceShopItemsRequest.items:type_name -> hyapp.wallet.v1.ResourceShopItemInput + 56, // 49: hyapp.wallet.v1.UpsertResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem + 56, // 50: hyapp.wallet.v1.ResourceShopItemResponse.item:type_name -> hyapp.wallet.v1.ResourceShopItem + 56, // 51: hyapp.wallet.v1.PurchaseResourceShopItemResponse.shop_item:type_name -> hyapp.wallet.v1.ResourceShopItem + 57, // 52: hyapp.wallet.v1.PurchaseResourceShopItemResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 8, // 53: hyapp.wallet.v1.PurchaseResourceShopItemResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 118, // 54: hyapp.wallet.v1.ListRechargeBillsResponse.bills:type_name -> hyapp.wallet.v1.RechargeBill + 122, // 55: hyapp.wallet.v1.GetRechargeBillSummaryResponse.total:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket + 122, // 56: hyapp.wallet.v1.GetRechargeBillSummaryResponse.google_play:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket + 122, // 57: hyapp.wallet.v1.GetRechargeBillSummaryResponse.third_party:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket + 122, // 58: hyapp.wallet.v1.GetRechargeBillSummaryResponse.coin_seller:type_name -> hyapp.wallet.v1.RechargeBillSummaryBucket + 124, // 59: hyapp.wallet.v1.BatchGetUserRechargeStatsResponse.items:type_name -> hyapp.wallet.v1.UserRechargeStats + 128, // 60: hyapp.wallet.v1.GetRechargeBillOverviewResponse.daily:type_name -> hyapp.wallet.v1.RechargeBillDailyBucket + 129, // 61: hyapp.wallet.v1.GetRechargeBillOverviewResponse.regions:type_name -> hyapp.wallet.v1.RechargeBillRegionBucket + 130, // 62: hyapp.wallet.v1.GetRechargeBillOverviewResponse.google_paid:type_name -> hyapp.wallet.v1.RechargeBillGooglePaidStats + 131, // 63: hyapp.wallet.v1.GetRechargeBillOverviewResponse.salary_transfer:type_name -> hyapp.wallet.v1.RechargeBillSalaryTransferStats + 134, // 64: hyapp.wallet.v1.RefreshGooglePaymentPricesResponse.prices:type_name -> hyapp.wallet.v1.GooglePaymentPrice + 8, // 65: hyapp.wallet.v1.GetWalletOverviewResponse.balances:type_name -> hyapp.wallet.v1.AssetBalance + 136, // 66: hyapp.wallet.v1.GetWalletOverviewResponse.feature_flags:type_name -> hyapp.wallet.v1.WalletFeatureFlags + 139, // 67: hyapp.wallet.v1.GetWalletValueSummaryResponse.summary:type_name -> hyapp.wallet.v1.WalletValueSummary + 48, // 68: hyapp.wallet.v1.GiftWallItem.resource:type_name -> hyapp.wallet.v1.Resource + 142, // 69: hyapp.wallet.v1.GetUserGiftWallResponse.items:type_name -> hyapp.wallet.v1.GiftWallItem + 145, // 70: hyapp.wallet.v1.ListRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct + 8, // 71: hyapp.wallet.v1.ConfirmGooglePaymentResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 145, // 72: hyapp.wallet.v1.ListAdminRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct + 145, // 73: hyapp.wallet.v1.RechargeProductResponse.product:type_name -> hyapp.wallet.v1.RechargeProduct + 157, // 74: hyapp.wallet.v1.ThirdPartyPaymentChannel.methods:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod + 158, // 75: hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse.channels:type_name -> hyapp.wallet.v1.ThirdPartyPaymentChannel + 157, // 76: hyapp.wallet.v1.ThirdPartyPaymentMethodResponse.method:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod + 164, // 77: hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse.issues:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethodSyncIssue + 145, // 78: hyapp.wallet.v1.H5RechargeOptionsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct + 157, // 79: hyapp.wallet.v1.H5RechargeOptionsResponse.payment_methods:type_name -> hyapp.wallet.v1.ThirdPartyPaymentMethod + 169, // 80: hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse.orders:type_name -> hyapp.wallet.v1.ExternalRechargeOrder + 169, // 81: hyapp.wallet.v1.H5RechargeOrderResponse.order:type_name -> hyapp.wallet.v1.ExternalRechargeOrder + 295, // 82: hyapp.wallet.v1.HandleV5PayNotifyRequest.fields:type_name -> hyapp.wallet.v1.HandleV5PayNotifyRequest.FieldsEntry + 184, // 83: hyapp.wallet.v1.GetDiamondExchangeConfigResponse.rules:type_name -> hyapp.wallet.v1.DiamondExchangeRule + 187, // 84: hyapp.wallet.v1.ListWalletTransactionsResponse.transactions:type_name -> hyapp.wallet.v1.WalletTransaction + 190, // 85: hyapp.wallet.v1.VipLevel.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 192, // 86: hyapp.wallet.v1.VipLevel.benefits:type_name -> hyapp.wallet.v1.VipBenefit + 194, // 87: hyapp.wallet.v1.VipState.paid_vip:type_name -> hyapp.wallet.v1.UserVip + 195, // 88: hyapp.wallet.v1.VipState.equipped_trial_card:type_name -> hyapp.wallet.v1.VipTrialCard + 194, // 89: hyapp.wallet.v1.VipState.effective_vip:type_name -> hyapp.wallet.v1.UserVip + 192, // 90: hyapp.wallet.v1.VipState.effective_benefits:type_name -> hyapp.wallet.v1.VipBenefit + 191, // 91: hyapp.wallet.v1.VipState.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig + 196, // 92: hyapp.wallet.v1.VipState.user_settings:type_name -> hyapp.wallet.v1.VipUserSettings + 194, // 93: hyapp.wallet.v1.ListVipPackagesResponse.current_vip:type_name -> hyapp.wallet.v1.UserVip + 193, // 94: hyapp.wallet.v1.ListVipPackagesResponse.packages:type_name -> hyapp.wallet.v1.VipLevel + 197, // 95: hyapp.wallet.v1.ListVipPackagesResponse.state:type_name -> hyapp.wallet.v1.VipState + 191, // 96: hyapp.wallet.v1.ListVipPackagesResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig + 194, // 97: hyapp.wallet.v1.GetMyVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 197, // 98: hyapp.wallet.v1.GetMyVipResponse.state:type_name -> hyapp.wallet.v1.VipState + 194, // 99: hyapp.wallet.v1.PurchaseVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 190, // 100: hyapp.wallet.v1.PurchaseVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 197, // 101: hyapp.wallet.v1.PurchaseVipResponse.state:type_name -> hyapp.wallet.v1.VipState + 8, // 102: hyapp.wallet.v1.DebitCPBreakupFeeResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 103: hyapp.wallet.v1.DebitWheelDrawResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 194, // 104: hyapp.wallet.v1.GrantVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 190, // 105: hyapp.wallet.v1.GrantVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 197, // 106: hyapp.wallet.v1.GrantVipResponse.state:type_name -> hyapp.wallet.v1.VipState + 191, // 107: hyapp.wallet.v1.GetVipProgramConfigResponse.config:type_name -> hyapp.wallet.v1.VipProgramConfig + 192, // 108: hyapp.wallet.v1.GetVipProgramConfigResponse.benefits:type_name -> hyapp.wallet.v1.VipBenefit + 191, // 109: hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest.config:type_name -> hyapp.wallet.v1.VipProgramConfig + 191, // 110: hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse.config:type_name -> hyapp.wallet.v1.VipProgramConfig + 196, // 111: hyapp.wallet.v1.UpdateMyVipSettingsResponse.settings:type_name -> hyapp.wallet.v1.VipUserSettings + 216, // 112: hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse.run:type_name -> hyapp.wallet.v1.VipDailyCoinRebateRun + 217, // 113: hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse.rebate:type_name -> hyapp.wallet.v1.VipDailyCoinRebate + 217, // 114: hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse.rebates:type_name -> hyapp.wallet.v1.VipDailyCoinRebate + 217, // 115: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse.rebate:type_name -> hyapp.wallet.v1.VipDailyCoinRebate + 8, // 116: hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse.coin_balance:type_name -> hyapp.wallet.v1.AssetBalance + 195, // 117: hyapp.wallet.v1.GrantVipTrialCardResponse.trial_card:type_name -> hyapp.wallet.v1.VipTrialCard + 197, // 118: hyapp.wallet.v1.GrantVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState + 195, // 119: hyapp.wallet.v1.EquipVipTrialCardResponse.trial_card:type_name -> hyapp.wallet.v1.VipTrialCard + 197, // 120: hyapp.wallet.v1.EquipVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState + 197, // 121: hyapp.wallet.v1.UnequipVipTrialCardResponse.state:type_name -> hyapp.wallet.v1.VipState + 192, // 122: hyapp.wallet.v1.CheckVipBenefitResponse.benefit:type_name -> hyapp.wallet.v1.VipBenefit + 197, // 123: hyapp.wallet.v1.CheckVipBenefitResponse.state:type_name -> hyapp.wallet.v1.VipState + 192, // 124: hyapp.wallet.v1.AdminVipLevelInput.benefits:type_name -> hyapp.wallet.v1.VipBenefit + 193, // 125: hyapp.wallet.v1.ListAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel + 191, // 126: hyapp.wallet.v1.ListAdminVipLevelsResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig + 234, // 127: hyapp.wallet.v1.UpdateAdminVipLevelsRequest.levels:type_name -> hyapp.wallet.v1.AdminVipLevelInput + 193, // 128: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel + 191, // 129: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.program_config:type_name -> hyapp.wallet.v1.VipProgramConfig + 8, // 130: hyapp.wallet.v1.CreditTaskRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 131: hyapp.wallet.v1.CreditLuckyGiftRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 132: hyapp.wallet.v1.CreditWheelRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 133: hyapp.wallet.v1.CreditRoomTurnoverRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 134: hyapp.wallet.v1.CreditInviteActivityRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 8, // 135: hyapp.wallet.v1.CreditAgencyOpeningRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 254, // 136: hyapp.wallet.v1.RedPacket.claims:type_name -> hyapp.wallet.v1.RedPacketClaim + 253, // 137: hyapp.wallet.v1.GetRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig + 253, // 138: hyapp.wallet.v1.UpdateRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig + 255, // 139: hyapp.wallet.v1.CreateRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 254, // 140: hyapp.wallet.v1.ClaimRedPacketResponse.claim:type_name -> hyapp.wallet.v1.RedPacketClaim + 255, // 141: hyapp.wallet.v1.ClaimRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 255, // 142: hyapp.wallet.v1.ListRedPacketsResponse.packets:type_name -> hyapp.wallet.v1.RedPacket + 255, // 143: hyapp.wallet.v1.GetRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 255, // 144: hyapp.wallet.v1.RetryRedPacketRefundResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 48, // 145: hyapp.wallet.v1.ResourceShopPurchaseOrder.resource:type_name -> hyapp.wallet.v1.Resource + 274, // 146: hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse.orders:type_name -> hyapp.wallet.v1.ResourceShopPurchaseOrder + 279, // 147: hyapp.wallet.v1.GetHostRevenueStatsResponse.stats:type_name -> hyapp.wallet.v1.HostRevenueStats + 282, // 148: hyapp.wallet.v1.GetAgencyPointShareStatsResponse.stats:type_name -> hyapp.wallet.v1.AgencyPointShareStats + 285, // 149: hyapp.wallet.v1.GetAgencyHostGiftStatsResponse.stats:type_name -> hyapp.wallet.v1.AgencyHostGiftStats + 288, // 150: hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse.sellers:type_name -> hyapp.wallet.v1.PointWithdrawalCoinSellerConfig + 272, // 151: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:input_type -> hyapp.wallet.v1.CronBatchRequest + 272, // 152: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:input_type -> hyapp.wallet.v1.CronBatchRequest + 272, // 153: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:input_type -> hyapp.wallet.v1.CronBatchRequest + 218, // 154: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:input_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest + 0, // 155: hyapp.wallet.v1.WalletService.DebitGift:input_type -> hyapp.wallet.v1.DebitGiftRequest + 1, // 156: hyapp.wallet.v1.WalletService.DebitDirectGift:input_type -> hyapp.wallet.v1.DebitDirectGiftRequest + 4, // 157: hyapp.wallet.v1.WalletService.BatchDebitGift:input_type -> hyapp.wallet.v1.BatchDebitGiftRequest + 7, // 158: hyapp.wallet.v1.WalletService.DebitRobotGift:input_type -> hyapp.wallet.v1.DebitRobotGiftRequest + 9, // 159: hyapp.wallet.v1.WalletService.GetBalances:input_type -> hyapp.wallet.v1.GetBalancesRequest + 13, // 160: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:input_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyRequest + 16, // 161: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:input_type -> hyapp.wallet.v1.GetHostSalaryProgressRequest + 280, // 162: hyapp.wallet.v1.WalletService.GetHostRevenueStats:input_type -> hyapp.wallet.v1.GetHostRevenueStatsRequest + 283, // 163: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:input_type -> hyapp.wallet.v1.GetAgencyPointShareStatsRequest + 286, // 164: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:input_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsRequest + 19, // 165: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:input_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsRequest + 21, // 166: hyapp.wallet.v1.WalletService.AdminCreditAsset:input_type -> hyapp.wallet.v1.AdminCreditAssetRequest + 23, // 167: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:input_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockRequest + 25, // 168: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:input_type -> hyapp.wallet.v1.TransferCoinFromSellerRequest + 27, // 169: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:input_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildRequest + 30, // 170: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:input_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersRequest + 32, // 171: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:input_type -> hyapp.wallet.v1.ExchangeSalaryToCoinRequest + 34, // 172: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:input_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerRequest + 289, // 173: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:input_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersRequest + 291, // 174: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:input_type -> hyapp.wallet.v1.TransferPointToCoinSellerRequest + 293, // 175: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:input_type -> hyapp.wallet.v1.GetPointWithdrawalConfigRequest + 36, // 176: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:input_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalRequest + 38, // 177: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:input_type -> hyapp.wallet.v1.SettleSalaryWithdrawalRequest + 40, // 178: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:input_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalRequest + 42, // 179: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:input_type -> hyapp.wallet.v1.FreezePointWithdrawalRequest + 44, // 180: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:input_type -> hyapp.wallet.v1.SettlePointWithdrawalRequest + 46, // 181: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:input_type -> hyapp.wallet.v1.ReleasePointWithdrawalRequest + 61, // 182: hyapp.wallet.v1.WalletService.ListResources:input_type -> hyapp.wallet.v1.ListResourcesRequest + 63, // 183: hyapp.wallet.v1.WalletService.GetResource:input_type -> hyapp.wallet.v1.GetResourceRequest + 65, // 184: hyapp.wallet.v1.WalletService.CreateResource:input_type -> hyapp.wallet.v1.CreateResourceRequest + 66, // 185: hyapp.wallet.v1.WalletService.UpdateResource:input_type -> hyapp.wallet.v1.UpdateResourceRequest + 67, // 186: hyapp.wallet.v1.WalletService.SetResourceStatus:input_type -> hyapp.wallet.v1.SetResourceStatusRequest + 68, // 187: hyapp.wallet.v1.WalletService.DeleteResource:input_type -> hyapp.wallet.v1.DeleteResourceRequest + 69, // 188: hyapp.wallet.v1.WalletService.BatchDeleteResources:input_type -> hyapp.wallet.v1.BatchDeleteResourcesRequest + 72, // 189: hyapp.wallet.v1.WalletService.ListResourceGroups:input_type -> hyapp.wallet.v1.ListResourceGroupsRequest + 74, // 190: hyapp.wallet.v1.WalletService.GetResourceGroup:input_type -> hyapp.wallet.v1.GetResourceGroupRequest + 76, // 191: hyapp.wallet.v1.WalletService.CreateResourceGroup:input_type -> hyapp.wallet.v1.CreateResourceGroupRequest + 77, // 192: hyapp.wallet.v1.WalletService.UpdateResourceGroup:input_type -> hyapp.wallet.v1.UpdateResourceGroupRequest + 78, // 193: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:input_type -> hyapp.wallet.v1.SetResourceGroupStatusRequest + 52, // 194: hyapp.wallet.v1.WalletService.PinResourceGroupSnapshot:input_type -> hyapp.wallet.v1.PinResourceGroupSnapshotRequest + 80, // 195: hyapp.wallet.v1.WalletService.ListGiftConfigs:input_type -> hyapp.wallet.v1.ListGiftConfigsRequest + 82, // 196: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:input_type -> hyapp.wallet.v1.ListGiftTypeConfigsRequest + 277, // 197: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:input_type -> hyapp.wallet.v1.GetGiftCatalogVersionRequest + 86, // 198: hyapp.wallet.v1.WalletService.CreateGiftConfig:input_type -> hyapp.wallet.v1.CreateGiftConfigRequest + 87, // 199: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:input_type -> hyapp.wallet.v1.BatchCreateGiftConfigsRequest + 89, // 200: hyapp.wallet.v1.WalletService.UpdateGiftConfig:input_type -> hyapp.wallet.v1.UpdateGiftConfigRequest + 90, // 201: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:input_type -> hyapp.wallet.v1.SetGiftConfigStatusRequest + 91, // 202: hyapp.wallet.v1.WalletService.DeleteGiftConfig:input_type -> hyapp.wallet.v1.DeleteGiftConfigRequest + 84, // 203: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:input_type -> hyapp.wallet.v1.UpsertGiftTypeConfigRequest + 93, // 204: hyapp.wallet.v1.WalletService.GrantResource:input_type -> hyapp.wallet.v1.GrantResourceRequest + 94, // 205: hyapp.wallet.v1.WalletService.GrantResourceGroup:input_type -> hyapp.wallet.v1.GrantResourceGroupRequest + 95, // 206: hyapp.wallet.v1.WalletService.GrantPinnedResourceGroup:input_type -> hyapp.wallet.v1.GrantPinnedResourceGroupRequest + 96, // 207: hyapp.wallet.v1.WalletService.RevokeResourceGrant:input_type -> hyapp.wallet.v1.RevokeResourceGrantRequest + 98, // 208: hyapp.wallet.v1.WalletService.ListUserResources:input_type -> hyapp.wallet.v1.ListUserResourcesRequest + 100, // 209: hyapp.wallet.v1.WalletService.EquipUserResource:input_type -> hyapp.wallet.v1.EquipUserResourceRequest + 102, // 210: hyapp.wallet.v1.WalletService.UnequipUserResource:input_type -> hyapp.wallet.v1.UnequipUserResourceRequest + 104, // 211: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:input_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesRequest + 107, // 212: hyapp.wallet.v1.WalletService.ListResourceGrants:input_type -> hyapp.wallet.v1.ListResourceGrantsRequest + 110, // 213: hyapp.wallet.v1.WalletService.ListResourceShopItems:input_type -> hyapp.wallet.v1.ListResourceShopItemsRequest + 112, // 214: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:input_type -> hyapp.wallet.v1.UpsertResourceShopItemsRequest + 114, // 215: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:input_type -> hyapp.wallet.v1.SetResourceShopItemStatusRequest + 275, // 216: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:input_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersRequest + 116, // 217: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:input_type -> hyapp.wallet.v1.PurchaseResourceShopItemRequest + 119, // 218: hyapp.wallet.v1.WalletService.ListRechargeBills:input_type -> hyapp.wallet.v1.ListRechargeBillsRequest + 121, // 219: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:input_type -> hyapp.wallet.v1.GetRechargeBillSummaryRequest + 125, // 220: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:input_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsRequest + 127, // 221: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:input_type -> hyapp.wallet.v1.GetRechargeBillOverviewRequest + 133, // 222: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:input_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesRequest + 137, // 223: hyapp.wallet.v1.WalletService.GetWalletOverview:input_type -> hyapp.wallet.v1.GetWalletOverviewRequest + 140, // 224: hyapp.wallet.v1.WalletService.GetWalletValueSummary:input_type -> hyapp.wallet.v1.GetWalletValueSummaryRequest + 143, // 225: hyapp.wallet.v1.WalletService.GetUserGiftWall:input_type -> hyapp.wallet.v1.GetUserGiftWallRequest + 146, // 226: hyapp.wallet.v1.WalletService.ListRechargeProducts:input_type -> hyapp.wallet.v1.ListRechargeProductsRequest + 148, // 227: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:input_type -> hyapp.wallet.v1.ConfirmGooglePaymentRequest + 150, // 228: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:input_type -> hyapp.wallet.v1.ListAdminRechargeProductsRequest + 152, // 229: hyapp.wallet.v1.WalletService.CreateRechargeProduct:input_type -> hyapp.wallet.v1.CreateRechargeProductRequest + 153, // 230: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:input_type -> hyapp.wallet.v1.UpdateRechargeProductRequest + 154, // 231: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:input_type -> hyapp.wallet.v1.DeleteRechargeProductRequest + 159, // 232: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:input_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsRequest + 161, // 233: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:input_type -> hyapp.wallet.v1.SetThirdPartyPaymentMethodStatusRequest + 163, // 234: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:input_type -> hyapp.wallet.v1.UpdateThirdPartyPaymentRateRequest + 165, // 235: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:input_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsRequest + 167, // 236: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:input_type -> hyapp.wallet.v1.H5RechargeOptionsRequest + 170, // 237: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:input_type -> hyapp.wallet.v1.CreateH5RechargeOrderRequest + 171, // 238: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:input_type -> hyapp.wallet.v1.CreateTemporaryRechargeOrderRequest + 172, // 239: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:input_type -> hyapp.wallet.v1.GetTemporaryRechargeOrderRequest + 173, // 240: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:input_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersRequest + 175, // 241: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:input_type -> hyapp.wallet.v1.SubmitH5RechargeTxRequest + 176, // 242: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:input_type -> hyapp.wallet.v1.GetH5RechargeOrderRequest + 178, // 243: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:input_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptRequest + 180, // 244: hyapp.wallet.v1.WalletService.HandleMifapayNotify:input_type -> hyapp.wallet.v1.HandleMifapayNotifyRequest + 182, // 245: hyapp.wallet.v1.WalletService.HandleV5PayNotify:input_type -> hyapp.wallet.v1.HandleV5PayNotifyRequest + 185, // 246: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:input_type -> hyapp.wallet.v1.GetDiamondExchangeConfigRequest + 188, // 247: hyapp.wallet.v1.WalletService.ListWalletTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest + 198, // 248: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest + 210, // 249: hyapp.wallet.v1.WalletService.GetVipProgramConfig:input_type -> hyapp.wallet.v1.GetVipProgramConfigRequest + 200, // 250: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest + 232, // 251: hyapp.wallet.v1.WalletService.CheckVipBenefit:input_type -> hyapp.wallet.v1.CheckVipBenefitRequest + 202, // 252: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest + 204, // 253: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:input_type -> hyapp.wallet.v1.DebitCPBreakupFeeRequest + 206, // 254: hyapp.wallet.v1.WalletService.DebitWheelDraw:input_type -> hyapp.wallet.v1.DebitWheelDrawRequest + 208, // 255: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest + 226, // 256: hyapp.wallet.v1.WalletService.GrantVipTrialCard:input_type -> hyapp.wallet.v1.GrantVipTrialCardRequest + 228, // 257: hyapp.wallet.v1.WalletService.EquipVipTrialCard:input_type -> hyapp.wallet.v1.EquipVipTrialCardRequest + 230, // 258: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:input_type -> hyapp.wallet.v1.UnequipVipTrialCardRequest + 235, // 259: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest + 237, // 260: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest + 212, // 261: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:input_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest + 214, // 262: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:input_type -> hyapp.wallet.v1.UpdateMyVipSettingsRequest + 220, // 263: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:input_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest + 222, // 264: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:input_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest + 224, // 265: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:input_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest + 239, // 266: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest + 241, // 267: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest + 243, // 268: hyapp.wallet.v1.WalletService.CreditWheelReward:input_type -> hyapp.wallet.v1.CreditWheelRewardRequest + 245, // 269: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:input_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardRequest + 247, // 270: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:input_type -> hyapp.wallet.v1.CreditInviteActivityRewardRequest + 249, // 271: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:input_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardRequest + 251, // 272: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest + 256, // 273: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest + 258, // 274: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest + 260, // 275: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest + 262, // 276: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest + 264, // 277: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest + 266, // 278: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest + 268, // 279: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest + 270, // 280: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:input_type -> hyapp.wallet.v1.RetryRedPacketRefundRequest + 273, // 281: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 273, // 282: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 273, // 283: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 219, // 284: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:output_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse + 2, // 285: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 2, // 286: hyapp.wallet.v1.WalletService.DebitDirectGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 6, // 287: hyapp.wallet.v1.WalletService.BatchDebitGift:output_type -> hyapp.wallet.v1.BatchDebitGiftResponse + 2, // 288: hyapp.wallet.v1.WalletService.DebitRobotGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 10, // 289: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse + 14, // 290: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:output_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyResponse + 17, // 291: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:output_type -> hyapp.wallet.v1.GetHostSalaryProgressResponse + 281, // 292: hyapp.wallet.v1.WalletService.GetHostRevenueStats:output_type -> hyapp.wallet.v1.GetHostRevenueStatsResponse + 284, // 293: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:output_type -> hyapp.wallet.v1.GetAgencyPointShareStatsResponse + 287, // 294: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:output_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsResponse + 20, // 295: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:output_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsResponse + 22, // 296: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse + 24, // 297: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse + 26, // 298: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse + 28, // 299: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:output_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildResponse + 31, // 300: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:output_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersResponse + 33, // 301: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:output_type -> hyapp.wallet.v1.ExchangeSalaryToCoinResponse + 35, // 302: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:output_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerResponse + 290, // 303: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:output_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse + 292, // 304: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:output_type -> hyapp.wallet.v1.TransferPointToCoinSellerResponse + 294, // 305: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:output_type -> hyapp.wallet.v1.GetPointWithdrawalConfigResponse + 37, // 306: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:output_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalResponse + 39, // 307: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:output_type -> hyapp.wallet.v1.SettleSalaryWithdrawalResponse + 41, // 308: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:output_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalResponse + 43, // 309: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:output_type -> hyapp.wallet.v1.FreezePointWithdrawalResponse + 45, // 310: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:output_type -> hyapp.wallet.v1.SettlePointWithdrawalResponse + 47, // 311: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:output_type -> hyapp.wallet.v1.ReleasePointWithdrawalResponse + 62, // 312: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse + 64, // 313: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse + 71, // 314: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 315: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 316: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 317: hyapp.wallet.v1.WalletService.DeleteResource:output_type -> hyapp.wallet.v1.ResourceResponse + 70, // 318: hyapp.wallet.v1.WalletService.BatchDeleteResources:output_type -> hyapp.wallet.v1.BatchDeleteResourcesResponse + 73, // 319: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse + 75, // 320: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse + 79, // 321: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 79, // 322: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 79, // 323: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 53, // 324: hyapp.wallet.v1.WalletService.PinResourceGroupSnapshot:output_type -> hyapp.wallet.v1.PinResourceGroupSnapshotResponse + 81, // 325: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse + 83, // 326: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse + 278, // 327: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:output_type -> hyapp.wallet.v1.GetGiftCatalogVersionResponse + 92, // 328: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 88, // 329: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:output_type -> hyapp.wallet.v1.BatchCreateGiftConfigsResponse + 92, // 330: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 92, // 331: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse + 92, // 332: hyapp.wallet.v1.WalletService.DeleteGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 85, // 333: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse + 97, // 334: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 335: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 336: hyapp.wallet.v1.WalletService.GrantPinnedResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 337: hyapp.wallet.v1.WalletService.RevokeResourceGrant:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 99, // 338: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse + 101, // 339: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse + 103, // 340: hyapp.wallet.v1.WalletService.UnequipUserResource:output_type -> hyapp.wallet.v1.UnequipUserResourceResponse + 106, // 341: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:output_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse + 108, // 342: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse + 111, // 343: hyapp.wallet.v1.WalletService.ListResourceShopItems:output_type -> hyapp.wallet.v1.ListResourceShopItemsResponse + 113, // 344: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:output_type -> hyapp.wallet.v1.UpsertResourceShopItemsResponse + 115, // 345: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:output_type -> hyapp.wallet.v1.ResourceShopItemResponse + 276, // 346: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:output_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse + 117, // 347: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:output_type -> hyapp.wallet.v1.PurchaseResourceShopItemResponse + 120, // 348: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse + 123, // 349: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:output_type -> hyapp.wallet.v1.GetRechargeBillSummaryResponse + 126, // 350: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:output_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsResponse + 132, // 351: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:output_type -> hyapp.wallet.v1.GetRechargeBillOverviewResponse + 135, // 352: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:output_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesResponse + 138, // 353: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse + 141, // 354: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse + 144, // 355: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse + 147, // 356: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse + 149, // 357: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse + 151, // 358: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse + 155, // 359: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 155, // 360: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 156, // 361: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse + 160, // 362: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:output_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse + 162, // 363: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse + 162, // 364: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse + 166, // 365: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:output_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse + 168, // 366: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:output_type -> hyapp.wallet.v1.H5RechargeOptionsResponse + 177, // 367: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 368: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 369: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 174, // 370: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:output_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse + 177, // 371: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 372: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 179, // 373: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:output_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse + 181, // 374: hyapp.wallet.v1.WalletService.HandleMifapayNotify:output_type -> hyapp.wallet.v1.HandleMifapayNotifyResponse + 183, // 375: hyapp.wallet.v1.WalletService.HandleV5PayNotify:output_type -> hyapp.wallet.v1.HandleV5PayNotifyResponse + 186, // 376: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse + 189, // 377: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse + 199, // 378: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse + 211, // 379: hyapp.wallet.v1.WalletService.GetVipProgramConfig:output_type -> hyapp.wallet.v1.GetVipProgramConfigResponse + 201, // 380: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse + 233, // 381: hyapp.wallet.v1.WalletService.CheckVipBenefit:output_type -> hyapp.wallet.v1.CheckVipBenefitResponse + 203, // 382: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse + 205, // 383: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:output_type -> hyapp.wallet.v1.DebitCPBreakupFeeResponse + 207, // 384: hyapp.wallet.v1.WalletService.DebitWheelDraw:output_type -> hyapp.wallet.v1.DebitWheelDrawResponse + 209, // 385: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse + 227, // 386: hyapp.wallet.v1.WalletService.GrantVipTrialCard:output_type -> hyapp.wallet.v1.GrantVipTrialCardResponse + 229, // 387: hyapp.wallet.v1.WalletService.EquipVipTrialCard:output_type -> hyapp.wallet.v1.EquipVipTrialCardResponse + 231, // 388: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:output_type -> hyapp.wallet.v1.UnequipVipTrialCardResponse + 236, // 389: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse + 238, // 390: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse + 213, // 391: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:output_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse + 215, // 392: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:output_type -> hyapp.wallet.v1.UpdateMyVipSettingsResponse + 221, // 393: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:output_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse + 223, // 394: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:output_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse + 225, // 395: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:output_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse + 240, // 396: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse + 242, // 397: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse + 244, // 398: hyapp.wallet.v1.WalletService.CreditWheelReward:output_type -> hyapp.wallet.v1.CreditWheelRewardResponse + 246, // 399: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:output_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardResponse + 248, // 400: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:output_type -> hyapp.wallet.v1.CreditInviteActivityRewardResponse + 250, // 401: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:output_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardResponse + 252, // 402: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse + 257, // 403: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse + 259, // 404: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse + 261, // 405: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse + 263, // 406: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse + 265, // 407: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse + 267, // 408: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse + 269, // 409: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse + 271, // 410: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:output_type -> hyapp.wallet.v1.RetryRedPacketRefundResponse + 281, // [281:411] is the sub-list for method output_type + 151, // [151:281] is the sub-list for method input_type + 151, // [151:151] is the sub-list for extension type_name + 151, // [151:151] is the sub-list for extension extendee + 0, // [0:151] is the sub-list for field type_name } func init() { file_proto_wallet_v1_wallet_proto_init() } @@ -32055,19 +29239,19 @@ func file_proto_wallet_v1_wallet_proto_init() { if File_proto_wallet_v1_wallet_proto != nil { return } - file_proto_wallet_v1_wallet_proto_msgTypes[62].OneofWrappers = []any{} - file_proto_wallet_v1_wallet_proto_msgTypes[63].OneofWrappers = []any{} - file_proto_wallet_v1_wallet_proto_msgTypes[148].OneofWrappers = []any{} - file_proto_wallet_v1_wallet_proto_msgTypes[149].OneofWrappers = []any{} - file_proto_wallet_v1_wallet_proto_msgTypes[210].OneofWrappers = []any{} - file_proto_wallet_v1_wallet_proto_msgTypes[222].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[65].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[66].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[152].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[153].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[214].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[226].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_wallet_v1_wallet_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_wallet_v1_wallet_proto_rawDesc), len(file_proto_wallet_v1_wallet_proto_rawDesc)), NumEnums: 0, - NumMessages: 292, + NumMessages: 296, NumExtensions: 0, NumServices: 2, }, @@ -32076,7 +29260,6 @@ func file_proto_wallet_v1_wallet_proto_init() { MessageInfos: file_proto_wallet_v1_wallet_proto_msgTypes, }.Build() File_proto_wallet_v1_wallet_proto = out.File - file_proto_wallet_v1_wallet_proto_rawDesc = nil file_proto_wallet_v1_wallet_proto_goTypes = nil file_proto_wallet_v1_wallet_proto_depIdxs = nil } diff --git a/api/proto/wallet/v1/wallet.proto b/api/proto/wallet/v1/wallet.proto index a7721222..0cf62e7a 100644 --- a/api/proto/wallet/v1/wallet.proto +++ b/api/proto/wallet/v1/wallet.proto @@ -609,6 +609,45 @@ message ResourceGroup { int64 updated_at_ms = 12; } +// ResourceGroupSnapshot 是 owner 在业务发布时钉住的不可变奖励承诺。后续资源组编辑、停用 +// 或资源展示信息变化都不会改变 snapshot_id 对应的实际发放内容和 App 展示内容。 +message ResourceGroupSnapshot { + string app_code = 1; + string snapshot_id = 2; + string pin_key = 3; + int64 source_group_id = 4; + int64 version_no = 5; + string snapshot_hash = 6; + ResourceGroup group = 7; + int64 created_by_user_id = 8; + int64 created_at_ms = 9; + int64 source_group_updated_at_ms = 10; + // source_content_hash 覆盖资源组、组项和嵌套资源的完整规范化内容;成员资源独立编辑也会改变该值。 + string source_content_hash = 11; +} + +message PinResourceGroupSnapshotRequest { + string request_id = 1; + string app_code = 2; + int64 group_id = 3; + // pin_key 由发布方按业务版本生成;重试同一 key 必须返回同一快照。 + string pin_key = 4; + int64 operator_user_id = 5; + // wallet 锁住来源组后必须再次匹配,避免 Get->Pin 间编辑竞态固化错误版本。 + int64 expected_group_updated_at_ms = 6; + // GetResourceGroup 返回的 owner 内容版本。wallet 在事务内锁住组、组项和资源后重新计算并匹配。 + string expected_source_content_hash = 7; + // required_region_ids 是发布方要求奖励可发送的可信 active region 集合;wallet 对 gift resource + // 按 pin-time gift config 区域并集逐区 fail-close。空集合仅供不带区域语义的旧调用。 + repeated int64 required_region_ids = 8; + // required_all_regions=true 时必须存在 region_id=0 的 pin-time gift config,确保发布后新增区域也可用。 + bool required_all_regions = 9; +} + +message PinResourceGroupSnapshotResponse { + ResourceGroupSnapshot snapshot = 1; +} + message GiftConfig { string app_code = 1; string gift_id = 2; @@ -682,6 +721,11 @@ message UserResourceEntitlement { int64 created_at_ms = 12; int64 updated_at_ms = 13; bool equipped = 14; + string source_snapshot_id = 15; + string resource_snapshot_hash = 16; + // pinned_gift_configs 仅在 source_snapshot_id 非空且资源类型为 gift 时返回。内容已由 wallet + // 校验 hash/resource/app 绑定,App 背包必须优先使用它,legacy entitlement 才回退当前目录。 + repeated GiftConfig pinned_gift_configs = 17; } message ResourceGrantItem { @@ -857,6 +901,8 @@ message GetResourceGroupRequest { message GetResourceGroupResponse { ResourceGroup group = 1; + // 对 group、ordered items 和嵌套 resource 的规范化 SHA-256。 + string source_content_hash = 2; } message CreateResourceGroupRequest { @@ -1042,6 +1088,18 @@ message GrantResourceGroupRequest { string grant_source = 7; } +message GrantPinnedResourceGroupRequest { + string command_id = 1; + string app_code = 2; + int64 target_user_id = 3; + string snapshot_id = 4; + string reason = 5; + int64 operator_user_id = 6; + string grant_source = 7; + // 发布版本持有的快照哈希;wallet 必须与 snapshot_id 对应的 owner 快照精确匹配。 + string expected_snapshot_hash = 8; +} + message RevokeResourceGrantRequest { string request_id = 1; string app_code = 2; @@ -1803,6 +1861,9 @@ message VerifyCoinSellerRechargeReceiptRequest { string provider_currency_code = 9; string provider_pay_type = 10; int64 provider_amount_minor = 11; + // receive_address 由可信后台从 app-scoped SQL 配置读取;非空时覆盖 wallet YAML, + // 让运营修改收款地址后立即按新地址校验,同时避免 wallet-service 反向直连 admin 数据库。 + string receive_address = 12; } message VerifyCoinSellerRechargeReceiptResponse { @@ -2929,6 +2990,7 @@ service WalletService { rpc CreateResourceGroup(CreateResourceGroupRequest) returns (ResourceGroupResponse); rpc UpdateResourceGroup(UpdateResourceGroupRequest) returns (ResourceGroupResponse); rpc SetResourceGroupStatus(SetResourceGroupStatusRequest) returns (ResourceGroupResponse); + rpc PinResourceGroupSnapshot(PinResourceGroupSnapshotRequest) returns (PinResourceGroupSnapshotResponse); rpc ListGiftConfigs(ListGiftConfigsRequest) returns (ListGiftConfigsResponse); rpc ListGiftTypeConfigs(ListGiftTypeConfigsRequest) returns (ListGiftTypeConfigsResponse); rpc GetGiftCatalogVersion(GetGiftCatalogVersionRequest) returns (GetGiftCatalogVersionResponse); @@ -2940,6 +3002,7 @@ service WalletService { rpc UpsertGiftTypeConfig(UpsertGiftTypeConfigRequest) returns (GiftTypeConfigResponse); rpc GrantResource(GrantResourceRequest) returns (ResourceGrantResponse); rpc GrantResourceGroup(GrantResourceGroupRequest) returns (ResourceGrantResponse); + rpc GrantPinnedResourceGroup(GrantPinnedResourceGroupRequest) returns (ResourceGrantResponse); rpc RevokeResourceGrant(RevokeResourceGrantRequest) returns (ResourceGrantResponse); rpc ListUserResources(ListUserResourcesRequest) returns (ListUserResourcesResponse); rpc EquipUserResource(EquipUserResourceRequest) returns (EquipUserResourceResponse); diff --git a/api/proto/wallet/v1/wallet_grpc.pb.go b/api/proto/wallet/v1/wallet_grpc.pb.go index a7653246..141c0633 100644 --- a/api/proto/wallet/v1/wallet_grpc.pb.go +++ b/api/proto/wallet/v1/wallet_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v7.35.0 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v5.29.2 // source: proto/wallet/v1/wallet.proto package walletv1 @@ -106,16 +106,16 @@ type WalletCronServiceServer interface { type UnimplementedWalletCronServiceServer struct{} func (UnimplementedWalletCronServiceServer) ProcessHostSalaryDailySettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessHostSalaryDailySettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessHostSalaryDailySettlementBatch not implemented") } func (UnimplementedWalletCronServiceServer) ProcessHostSalaryHalfMonthSettlementBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessHostSalaryHalfMonthSettlementBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessHostSalaryHalfMonthSettlementBatch not implemented") } func (UnimplementedWalletCronServiceServer) ProcessHostSalaryMonthEndBatch(context.Context, *CronBatchRequest) (*CronBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessHostSalaryMonthEndBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessHostSalaryMonthEndBatch not implemented") } func (UnimplementedWalletCronServiceServer) ProcessVipDailyCoinRebateBatch(context.Context, *ProcessVipDailyCoinRebateBatchRequest) (*ProcessVipDailyCoinRebateBatchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessVipDailyCoinRebateBatch not implemented") + return nil, status.Error(codes.Unimplemented, "method ProcessVipDailyCoinRebateBatch not implemented") } func (UnimplementedWalletCronServiceServer) mustEmbedUnimplementedWalletCronServiceServer() {} func (UnimplementedWalletCronServiceServer) testEmbeddedByValue() {} @@ -128,7 +128,7 @@ type UnsafeWalletCronServiceServer interface { } func RegisterWalletCronServiceServer(s grpc.ServiceRegistrar, srv WalletCronServiceServer) { - // If the following call pancis, it indicates UnimplementedWalletCronServiceServer was + // If the following call panics, it indicates UnimplementedWalletCronServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -278,6 +278,7 @@ const ( WalletService_CreateResourceGroup_FullMethodName = "/hyapp.wallet.v1.WalletService/CreateResourceGroup" WalletService_UpdateResourceGroup_FullMethodName = "/hyapp.wallet.v1.WalletService/UpdateResourceGroup" WalletService_SetResourceGroupStatus_FullMethodName = "/hyapp.wallet.v1.WalletService/SetResourceGroupStatus" + WalletService_PinResourceGroupSnapshot_FullMethodName = "/hyapp.wallet.v1.WalletService/PinResourceGroupSnapshot" WalletService_ListGiftConfigs_FullMethodName = "/hyapp.wallet.v1.WalletService/ListGiftConfigs" WalletService_ListGiftTypeConfigs_FullMethodName = "/hyapp.wallet.v1.WalletService/ListGiftTypeConfigs" WalletService_GetGiftCatalogVersion_FullMethodName = "/hyapp.wallet.v1.WalletService/GetGiftCatalogVersion" @@ -289,6 +290,7 @@ const ( WalletService_UpsertGiftTypeConfig_FullMethodName = "/hyapp.wallet.v1.WalletService/UpsertGiftTypeConfig" WalletService_GrantResource_FullMethodName = "/hyapp.wallet.v1.WalletService/GrantResource" WalletService_GrantResourceGroup_FullMethodName = "/hyapp.wallet.v1.WalletService/GrantResourceGroup" + WalletService_GrantPinnedResourceGroup_FullMethodName = "/hyapp.wallet.v1.WalletService/GrantPinnedResourceGroup" WalletService_RevokeResourceGrant_FullMethodName = "/hyapp.wallet.v1.WalletService/RevokeResourceGrant" WalletService_ListUserResources_FullMethodName = "/hyapp.wallet.v1.WalletService/ListUserResources" WalletService_EquipUserResource_FullMethodName = "/hyapp.wallet.v1.WalletService/EquipUserResource" @@ -411,6 +413,7 @@ type WalletServiceClient interface { CreateResourceGroup(ctx context.Context, in *CreateResourceGroupRequest, opts ...grpc.CallOption) (*ResourceGroupResponse, error) UpdateResourceGroup(ctx context.Context, in *UpdateResourceGroupRequest, opts ...grpc.CallOption) (*ResourceGroupResponse, error) SetResourceGroupStatus(ctx context.Context, in *SetResourceGroupStatusRequest, opts ...grpc.CallOption) (*ResourceGroupResponse, error) + PinResourceGroupSnapshot(ctx context.Context, in *PinResourceGroupSnapshotRequest, opts ...grpc.CallOption) (*PinResourceGroupSnapshotResponse, error) ListGiftConfigs(ctx context.Context, in *ListGiftConfigsRequest, opts ...grpc.CallOption) (*ListGiftConfigsResponse, error) ListGiftTypeConfigs(ctx context.Context, in *ListGiftTypeConfigsRequest, opts ...grpc.CallOption) (*ListGiftTypeConfigsResponse, error) GetGiftCatalogVersion(ctx context.Context, in *GetGiftCatalogVersionRequest, opts ...grpc.CallOption) (*GetGiftCatalogVersionResponse, error) @@ -422,6 +425,7 @@ type WalletServiceClient interface { UpsertGiftTypeConfig(ctx context.Context, in *UpsertGiftTypeConfigRequest, opts ...grpc.CallOption) (*GiftTypeConfigResponse, error) GrantResource(ctx context.Context, in *GrantResourceRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) GrantResourceGroup(ctx context.Context, in *GrantResourceGroupRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) + GrantPinnedResourceGroup(ctx context.Context, in *GrantPinnedResourceGroupRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) RevokeResourceGrant(ctx context.Context, in *RevokeResourceGrantRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) ListUserResources(ctx context.Context, in *ListUserResourcesRequest, opts ...grpc.CallOption) (*ListUserResourcesResponse, error) EquipUserResource(ctx context.Context, in *EquipUserResourceRequest, opts ...grpc.CallOption) (*EquipUserResourceResponse, error) @@ -896,6 +900,16 @@ func (c *walletServiceClient) SetResourceGroupStatus(ctx context.Context, in *Se return out, nil } +func (c *walletServiceClient) PinResourceGroupSnapshot(ctx context.Context, in *PinResourceGroupSnapshotRequest, opts ...grpc.CallOption) (*PinResourceGroupSnapshotResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PinResourceGroupSnapshotResponse) + err := c.cc.Invoke(ctx, WalletService_PinResourceGroupSnapshot_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *walletServiceClient) ListGiftConfigs(ctx context.Context, in *ListGiftConfigsRequest, opts ...grpc.CallOption) (*ListGiftConfigsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListGiftConfigsResponse) @@ -1006,6 +1020,16 @@ func (c *walletServiceClient) GrantResourceGroup(ctx context.Context, in *GrantR return out, nil } +func (c *walletServiceClient) GrantPinnedResourceGroup(ctx context.Context, in *GrantPinnedResourceGroupRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResourceGrantResponse) + err := c.cc.Invoke(ctx, WalletService_GrantPinnedResourceGroup_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *walletServiceClient) RevokeResourceGrant(ctx context.Context, in *RevokeResourceGrantRequest, opts ...grpc.CallOption) (*ResourceGrantResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResourceGrantResponse) @@ -1792,6 +1816,7 @@ type WalletServiceServer interface { CreateResourceGroup(context.Context, *CreateResourceGroupRequest) (*ResourceGroupResponse, error) UpdateResourceGroup(context.Context, *UpdateResourceGroupRequest) (*ResourceGroupResponse, error) SetResourceGroupStatus(context.Context, *SetResourceGroupStatusRequest) (*ResourceGroupResponse, error) + PinResourceGroupSnapshot(context.Context, *PinResourceGroupSnapshotRequest) (*PinResourceGroupSnapshotResponse, error) ListGiftConfigs(context.Context, *ListGiftConfigsRequest) (*ListGiftConfigsResponse, error) ListGiftTypeConfigs(context.Context, *ListGiftTypeConfigsRequest) (*ListGiftTypeConfigsResponse, error) GetGiftCatalogVersion(context.Context, *GetGiftCatalogVersionRequest) (*GetGiftCatalogVersionResponse, error) @@ -1803,6 +1828,7 @@ type WalletServiceServer interface { UpsertGiftTypeConfig(context.Context, *UpsertGiftTypeConfigRequest) (*GiftTypeConfigResponse, error) GrantResource(context.Context, *GrantResourceRequest) (*ResourceGrantResponse, error) GrantResourceGroup(context.Context, *GrantResourceGroupRequest) (*ResourceGrantResponse, error) + GrantPinnedResourceGroup(context.Context, *GrantPinnedResourceGroupRequest) (*ResourceGrantResponse, error) RevokeResourceGrant(context.Context, *RevokeResourceGrantRequest) (*ResourceGrantResponse, error) ListUserResources(context.Context, *ListUserResourcesRequest) (*ListUserResourcesResponse, error) EquipUserResource(context.Context, *EquipUserResourceRequest) (*EquipUserResourceResponse, error) @@ -1888,376 +1914,382 @@ type WalletServiceServer interface { type UnimplementedWalletServiceServer struct{} func (UnimplementedWalletServiceServer) DebitGift(context.Context, *DebitGiftRequest) (*DebitGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DebitGift not implemented") + return nil, status.Error(codes.Unimplemented, "method DebitGift not implemented") } func (UnimplementedWalletServiceServer) DebitDirectGift(context.Context, *DebitDirectGiftRequest) (*DebitGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DebitDirectGift not implemented") + return nil, status.Error(codes.Unimplemented, "method DebitDirectGift not implemented") } func (UnimplementedWalletServiceServer) BatchDebitGift(context.Context, *BatchDebitGiftRequest) (*BatchDebitGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchDebitGift not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchDebitGift not implemented") } func (UnimplementedWalletServiceServer) DebitRobotGift(context.Context, *DebitRobotGiftRequest) (*DebitGiftResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DebitRobotGift not implemented") + return nil, status.Error(codes.Unimplemented, "method DebitRobotGift not implemented") } func (UnimplementedWalletServiceServer) GetBalances(context.Context, *GetBalancesRequest) (*GetBalancesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBalances not implemented") + return nil, status.Error(codes.Unimplemented, "method GetBalances not implemented") } func (UnimplementedWalletServiceServer) GetActiveHostSalaryPolicy(context.Context, *GetActiveHostSalaryPolicyRequest) (*GetActiveHostSalaryPolicyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetActiveHostSalaryPolicy not implemented") + return nil, status.Error(codes.Unimplemented, "method GetActiveHostSalaryPolicy not implemented") } func (UnimplementedWalletServiceServer) GetHostSalaryProgress(context.Context, *GetHostSalaryProgressRequest) (*GetHostSalaryProgressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHostSalaryProgress not implemented") + return nil, status.Error(codes.Unimplemented, "method GetHostSalaryProgress not implemented") } func (UnimplementedWalletServiceServer) GetHostRevenueStats(context.Context, *GetHostRevenueStatsRequest) (*GetHostRevenueStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHostRevenueStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetHostRevenueStats not implemented") } func (UnimplementedWalletServiceServer) GetAgencyPointShareStats(context.Context, *GetAgencyPointShareStatsRequest) (*GetAgencyPointShareStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyPointShareStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyPointShareStats not implemented") } func (UnimplementedWalletServiceServer) GetAgencyHostGiftStats(context.Context, *GetAgencyHostGiftStatsRequest) (*GetAgencyHostGiftStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAgencyHostGiftStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetAgencyHostGiftStats not implemented") } func (UnimplementedWalletServiceServer) GetTeamHostSalaryStats(context.Context, *GetTeamHostSalaryStatsRequest) (*GetTeamHostSalaryStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTeamHostSalaryStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetTeamHostSalaryStats not implemented") } func (UnimplementedWalletServiceServer) AdminCreditAsset(context.Context, *AdminCreditAssetRequest) (*AdminCreditAssetResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminCreditAsset not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminCreditAsset not implemented") } func (UnimplementedWalletServiceServer) AdminCreditCoinSellerStock(context.Context, *AdminCreditCoinSellerStockRequest) (*AdminCreditCoinSellerStockResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminCreditCoinSellerStock not implemented") + return nil, status.Error(codes.Unimplemented, "method AdminCreditCoinSellerStock not implemented") } func (UnimplementedWalletServiceServer) TransferCoinFromSeller(context.Context, *TransferCoinFromSellerRequest) (*TransferCoinFromSellerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TransferCoinFromSeller not implemented") + return nil, status.Error(codes.Unimplemented, "method TransferCoinFromSeller not implemented") } func (UnimplementedWalletServiceServer) TransferCoinSellerStockToChild(context.Context, *TransferCoinSellerStockToChildRequest) (*TransferCoinSellerStockToChildResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TransferCoinSellerStockToChild not implemented") + return nil, status.Error(codes.Unimplemented, "method TransferCoinSellerStockToChild not implemented") } func (UnimplementedWalletServiceServer) ListCoinSellerSalaryExchangeRateTiers(context.Context, *ListCoinSellerSalaryExchangeRateTiersRequest) (*ListCoinSellerSalaryExchangeRateTiersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListCoinSellerSalaryExchangeRateTiers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListCoinSellerSalaryExchangeRateTiers not implemented") } func (UnimplementedWalletServiceServer) ExchangeSalaryToCoin(context.Context, *ExchangeSalaryToCoinRequest) (*ExchangeSalaryToCoinResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExchangeSalaryToCoin not implemented") + return nil, status.Error(codes.Unimplemented, "method ExchangeSalaryToCoin not implemented") } func (UnimplementedWalletServiceServer) TransferSalaryToCoinSeller(context.Context, *TransferSalaryToCoinSellerRequest) (*TransferSalaryToCoinSellerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TransferSalaryToCoinSeller not implemented") + return nil, status.Error(codes.Unimplemented, "method TransferSalaryToCoinSeller not implemented") } func (UnimplementedWalletServiceServer) ListPointWithdrawalCoinSellers(context.Context, *ListPointWithdrawalCoinSellersRequest) (*ListPointWithdrawalCoinSellersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPointWithdrawalCoinSellers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListPointWithdrawalCoinSellers not implemented") } func (UnimplementedWalletServiceServer) TransferPointToCoinSeller(context.Context, *TransferPointToCoinSellerRequest) (*TransferPointToCoinSellerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TransferPointToCoinSeller not implemented") + return nil, status.Error(codes.Unimplemented, "method TransferPointToCoinSeller not implemented") } func (UnimplementedWalletServiceServer) GetPointWithdrawalConfig(context.Context, *GetPointWithdrawalConfigRequest) (*GetPointWithdrawalConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPointWithdrawalConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetPointWithdrawalConfig not implemented") } func (UnimplementedWalletServiceServer) FreezeSalaryWithdrawal(context.Context, *FreezeSalaryWithdrawalRequest) (*FreezeSalaryWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FreezeSalaryWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method FreezeSalaryWithdrawal not implemented") } func (UnimplementedWalletServiceServer) SettleSalaryWithdrawal(context.Context, *SettleSalaryWithdrawalRequest) (*SettleSalaryWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SettleSalaryWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method SettleSalaryWithdrawal not implemented") } func (UnimplementedWalletServiceServer) ReleaseSalaryWithdrawal(context.Context, *ReleaseSalaryWithdrawalRequest) (*ReleaseSalaryWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReleaseSalaryWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method ReleaseSalaryWithdrawal not implemented") } func (UnimplementedWalletServiceServer) FreezePointWithdrawal(context.Context, *FreezePointWithdrawalRequest) (*FreezePointWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FreezePointWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method FreezePointWithdrawal not implemented") } func (UnimplementedWalletServiceServer) SettlePointWithdrawal(context.Context, *SettlePointWithdrawalRequest) (*SettlePointWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SettlePointWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method SettlePointWithdrawal not implemented") } func (UnimplementedWalletServiceServer) ReleasePointWithdrawal(context.Context, *ReleasePointWithdrawalRequest) (*ReleasePointWithdrawalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReleasePointWithdrawal not implemented") + return nil, status.Error(codes.Unimplemented, "method ReleasePointWithdrawal not implemented") } func (UnimplementedWalletServiceServer) ListResources(context.Context, *ListResourcesRequest) (*ListResourcesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResources not implemented") + return nil, status.Error(codes.Unimplemented, "method ListResources not implemented") } func (UnimplementedWalletServiceServer) GetResource(context.Context, *GetResourceRequest) (*GetResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetResource not implemented") + return nil, status.Error(codes.Unimplemented, "method GetResource not implemented") } func (UnimplementedWalletServiceServer) CreateResource(context.Context, *CreateResourceRequest) (*ResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateResource not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateResource not implemented") } func (UnimplementedWalletServiceServer) UpdateResource(context.Context, *UpdateResourceRequest) (*ResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateResource not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateResource not implemented") } func (UnimplementedWalletServiceServer) SetResourceStatus(context.Context, *SetResourceStatusRequest) (*ResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetResourceStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetResourceStatus not implemented") } func (UnimplementedWalletServiceServer) DeleteResource(context.Context, *DeleteResourceRequest) (*ResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteResource not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteResource not implemented") } func (UnimplementedWalletServiceServer) BatchDeleteResources(context.Context, *BatchDeleteResourcesRequest) (*BatchDeleteResourcesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchDeleteResources not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchDeleteResources not implemented") } func (UnimplementedWalletServiceServer) ListResourceGroups(context.Context, *ListResourceGroupsRequest) (*ListResourceGroupsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResourceGroups not implemented") + return nil, status.Error(codes.Unimplemented, "method ListResourceGroups not implemented") } func (UnimplementedWalletServiceServer) GetResourceGroup(context.Context, *GetResourceGroupRequest) (*GetResourceGroupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetResourceGroup not implemented") + return nil, status.Error(codes.Unimplemented, "method GetResourceGroup not implemented") } func (UnimplementedWalletServiceServer) CreateResourceGroup(context.Context, *CreateResourceGroupRequest) (*ResourceGroupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateResourceGroup not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateResourceGroup not implemented") } func (UnimplementedWalletServiceServer) UpdateResourceGroup(context.Context, *UpdateResourceGroupRequest) (*ResourceGroupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateResourceGroup not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateResourceGroup not implemented") } func (UnimplementedWalletServiceServer) SetResourceGroupStatus(context.Context, *SetResourceGroupStatusRequest) (*ResourceGroupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetResourceGroupStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetResourceGroupStatus not implemented") +} +func (UnimplementedWalletServiceServer) PinResourceGroupSnapshot(context.Context, *PinResourceGroupSnapshotRequest) (*PinResourceGroupSnapshotResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PinResourceGroupSnapshot not implemented") } func (UnimplementedWalletServiceServer) ListGiftConfigs(context.Context, *ListGiftConfigsRequest) (*ListGiftConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListGiftConfigs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListGiftConfigs not implemented") } func (UnimplementedWalletServiceServer) ListGiftTypeConfigs(context.Context, *ListGiftTypeConfigsRequest) (*ListGiftTypeConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListGiftTypeConfigs not implemented") + return nil, status.Error(codes.Unimplemented, "method ListGiftTypeConfigs not implemented") } func (UnimplementedWalletServiceServer) GetGiftCatalogVersion(context.Context, *GetGiftCatalogVersionRequest) (*GetGiftCatalogVersionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetGiftCatalogVersion not implemented") + return nil, status.Error(codes.Unimplemented, "method GetGiftCatalogVersion not implemented") } func (UnimplementedWalletServiceServer) CreateGiftConfig(context.Context, *CreateGiftConfigRequest) (*GiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateGiftConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateGiftConfig not implemented") } func (UnimplementedWalletServiceServer) BatchCreateGiftConfigs(context.Context, *BatchCreateGiftConfigsRequest) (*BatchCreateGiftConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchCreateGiftConfigs not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchCreateGiftConfigs not implemented") } func (UnimplementedWalletServiceServer) UpdateGiftConfig(context.Context, *UpdateGiftConfigRequest) (*GiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateGiftConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateGiftConfig not implemented") } func (UnimplementedWalletServiceServer) SetGiftConfigStatus(context.Context, *SetGiftConfigStatusRequest) (*GiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetGiftConfigStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetGiftConfigStatus not implemented") } func (UnimplementedWalletServiceServer) DeleteGiftConfig(context.Context, *DeleteGiftConfigRequest) (*GiftConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteGiftConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteGiftConfig not implemented") } func (UnimplementedWalletServiceServer) UpsertGiftTypeConfig(context.Context, *UpsertGiftTypeConfigRequest) (*GiftTypeConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertGiftTypeConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertGiftTypeConfig not implemented") } func (UnimplementedWalletServiceServer) GrantResource(context.Context, *GrantResourceRequest) (*ResourceGrantResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GrantResource not implemented") + return nil, status.Error(codes.Unimplemented, "method GrantResource not implemented") } func (UnimplementedWalletServiceServer) GrantResourceGroup(context.Context, *GrantResourceGroupRequest) (*ResourceGrantResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GrantResourceGroup not implemented") + return nil, status.Error(codes.Unimplemented, "method GrantResourceGroup not implemented") +} +func (UnimplementedWalletServiceServer) GrantPinnedResourceGroup(context.Context, *GrantPinnedResourceGroupRequest) (*ResourceGrantResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GrantPinnedResourceGroup not implemented") } func (UnimplementedWalletServiceServer) RevokeResourceGrant(context.Context, *RevokeResourceGrantRequest) (*ResourceGrantResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RevokeResourceGrant not implemented") + return nil, status.Error(codes.Unimplemented, "method RevokeResourceGrant not implemented") } func (UnimplementedWalletServiceServer) ListUserResources(context.Context, *ListUserResourcesRequest) (*ListUserResourcesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListUserResources not implemented") + return nil, status.Error(codes.Unimplemented, "method ListUserResources not implemented") } func (UnimplementedWalletServiceServer) EquipUserResource(context.Context, *EquipUserResourceRequest) (*EquipUserResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EquipUserResource not implemented") + return nil, status.Error(codes.Unimplemented, "method EquipUserResource not implemented") } func (UnimplementedWalletServiceServer) UnequipUserResource(context.Context, *UnequipUserResourceRequest) (*UnequipUserResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnequipUserResource not implemented") + return nil, status.Error(codes.Unimplemented, "method UnequipUserResource not implemented") } func (UnimplementedWalletServiceServer) BatchGetUserEquippedResources(context.Context, *BatchGetUserEquippedResourcesRequest) (*BatchGetUserEquippedResourcesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUserEquippedResources not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUserEquippedResources not implemented") } func (UnimplementedWalletServiceServer) ListResourceGrants(context.Context, *ListResourceGrantsRequest) (*ListResourceGrantsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResourceGrants not implemented") + return nil, status.Error(codes.Unimplemented, "method ListResourceGrants not implemented") } func (UnimplementedWalletServiceServer) ListResourceShopItems(context.Context, *ListResourceShopItemsRequest) (*ListResourceShopItemsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResourceShopItems not implemented") + return nil, status.Error(codes.Unimplemented, "method ListResourceShopItems not implemented") } func (UnimplementedWalletServiceServer) UpsertResourceShopItems(context.Context, *UpsertResourceShopItemsRequest) (*UpsertResourceShopItemsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertResourceShopItems not implemented") + return nil, status.Error(codes.Unimplemented, "method UpsertResourceShopItems not implemented") } func (UnimplementedWalletServiceServer) SetResourceShopItemStatus(context.Context, *SetResourceShopItemStatusRequest) (*ResourceShopItemResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetResourceShopItemStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetResourceShopItemStatus not implemented") } func (UnimplementedWalletServiceServer) ListResourceShopPurchaseOrders(context.Context, *ListResourceShopPurchaseOrdersRequest) (*ListResourceShopPurchaseOrdersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResourceShopPurchaseOrders not implemented") + return nil, status.Error(codes.Unimplemented, "method ListResourceShopPurchaseOrders not implemented") } func (UnimplementedWalletServiceServer) PurchaseResourceShopItem(context.Context, *PurchaseResourceShopItemRequest) (*PurchaseResourceShopItemResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PurchaseResourceShopItem not implemented") + return nil, status.Error(codes.Unimplemented, "method PurchaseResourceShopItem not implemented") } func (UnimplementedWalletServiceServer) ListRechargeBills(context.Context, *ListRechargeBillsRequest) (*ListRechargeBillsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRechargeBills not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRechargeBills not implemented") } func (UnimplementedWalletServiceServer) GetRechargeBillSummary(context.Context, *GetRechargeBillSummaryRequest) (*GetRechargeBillSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRechargeBillSummary not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRechargeBillSummary not implemented") } func (UnimplementedWalletServiceServer) BatchGetUserRechargeStats(context.Context, *BatchGetUserRechargeStatsRequest) (*BatchGetUserRechargeStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchGetUserRechargeStats not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchGetUserRechargeStats not implemented") } func (UnimplementedWalletServiceServer) GetRechargeBillOverview(context.Context, *GetRechargeBillOverviewRequest) (*GetRechargeBillOverviewResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRechargeBillOverview not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRechargeBillOverview not implemented") } func (UnimplementedWalletServiceServer) RefreshGooglePaymentPrices(context.Context, *RefreshGooglePaymentPricesRequest) (*RefreshGooglePaymentPricesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RefreshGooglePaymentPrices not implemented") + return nil, status.Error(codes.Unimplemented, "method RefreshGooglePaymentPrices not implemented") } func (UnimplementedWalletServiceServer) GetWalletOverview(context.Context, *GetWalletOverviewRequest) (*GetWalletOverviewResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWalletOverview not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWalletOverview not implemented") } func (UnimplementedWalletServiceServer) GetWalletValueSummary(context.Context, *GetWalletValueSummaryRequest) (*GetWalletValueSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWalletValueSummary not implemented") + return nil, status.Error(codes.Unimplemented, "method GetWalletValueSummary not implemented") } func (UnimplementedWalletServiceServer) GetUserGiftWall(context.Context, *GetUserGiftWallRequest) (*GetUserGiftWallResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserGiftWall not implemented") + return nil, status.Error(codes.Unimplemented, "method GetUserGiftWall not implemented") } func (UnimplementedWalletServiceServer) ListRechargeProducts(context.Context, *ListRechargeProductsRequest) (*ListRechargeProductsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRechargeProducts not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRechargeProducts not implemented") } func (UnimplementedWalletServiceServer) ConfirmGooglePayment(context.Context, *ConfirmGooglePaymentRequest) (*ConfirmGooglePaymentResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConfirmGooglePayment not implemented") + return nil, status.Error(codes.Unimplemented, "method ConfirmGooglePayment not implemented") } func (UnimplementedWalletServiceServer) ListAdminRechargeProducts(context.Context, *ListAdminRechargeProductsRequest) (*ListAdminRechargeProductsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAdminRechargeProducts not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAdminRechargeProducts not implemented") } func (UnimplementedWalletServiceServer) CreateRechargeProduct(context.Context, *CreateRechargeProductRequest) (*RechargeProductResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateRechargeProduct not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateRechargeProduct not implemented") } func (UnimplementedWalletServiceServer) UpdateRechargeProduct(context.Context, *UpdateRechargeProductRequest) (*RechargeProductResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRechargeProduct not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRechargeProduct not implemented") } func (UnimplementedWalletServiceServer) DeleteRechargeProduct(context.Context, *DeleteRechargeProductRequest) (*DeleteRechargeProductResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteRechargeProduct not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteRechargeProduct not implemented") } func (UnimplementedWalletServiceServer) ListThirdPartyPaymentChannels(context.Context, *ListThirdPartyPaymentChannelsRequest) (*ListThirdPartyPaymentChannelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListThirdPartyPaymentChannels not implemented") + return nil, status.Error(codes.Unimplemented, "method ListThirdPartyPaymentChannels not implemented") } func (UnimplementedWalletServiceServer) SetThirdPartyPaymentMethodStatus(context.Context, *SetThirdPartyPaymentMethodStatusRequest) (*ThirdPartyPaymentMethodResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetThirdPartyPaymentMethodStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method SetThirdPartyPaymentMethodStatus not implemented") } func (UnimplementedWalletServiceServer) UpdateThirdPartyPaymentRate(context.Context, *UpdateThirdPartyPaymentRateRequest) (*ThirdPartyPaymentMethodResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateThirdPartyPaymentRate not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateThirdPartyPaymentRate not implemented") } func (UnimplementedWalletServiceServer) SyncThirdPartyPaymentMethods(context.Context, *SyncThirdPartyPaymentMethodsRequest) (*SyncThirdPartyPaymentMethodsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SyncThirdPartyPaymentMethods not implemented") + return nil, status.Error(codes.Unimplemented, "method SyncThirdPartyPaymentMethods not implemented") } func (UnimplementedWalletServiceServer) ListH5RechargeOptions(context.Context, *H5RechargeOptionsRequest) (*H5RechargeOptionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListH5RechargeOptions not implemented") + return nil, status.Error(codes.Unimplemented, "method ListH5RechargeOptions not implemented") } func (UnimplementedWalletServiceServer) CreateH5RechargeOrder(context.Context, *CreateH5RechargeOrderRequest) (*H5RechargeOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateH5RechargeOrder not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateH5RechargeOrder not implemented") } func (UnimplementedWalletServiceServer) CreateTemporaryRechargeOrder(context.Context, *CreateTemporaryRechargeOrderRequest) (*H5RechargeOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateTemporaryRechargeOrder not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateTemporaryRechargeOrder not implemented") } func (UnimplementedWalletServiceServer) GetTemporaryRechargeOrder(context.Context, *GetTemporaryRechargeOrderRequest) (*H5RechargeOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTemporaryRechargeOrder not implemented") + return nil, status.Error(codes.Unimplemented, "method GetTemporaryRechargeOrder not implemented") } func (UnimplementedWalletServiceServer) ListTemporaryRechargeOrders(context.Context, *ListTemporaryRechargeOrdersRequest) (*ListTemporaryRechargeOrdersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTemporaryRechargeOrders not implemented") + return nil, status.Error(codes.Unimplemented, "method ListTemporaryRechargeOrders not implemented") } func (UnimplementedWalletServiceServer) SubmitH5RechargeTx(context.Context, *SubmitH5RechargeTxRequest) (*H5RechargeOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitH5RechargeTx not implemented") + return nil, status.Error(codes.Unimplemented, "method SubmitH5RechargeTx not implemented") } func (UnimplementedWalletServiceServer) GetH5RechargeOrder(context.Context, *GetH5RechargeOrderRequest) (*H5RechargeOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetH5RechargeOrder not implemented") + return nil, status.Error(codes.Unimplemented, "method GetH5RechargeOrder not implemented") } func (UnimplementedWalletServiceServer) VerifyCoinSellerRechargeReceipt(context.Context, *VerifyCoinSellerRechargeReceiptRequest) (*VerifyCoinSellerRechargeReceiptResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerifyCoinSellerRechargeReceipt not implemented") + return nil, status.Error(codes.Unimplemented, "method VerifyCoinSellerRechargeReceipt not implemented") } func (UnimplementedWalletServiceServer) HandleMifapayNotify(context.Context, *HandleMifapayNotifyRequest) (*HandleMifapayNotifyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method HandleMifapayNotify not implemented") + return nil, status.Error(codes.Unimplemented, "method HandleMifapayNotify not implemented") } func (UnimplementedWalletServiceServer) HandleV5PayNotify(context.Context, *HandleV5PayNotifyRequest) (*HandleV5PayNotifyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method HandleV5PayNotify not implemented") + return nil, status.Error(codes.Unimplemented, "method HandleV5PayNotify not implemented") } func (UnimplementedWalletServiceServer) GetDiamondExchangeConfig(context.Context, *GetDiamondExchangeConfigRequest) (*GetDiamondExchangeConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDiamondExchangeConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetDiamondExchangeConfig not implemented") } func (UnimplementedWalletServiceServer) ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWalletTransactions not implemented") + return nil, status.Error(codes.Unimplemented, "method ListWalletTransactions not implemented") } func (UnimplementedWalletServiceServer) ListVipPackages(context.Context, *ListVipPackagesRequest) (*ListVipPackagesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListVipPackages not implemented") + return nil, status.Error(codes.Unimplemented, "method ListVipPackages not implemented") } func (UnimplementedWalletServiceServer) GetVipProgramConfig(context.Context, *GetVipProgramConfigRequest) (*GetVipProgramConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVipProgramConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetVipProgramConfig not implemented") } func (UnimplementedWalletServiceServer) GetMyVip(context.Context, *GetMyVipRequest) (*GetMyVipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMyVip not implemented") + return nil, status.Error(codes.Unimplemented, "method GetMyVip not implemented") } func (UnimplementedWalletServiceServer) CheckVipBenefit(context.Context, *CheckVipBenefitRequest) (*CheckVipBenefitResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckVipBenefit not implemented") + return nil, status.Error(codes.Unimplemented, "method CheckVipBenefit not implemented") } func (UnimplementedWalletServiceServer) PurchaseVip(context.Context, *PurchaseVipRequest) (*PurchaseVipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PurchaseVip not implemented") + return nil, status.Error(codes.Unimplemented, "method PurchaseVip not implemented") } func (UnimplementedWalletServiceServer) DebitCPBreakupFee(context.Context, *DebitCPBreakupFeeRequest) (*DebitCPBreakupFeeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DebitCPBreakupFee not implemented") + return nil, status.Error(codes.Unimplemented, "method DebitCPBreakupFee not implemented") } func (UnimplementedWalletServiceServer) DebitWheelDraw(context.Context, *DebitWheelDrawRequest) (*DebitWheelDrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DebitWheelDraw not implemented") + return nil, status.Error(codes.Unimplemented, "method DebitWheelDraw not implemented") } func (UnimplementedWalletServiceServer) GrantVip(context.Context, *GrantVipRequest) (*GrantVipResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GrantVip not implemented") + return nil, status.Error(codes.Unimplemented, "method GrantVip not implemented") } func (UnimplementedWalletServiceServer) GrantVipTrialCard(context.Context, *GrantVipTrialCardRequest) (*GrantVipTrialCardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GrantVipTrialCard not implemented") + return nil, status.Error(codes.Unimplemented, "method GrantVipTrialCard not implemented") } func (UnimplementedWalletServiceServer) EquipVipTrialCard(context.Context, *EquipVipTrialCardRequest) (*EquipVipTrialCardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EquipVipTrialCard not implemented") + return nil, status.Error(codes.Unimplemented, "method EquipVipTrialCard not implemented") } func (UnimplementedWalletServiceServer) UnequipVipTrialCard(context.Context, *UnequipVipTrialCardRequest) (*UnequipVipTrialCardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnequipVipTrialCard not implemented") + return nil, status.Error(codes.Unimplemented, "method UnequipVipTrialCard not implemented") } func (UnimplementedWalletServiceServer) ListAdminVipLevels(context.Context, *ListAdminVipLevelsRequest) (*ListAdminVipLevelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListAdminVipLevels not implemented") + return nil, status.Error(codes.Unimplemented, "method ListAdminVipLevels not implemented") } func (UnimplementedWalletServiceServer) UpdateAdminVipLevels(context.Context, *UpdateAdminVipLevelsRequest) (*UpdateAdminVipLevelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateAdminVipLevels not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateAdminVipLevels not implemented") } func (UnimplementedWalletServiceServer) UpdateAdminVipProgramConfig(context.Context, *UpdateAdminVipProgramConfigRequest) (*UpdateAdminVipProgramConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateAdminVipProgramConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateAdminVipProgramConfig not implemented") } func (UnimplementedWalletServiceServer) UpdateMyVipSettings(context.Context, *UpdateMyVipSettingsRequest) (*UpdateMyVipSettingsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateMyVipSettings not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateMyVipSettings not implemented") } func (UnimplementedWalletServiceServer) GetMyCurrentVipDailyCoinRebate(context.Context, *GetMyCurrentVipDailyCoinRebateRequest) (*GetMyCurrentVipDailyCoinRebateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMyCurrentVipDailyCoinRebate not implemented") + return nil, status.Error(codes.Unimplemented, "method GetMyCurrentVipDailyCoinRebate not implemented") } func (UnimplementedWalletServiceServer) ListMyVipDailyCoinRebateStatuses(context.Context, *ListMyVipDailyCoinRebateStatusesRequest) (*ListMyVipDailyCoinRebateStatusesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListMyVipDailyCoinRebateStatuses not implemented") + return nil, status.Error(codes.Unimplemented, "method ListMyVipDailyCoinRebateStatuses not implemented") } func (UnimplementedWalletServiceServer) ClaimVipDailyCoinRebate(context.Context, *ClaimVipDailyCoinRebateRequest) (*ClaimVipDailyCoinRebateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ClaimVipDailyCoinRebate not implemented") + return nil, status.Error(codes.Unimplemented, "method ClaimVipDailyCoinRebate not implemented") } func (UnimplementedWalletServiceServer) CreditTaskReward(context.Context, *CreditTaskRewardRequest) (*CreditTaskRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditTaskReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditTaskReward not implemented") } func (UnimplementedWalletServiceServer) CreditLuckyGiftReward(context.Context, *CreditLuckyGiftRewardRequest) (*CreditLuckyGiftRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditLuckyGiftReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditLuckyGiftReward not implemented") } func (UnimplementedWalletServiceServer) CreditWheelReward(context.Context, *CreditWheelRewardRequest) (*CreditWheelRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditWheelReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditWheelReward not implemented") } func (UnimplementedWalletServiceServer) CreditRoomTurnoverReward(context.Context, *CreditRoomTurnoverRewardRequest) (*CreditRoomTurnoverRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditRoomTurnoverReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditRoomTurnoverReward not implemented") } func (UnimplementedWalletServiceServer) CreditInviteActivityReward(context.Context, *CreditInviteActivityRewardRequest) (*CreditInviteActivityRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditInviteActivityReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditInviteActivityReward not implemented") } func (UnimplementedWalletServiceServer) CreditAgencyOpeningReward(context.Context, *CreditAgencyOpeningRewardRequest) (*CreditAgencyOpeningRewardResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreditAgencyOpeningReward not implemented") + return nil, status.Error(codes.Unimplemented, "method CreditAgencyOpeningReward not implemented") } func (UnimplementedWalletServiceServer) ApplyGameCoinChange(context.Context, *ApplyGameCoinChangeRequest) (*ApplyGameCoinChangeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ApplyGameCoinChange not implemented") + return nil, status.Error(codes.Unimplemented, "method ApplyGameCoinChange not implemented") } func (UnimplementedWalletServiceServer) GetRedPacketConfig(context.Context, *GetRedPacketConfigRequest) (*GetRedPacketConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRedPacketConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRedPacketConfig not implemented") } func (UnimplementedWalletServiceServer) UpdateRedPacketConfig(context.Context, *UpdateRedPacketConfigRequest) (*UpdateRedPacketConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRedPacketConfig not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateRedPacketConfig not implemented") } func (UnimplementedWalletServiceServer) CreateRedPacket(context.Context, *CreateRedPacketRequest) (*CreateRedPacketResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateRedPacket not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateRedPacket not implemented") } func (UnimplementedWalletServiceServer) ClaimRedPacket(context.Context, *ClaimRedPacketRequest) (*ClaimRedPacketResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ClaimRedPacket not implemented") + return nil, status.Error(codes.Unimplemented, "method ClaimRedPacket not implemented") } func (UnimplementedWalletServiceServer) ListRedPackets(context.Context, *ListRedPacketsRequest) (*ListRedPacketsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRedPackets not implemented") + return nil, status.Error(codes.Unimplemented, "method ListRedPackets not implemented") } func (UnimplementedWalletServiceServer) GetRedPacket(context.Context, *GetRedPacketRequest) (*GetRedPacketResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRedPacket not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRedPacket not implemented") } func (UnimplementedWalletServiceServer) ExpireRedPackets(context.Context, *ExpireRedPacketsRequest) (*ExpireRedPacketsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExpireRedPackets not implemented") + return nil, status.Error(codes.Unimplemented, "method ExpireRedPackets not implemented") } func (UnimplementedWalletServiceServer) RetryRedPacketRefund(context.Context, *RetryRedPacketRefundRequest) (*RetryRedPacketRefundResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RetryRedPacketRefund not implemented") + return nil, status.Error(codes.Unimplemented, "method RetryRedPacketRefund not implemented") } func (UnimplementedWalletServiceServer) mustEmbedUnimplementedWalletServiceServer() {} func (UnimplementedWalletServiceServer) testEmbeddedByValue() {} @@ -2270,7 +2302,7 @@ type UnsafeWalletServiceServer interface { } func RegisterWalletServiceServer(s grpc.ServiceRegistrar, srv WalletServiceServer) { - // If the following call pancis, it indicates UnimplementedWalletServiceServer was + // If the following call panics, it indicates UnimplementedWalletServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -2982,6 +3014,24 @@ func _WalletService_SetResourceGroupStatus_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _WalletService_PinResourceGroupSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PinResourceGroupSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).PinResourceGroupSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_PinResourceGroupSnapshot_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).PinResourceGroupSnapshot(ctx, req.(*PinResourceGroupSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _WalletService_ListGiftConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListGiftConfigsRequest) if err := dec(in); err != nil { @@ -3180,6 +3230,24 @@ func _WalletService_GrantResourceGroup_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _WalletService_GrantPinnedResourceGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GrantPinnedResourceGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GrantPinnedResourceGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GrantPinnedResourceGroup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GrantPinnedResourceGroup(ctx, req.(*GrantPinnedResourceGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _WalletService_RevokeResourceGrant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RevokeResourceGrantRequest) if err := dec(in); err != nil { @@ -4675,6 +4743,10 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{ MethodName: "SetResourceGroupStatus", Handler: _WalletService_SetResourceGroupStatus_Handler, }, + { + MethodName: "PinResourceGroupSnapshot", + Handler: _WalletService_PinResourceGroupSnapshot_Handler, + }, { MethodName: "ListGiftConfigs", Handler: _WalletService_ListGiftConfigs_Handler, @@ -4719,6 +4791,10 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GrantResourceGroup", Handler: _WalletService_GrantResourceGroup_Handler, }, + { + MethodName: "GrantPinnedResourceGroup", + Handler: _WalletService_GrantPinnedResourceGroup_Handler, + }, { MethodName: "RevokeResourceGrant", Handler: _WalletService_RevokeResourceGrant_Handler, diff --git a/docker-compose.yml b/docker-compose.yml index 4386a9ef..226b584a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -99,8 +99,6 @@ services: container_name: wallet-service environment: TZ: UTC - volumes: - - ./.env:/app/.env:ro ports: - "13004:13004" - "13104:13104" diff --git a/docs/幸运礼物外接接口对接文档.md b/docs/幸运礼物外接接口对接文档.md new file mode 100644 index 00000000..cb6fa94e --- /dev/null +++ b/docs/幸运礼物外接接口对接文档.md @@ -0,0 +1,230 @@ +# 幸运礼物外接接口对接文档 + +> 文档版本:2026-07-15 +> 接入方式:服务端对服务端(Server-to-Server) +> 金额单位:对接 App 的金币最小整数单位 + +## 1. 接口用途 + +外部 App 在自己的账务系统完成幸运礼物扣费后,调用本接口获取一次最终抽奖结果。 + +平台负责: + +- 按 `app_code` 隔离规则、奖池、RTP 和抽奖流水。 +- 按 `app_code + request_id` 保证抽奖幂等。 +- 返回最终 `reward_amount` 和倍率。 + +对接 App 负责: + +- 调用前完成用户扣费。 +- 成功收到结果后,在自己的账务系统中向用户发放 `reward_amount`。 +- 对超时或网络失败使用原 `request_id` 重试,不得重新生成业务请求 ID。 + +HyApp 不会操作外部 App 的用户钱包。`reward_status=granted` 表示抽奖结果已经生成并交给调用方,不表示奖励已在外部 App 入账。 + +## 2. 接口地址 + +| 类型 | 地址 | +|---|---| +| Base URL | `https://lucky-api.global-interaction.com` | +| 送礼接口 | `POST https://lucky-api.global-interaction.com/api/v1/lucky-gifts/send` | +| 就绪检查 | `GET https://lucky-api.global-interaction.com/healthz/ready` | + +就绪检查: + +```text +GET https://lucky-api.global-interaction.com/healthz/ready +``` + +2026-07-15 实测就绪检查返回 HTTP 200,送礼请求可到达幸运礼物网关。 + +## 3. 调用前置条件 + +1. 向平台申请唯一 `app_code`,并加入幸运礼物网关白名单。 +2. 确认该 App 的幸运礼物规则已启用。 +3. 对接 App 必须先扣费,再调用抽奖接口。 +4. 本接口只允许对接 App 服务端调用,禁止将请求能力下发到 App 或 Web 客户端。 + +当前版本的 HTTP 入口使用 `app_code` 白名单,尚未启用 Authorization Token 或请求签名,因此必须仅由已开通的对接 App 服务端调用。 + +## 4. 发送幸运礼物 + +### 4.1 请求 + +```http +POST /api/v1/lucky-gifts/send HTTP/1.1 +Host: lucky-api.global-interaction.com +Content-Type: application/json +X-Request-Id: trace-20260715-000001 +``` + +`X-Request-Id` 为可选的链路追踪 ID。如果不传,平台会自动生成。它只用于日志排查,不是抽奖幂等键。 + +### 4.2 请求体 + +```json +{ + "app_code": "partner_app", + "request_id": "gift-order-20260715-000001", + "external_user_id": "user-10001", + "gift_count": 3, + "unit_amount": 100, + "currency": "COIN", + "metadata": { + "external_order_id": "order-1000001", + "gift_id": "lucky-rose", + "room_id": "room-20001" + } +} +``` + +### 4.3 字段说明 + +| 字段 | 类型 | 必填 | 约束 | 说明 | +|---|---|---:|---|---| +| `app_code` | string | 是 | 去除首尾空格后 1–32 字符 | 平台分配的 App 编码;按小写存储和校验。 | +| `request_id` | string | 是 | 去除首尾空格后 1–128 字符 | 对接 App 生成的业务幂等 ID;建议直接使用送礼订单号或 UUID。 | +| `external_user_id` | string | 是 | 去除首尾空格后 1–128 字符 | 用户在对接 App 中的稳定唯一 ID。 | +| `gift_count` | int64 | 是 | `> 0` | 本次已扣费的礼物数量。 | +| `unit_amount` | int64 | 是 | `> 0` | 单个礼物的金币整数价格。 | +| `currency` | string | 否 | 只支持 `COIN` | 缺省或空字符串时按 `COIN` 处理。 | +| `metadata` | object | 否 | JSON object | 对接方的展示或排查元数据;不参与金额、规则或幂等判定。 | + +服务端按下式计算本次金额: + +```text +total_amount = gift_count * unit_amount +``` + +请求体不得传入 `total_amount`、`pool_id` 或 `paid_at_ms`。奖池由平台规则选择,扣费完成时间由网关按 UTC 服务端时间写入。接口会拒绝所有未定义的顶层字段。 + +一个请求只返回一个聚合抽奖结果;`gift_count` 不会产生多个独立响应。 + +### 4.4 成功响应 + +HTTP Status:`200 OK` + +```json +{ + "code": 0, + "message": "ok", + "request_id": "trace-20260715-000001", + "data": { + "draw_id": "external_lucky_draw_xxxxxxxxxx", + "request_id": "gift-order-20260715-000001", + "app_code": "partner_app", + "external_user_id": "user-10001", + "gift_count": 3, + "unit_amount": 100, + "total_amount": 300, + "reward_amount": 600, + "multiplier_ppm": 2000000, + "reward_status": "granted", + "rule_version": 1, + "created_at_ms": 1784073600000 + } +} +``` + +### 4.5 响应字段 + +| 字段 | 类型 | 说明 | +|---|---|---| +| `code` | int | 业务结果码;`0` 表示请求成功。 | +| `message` | string | 结果说明。 | +| 外层 `request_id` | string | HTTP 链路追踪 ID,来自 `X-Request-Id` 或由平台生成。 | +| `data.draw_id` | string | 平台生成的唯一抽奖 ID,对账时使用。 | +| `data.request_id` | string | 请求体中的业务幂等 ID。 | +| `data.app_code` | string | 归一化后的 App 编码。 | +| `data.external_user_id` | string | 对接 App 的用户 ID。 | +| `data.gift_count` | int64 | 礼物数量。 | +| `data.unit_amount` | int64 | 单件礼物金币价格。 | +| `data.total_amount` | int64 | 服务端计算的已扣费总额。 | +| `data.reward_amount` | int64 | 对接 App 应向用户发放的金币整数金额;以该字段为最终结算依据。 | +| `data.multiplier_ppm` | int64 | 倍率 ppm;`1000000` 表示 1x,`2000000` 表示 2x。 | +| `data.reward_status` | string | 当前为 `granted`,表示抽奖已完成且结果已交给对接 App 处理。 | +| `data.rule_version` | int64 | 本次抽奖命中的规则版本。 | +| `data.created_at_ms` | int64 | 抽奖结果创建时间,Unix epoch milliseconds,UTC。 | + +未中奖时 `reward_amount` 和 `multiplier_ppm` 为 `0`。当前 JSON 序列化会省略数值为 `0` 的结果字段,对接方必须将缺失的 `reward_amount` 或 `multiplier_ppm` 按 `0` 处理,不得将字段缺失视为请求失败。 + +## 5. 幂等与重试 + +幂等键固定为: + +```text +app_code + request_id +``` + +- 首次请求成功后,平台保存抽奖结果。 +- 使用相同 `app_code + request_id` 重试时,直接返回首次结果,不会重新抽奖。 +- 同一 `request_id` 不得对应不同用户、数量或金额。平台在幂等命中时会返回首次结果,不会用新参数覆盖。 +- 超时、连接中断或 HTTP 5xx 时,使用原请求体和原 `request_id` 重试。 +- 客户端超时建议设置为大于网关内部 3 秒处理超时,并对重试使用有上限的退避。 + +如果多次重试后仍无法确认结果,请保留 `app_code`、`request_id`、外层 `request_id` 和扣费流水,由平台根据抽奖记录对账。 + +## 6. 错误响应 + +### 6.1 统一格式 + +```json +{ + "code": 40000, + "message": "request_id is required", + "request_id": "trace-20260715-000001" +} +``` + +### 6.2 错误码 + +| HTTP Status | `code` | 场景 | 对接方动作 | +|---:|---:|---|---| +| 400 | 40000 | JSON 无效、出现未定义字段、必填字段缺失、金额非正数或币种不支持 | 修正请求,不要原样重试。 | +| 403 | 40300 | `app_code` 未加入当前环境白名单 | 联系平台开通或检查环境。 | +| 404 | 无统一业务码 | 请求路径或 HTTP 方法错误 | 检查 Base URL、路径和请求方法。 | +| 500 | 50000 | 抽奖服务超时或内部处理失败 | 保持原 `request_id` 重试;不得重新扣费。 | + +业务成功必须同时满足 HTTP Status 为 `200` 且响应 `code` 为 `0`。 + +## 7. cURL 示例 + +```bash +curl --request POST \ + 'https://lucky-api.global-interaction.com/api/v1/lucky-gifts/send' \ + --header 'Content-Type: application/json' \ + --header 'X-Request-Id: trace-20260715-000001' \ + --data '{ + "app_code": "partner_app", + "request_id": "gift-order-20260715-000001", + "external_user_id": "user-10001", + "gift_count": 3, + "unit_amount": 100, + "currency": "COIN", + "metadata": { + "external_order_id": "order-1000001", + "gift_id": "lucky-rose", + "room_id": "room-20001" + } + }' +``` + +## 8. 标准处理流程 + +1. 对接 App 生成全局唯一的 `request_id`。 +2. 对接 App 在自有账务系统扣除 `gift_count * unit_amount`。 +3. 对接 App 调用幸运礼物接口。 +4. 平台按 `app_code + request_id` 创建或返回已有抽奖结果。 +5. 对接 App 在响应成功后按 `reward_amount` 入账,并保存 `draw_id`。 +6. 任何未知结果都使用原 `request_id` 重试;禁止重复扣费或重新生成抽奖业务号。 + +## 9. 联调检查清单 + +- [ ] `app_code` 已加入幸运礼物网关白名单。 +- [ ] 规则已启用,并确认金币单位一致。 +- [ ] 正常送礼可获得 HTTP 200 / `code=0`。 +- [ ] 重复发送相同 `request_id` 可获得相同 `draw_id` 和结果。 +- [ ] 模拟超时后只重试抽奖请求,不重复扣费。 +- [ ] 未中奖响应中缺失的数值字段可正确按 `0` 处理。 +- [ ] 奖励按 `reward_amount` 在外部 App 入账,并持久化 `draw_id`。 +- [ ] 上线前完成小额真实扣费、抽奖、返奖和幂等重试验收。 diff --git a/docs/新版VIP权限策略_Flutter客户端对接文档.md b/docs/新版VIP权限策略_Flutter客户端对接文档.md new file mode 100644 index 00000000..6ebc57ab --- /dev/null +++ b/docs/新版VIP权限策略_Flutter客户端对接文档.md @@ -0,0 +1,1052 @@ +# 新版 VIP 权限策略 Flutter 客户端对接文档 + +## 1. VIP 权限策略 + +### 1.1 权限来源 + +- VIP 等级只用于套餐名称、价格、有效期和等级展示。 +- Flutter 只使用 `GET /api/v1/vip/me` 返回的 `data.state.effective_benefits` 判断当前用户是否具有某项权益。 +- Flutter 不得使用 `VIP等级 >= N`、`unlock_level`、`app_code` 或本地权益表推导权限。 +- `/api/v1/vip/packages` 中的 `packages[].benefits` 是该套餐当前配置的完整权益集合,只用于套餐页和升级引导,不能作为用户已拥有权益。 +- 写操作最终以对应业务接口的服务端鉴权结果为准。Flutter 的权益判断只用于入口显隐、锁态和交互预判。 + +### 1.2 Flutter 权益状态 + +```dart +class VipEntitlementState { + final VipProgramConfig program; + final VipIdentity effectiveVip; + final String effectiveSource; // paid / trial / none + final Map benefitsByCode; + final VipUserSettings settings; + final int evaluatedAtMs; + + bool has(String benefitCode) { + return program.status == 'active' && + effectiveVip.active && + benefitsByCode[benefitCode]?.status == 'active'; + } + + bool allowsRoomEntryNotice() { + return has('room_entry_notice') && settings.roomEntryNoticeEnabled; + } + + bool allowsOnlineGlobalNotice() { + return has('online_global_notice') && + settings.onlineGlobalNoticeEnabled; + } +} +``` + +`benefitsByCode` 必须由 `state.effective_benefits` 转换。未知 `benefit_code` 保留在状态中但不自动开放功能,不得导致解析失败或页面崩溃。 + +### 1.3 权益刷新 + +| 场景 | Flutter 处理 | +|---|---| +| 登录成功、切换账号、切换 App | 清空原 VIP 状态,调用 `/vip/me` | +| App 冷启动、回到前台 | 调用 `/vip/me` 校准过期、体验卡回落和后台配置变更 | +| 进入 VIP 页面 | 并发调用 `/vip/packages` 和 `/vip/me` | +| 购买、佩戴体验卡、卸下体验卡成功 | 使用响应中的 `state` 原子替换本地状态 | +| 收到 `vip_notice` | 按 `event_id` 去重,再调用 `/vip/me` | +| `config_version` 不一致 | 用户权限以 `/vip/me.state` 为准,重新请求 `/vip/packages`,不得合并不同版本的权益数组 | +| VIP 到期倒计时结束 | 可更新页面显示,但执行功能前仍以服务端接口结果为准 | + +### 1.4 Fami 初始等级权益 + +下表只用于识别初始配置。Flutter 实际必须渲染 `/vip/packages` 返回的数据。 + +| 等级 | 本级初始新增权益 | +|---|---| +| VIP1 | `vip_badge_identity`、`vip_medal`、`avatar_frame`、`vip_title` | +| VIP2 | `chat_bubble`、`vip_gift`、`entry_effect`、`visitor_history` | +| VIP3 | `voice_wave`、`profile_card`、`custom_room_background`、`room_image_message` | +| VIP4 | `animated_avatar`、`animated_room_cover`、`mic_skin`、`room_border`、`vehicle` | +| VIP5 | `colored_room_name`、`colored_nickname`、`colored_id`、`gift_tray_skin` | +| VIP6 | `hide_profile_data`、`custom_avatar_frame`、`leaderboard_invisible`、`daily_coin_rebate` | +| VIP7 | `custom_profile_card`、`anonymous_profile_visit`、`custom_gift` | +| VIP8 | `room_entry_notice`、`custom_pretty_id`、`custom_vehicle` | +| VIP9 | `anti_kick`、`anti_mute`、`online_global_notice` | + +## 2. 通用协议 + +- API 前缀:`/api/v1`。 +- 请求头:`Authorization: Bearer `。 +- `app_code`、`user_id` 从登录态解析,Flutter 不传。 +- 时间字段统一使用 Unix epoch milliseconds。 +- 业务切日使用 UTC,Flutter 仅在展示时转换本地时间。 +- 成功响应统一格式: + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_xxx", + "data": {} +} +``` + +- `request_id` 只用于链路追踪。 +- 带 `command_id` 的接口,网络重试必须复用原 `command_id`;新的业务动作必须生成新值。 + +## 3. VIP 套餐 + +### 接口地址 + +`GET /api/v1/vip/packages` + +### 参数 + +无。 + +### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_packages", + "data": { + "current_vip": { + "level": 3, + "name": "VIP3", + "active": true, + "started_at_ms": 1780000000000, + "expires_at_ms": 1782592000000, + "program_type": "tiered_privilege_v1", + "config_version": 7 + }, + "packages": [ + { + "level": 4, + "name": "VIP4", + "status": "active", + "price_coin": 4000, + "duration_ms": 2592000000, + "reward_resource_group_id": 0, + "reward_items": [], + "can_purchase": true, + "sort_order": 40, + "recharge_gate_required": false, + "required_recharge_coin_amount": 0, + "user_recharge_coin_amount": 0, + "purchase_locked_reason": "", + "benefits": [ + { + "benefit_code": "custom_room_background", + "name": "自定义房间背景", + "benefit_type": "function", + "unlock_level": 3, + "status": "active", + "trial_enabled": true, + "resource_id": 0, + "resource_type": "", + "execution_scope": "room", + "auto_equip": false, + "sort_order": 110, + "metadata_json": "" + } + ], + "config_version": 7 + } + ], + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1", + "level_count": 9, + "same_level_expiry_policy": "extend_remaining", + "upgrade_expiry_policy": "replace_from_now", + "downgrade_purchase_policy": "reject", + "benefit_inheritance_policy": "target_only", + "grant_mode": "trial_card", + "trial_card_enabled": true, + "status": "active", + "config_version": 7 + }, + "state": { + "paid_vip": { + "level": 3, + "name": "VIP3", + "active": true, + "expires_at_ms": 1782592000000 + }, + "equipped_trial_card": null, + "effective_vip": { + "level": 3, + "name": "VIP3", + "active": true, + "expires_at_ms": 1782592000000 + }, + "effective_source": "paid", + "effective_benefits": [ + { + "benefit_code": "custom_room_background", + "status": "active" + } + ], + "evaluated_at_ms": 1780000000000, + "user_settings": { + "room_entry_notice_enabled": true, + "online_global_notice_enabled": true, + "updated_at_ms": 0 + } + } + } +} +``` + +## 4. 当前 VIP 权限状态 + +### 接口地址 + +`GET /api/v1/vip/me` + +### 参数 + +无。 + +### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_vip_me", + "data": { + "level": 8, + "name": "VIP8", + "active": true, + "started_at_ms": 1780100000000, + "expires_at_ms": 1782692000000, + "program_type": "tiered_privilege_v1", + "config_version": 7, + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1", + "level_count": 9, + "same_level_expiry_policy": "extend_remaining", + "upgrade_expiry_policy": "replace_from_now", + "downgrade_purchase_policy": "reject", + "benefit_inheritance_policy": "target_only", + "grant_mode": "trial_card", + "trial_card_enabled": true, + "status": "active", + "config_version": 7 + }, + "state": { + "paid_vip": { + "level": 3, + "name": "VIP3", + "active": true, + "started_at_ms": 1780000000000, + "expires_at_ms": 1782592000000, + "program_type": "tiered_privilege_v1", + "config_version": 7 + }, + "equipped_trial_card": { + "trial_card_id": "vip_trial_card_xxx", + "entitlement_id": "ent_xxx", + "resource_id": 108, + "user_id": 10001, + "level": 8, + "name": "VIP8", + "status": "active", + "equipped": true, + "duration_ms": 2592000000, + "effective_at_ms": 1780100000000, + "expires_at_ms": 1782692000000, + "remaining_duration_ms": 2591000000 + }, + "effective_vip": { + "level": 8, + "name": "VIP8", + "active": true, + "started_at_ms": 1780100000000, + "expires_at_ms": 1782692000000, + "program_type": "tiered_privilege_v1", + "config_version": 7 + }, + "effective_source": "trial", + "effective_benefits": [ + { + "benefit_code": "room_entry_notice", + "name": "进房高亮通知", + "benefit_type": "function", + "status": "active", + "trial_enabled": true, + "resource_id": 0, + "resource_type": "", + "execution_scope": "room", + "auto_equip": false, + "sort_order": 290, + "metadata_json": "" + } + ], + "evaluated_at_ms": 1780101000000, + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1", + "config_version": 7 + }, + "user_settings": { + "app_code": "fami", + "user_id": 10001, + "room_entry_notice_enabled": true, + "online_global_notice_enabled": true, + "updated_at_ms": 0 + } + } + } +} +``` + +- `effective_source`:`paid`、`trial`、`none`。 +- 当前展示身份只读 `state.effective_vip`。 +- 当前权限只读 `state.effective_benefits`。 +- `daily_coin_rebate` 不会因体验卡进入 `effective_benefits`。 + +## 5. 购买、续期、升级 + +### 接口地址 + +`POST /api/v1/vip/purchase` + +### 参数 + +```json +{ + "command_id": "vip_purchase_10001_4_1780100000000", + "level": 4 +} +``` + +| 字段 | 必填 | 说明 | +|---|---|---| +| `command_id` | 是 | 最长 128 字节,同一次购买重试必须复用 | +| `level` | 是 | 必须来自 `/vip/packages` | + +### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_purchase", + "data": { + "order_id": "vip_order_xxx", + "transaction_id": "tx_xxx", + "vip": { + "level": 4, + "name": "VIP4", + "active": true, + "started_at_ms": 1780100000000, + "expires_at_ms": 1782692000000, + "program_type": "tiered_privilege_v1", + "config_version": 7 + }, + "coin_spent": 4000, + "coin_balance_after": 6000, + "reward_items": [], + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1", + "upgrade_expiry_policy": "replace_from_now", + "config_version": 7 + }, + "state": { + "effective_source": "paid", + "paid_vip": { + "level": 4, + "name": "VIP4", + "active": true, + "expires_at_ms": 1782692000000 + }, + "equipped_trial_card": null, + "effective_vip": { + "level": 4, + "name": "VIP4", + "active": true, + "expires_at_ms": 1782692000000 + }, + "effective_benefits": [ + { + "benefit_code": "custom_room_background", + "status": "active" + } + ], + "evaluated_at_ms": 1780100000000 + } + } +} +``` + +- 同级购买:从原截止时间继续累加。 +- Fami 高等级购买:立即替换低等级,从购买时间重新计时,低等级剩余时间丢弃。 +- 低等级购买:服务端拒绝。 +- 购买时佩戴体验卡:付费 VIP 会更新,但 `effective_vip` 仍可能来自体验卡,必须使用响应 `state`。 + +## 6. VIP 体验卡 + +### 6.1 体验卡列表 + +#### 接口地址 + +`GET /api/v1/users/me/resources?resource_type=vip_trial_card` + +#### 参数 + +| 参数 | 位置 | 必填 | 值 | +|---|---|---|---| +| `resource_type` | query | 是 | `vip_trial_card` | + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_trial_cards", + "data": { + "items": [ + { + "entitlement_id": "ent_card_a", + "resource_id": 101, + "resource": { + "resource_id": 101, + "resource_code": "vip_trial_card_3", + "resource_type": "vip_trial_card", + "name": "VIP3体验卡", + "status": "active", + "asset_url": "", + "preview_url": "", + "animation_url": "", + "metadata_json": "{\"vip_level\":3}", + "sort_order": 30 + }, + "status": "active", + "quantity": 1, + "remaining_quantity": 1, + "effective_at_ms": 1780100000000, + "expires_at_ms": 1781309600000, + "source_grant_id": "grant_a", + "created_at_ms": 1780100000000, + "updated_at_ms": 1780100000000, + "equipped": false + } + ], + "total": 1 + } +} +``` + +### 6.2 佩戴体验卡 + +#### 接口地址 + +`POST /api/v1/vip/trial-cards/{entitlement_id}/equip` + +#### 参数 + +| 参数 | 位置 | 必填 | 说明 | +|---|---|---|---| +| `entitlement_id` | path | 是 | 使用体验卡列表中的实例 ID | + +无 body。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_trial_equip", + "data": { + "trial_card": { + "trial_card_id": "vip_trial_card_b", + "entitlement_id": "ent_card_b", + "resource_id": 102, + "user_id": 10001, + "level": 4, + "name": "VIP4", + "status": "active", + "equipped": true, + "duration_ms": 1728000000, + "effective_at_ms": 1780200000000, + "expires_at_ms": 1781928000000, + "remaining_duration_ms": 1700000000 + }, + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1", + "trial_card_enabled": true + }, + "state": { + "effective_source": "trial", + "effective_vip": { + "level": 4, + "name": "VIP4", + "active": true, + "expires_at_ms": 1781928000000 + }, + "effective_benefits": [] + }, + "server_time_ms": 1780228000000 + } +} +``` + +### 6.3 卸下体验卡 + +#### 接口地址 + +`DELETE /api/v1/vip/trial-cards/equipped` + +#### 参数 + +无。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_trial_unequip", + "data": { + "unequipped": true, + "program_config": { + "app_code": "fami", + "program_type": "tiered_privilege_v1" + }, + "state": { + "effective_source": "paid", + "paid_vip": { + "level": 3, + "name": "VIP3", + "active": true + }, + "equipped_trial_card": null, + "effective_vip": { + "level": 3, + "name": "VIP3", + "active": true + }, + "effective_benefits": [] + }, + "server_time_ms": 1780229000000 + } +} +``` + +- 体验卡可自由切换,不比较等级高低。 +- 切换和卸下不会暂停、延长或删除体验卡。 +- 每张卡的剩余时间按绝对 `expires_at_ms` 计算。 +- 佩戴和卸下成功后立即使用响应 `state` 替换本地 VIP 状态。 + +## 7. VIP 通知开关 + +### 7.1 查询开关 + +#### 接口地址 + +`GET /api/v1/vip/settings` + +#### 参数 + +无。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_settings_get", + "data": { + "settings": { + "app_code": "fami", + "user_id": 10001, + "room_entry_notice_enabled": true, + "online_global_notice_enabled": false, + "updated_at_ms": 1780300000000 + }, + "evaluated_at_ms": 1780300001000 + } +} +``` + +### 7.2 修改开关 + +#### 接口地址 + +`PATCH /api/v1/vip/settings` + +#### 参数 + +局部更新,至少传一个字段: + +```json +{ + "room_entry_notice_enabled": false, + "online_global_notice_enabled": true +} +``` + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_settings_patch", + "data": { + "settings": { + "app_code": "fami", + "user_id": 10001, + "room_entry_notice_enabled": false, + "online_global_notice_enabled": true, + "updated_at_ms": 1780300010000 + }, + "server_time_ms": 1780300010000 + } +} +``` + +## 8. 每日 VIP 金币返现 + +### 8.1 查询当前返现 + +#### 接口地址 + +`GET /api/v1/vip/coin-rebates/current` + +#### 参数 + +无。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_rebate_current", + "data": { + "found": true, + "rebate": { + "rebate_id": "vip_rebate_xxx", + "user_id": "10001", + "task_day": "2026-07-15", + "vip_level": 6, + "vip_name": "VIP6", + "coin_amount": 100, + "status": "claimable", + "available_at_ms": 1784073600000, + "expires_at_ms": 1784160000000, + "config_version": 8, + "claimed_at_ms": 0, + "wallet_transaction_id": "", + "created_at_ms": 1784073605000, + "updated_at_ms": 1784073605000 + }, + "server_time_ms": 1784073610000 + } +} +``` + +无资格时 `found=false`、`rebate=null`。 + +### 8.2 批量查询返现状态 + +#### 接口地址 + +`POST /api/v1/vip/coin-rebates/statuses` + +#### 参数 + +```json +{ + "rebate_ids": ["vip_rebate_xxx", "vip_rebate_yyy"], + "page": 1, + "page_size": 20 +} +``` + +- `rebate_ids` 最多 100 个。 +- 不传 `rebate_ids` 时按 `page/page_size` 查询历史。 +- `page_size` 最大 100。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_rebate_statuses", + "data": { + "rebates": [ + { + "rebate_id": "vip_rebate_xxx", + "task_day": "2026-07-15", + "vip_level": 6, + "vip_name": "VIP6", + "coin_amount": 100, + "status": "claimable", + "available_at_ms": 1784073600000, + "expires_at_ms": 1784160000000, + "claimed_at_ms": 0, + "wallet_transaction_id": "" + } + ], + "total": 1, + "server_time_ms": 1784073610000 + } +} +``` + +### 8.3 领取返现 + +#### 接口地址 + +`POST /api/v1/vip/coin-rebates/{rebate_id}/claim` + +#### 参数 + +| 参数 | 位置 | 必填 | 说明 | +|---|---|---|---| +| `rebate_id` | path | 是 | 从 current、statuses 或系统消息取得 | + +```json +{ + "command_id": "vip_rebate_claim_10001_20260715" +} +``` + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_rebate_claim", + "data": { + "rebate": { + "rebate_id": "vip_rebate_xxx", + "task_day": "2026-07-15", + "vip_level": 6, + "vip_name": "VIP6", + "coin_amount": 100, + "status": "claimed", + "claimed_at_ms": 1784073700000, + "wallet_transaction_id": "wallet_tx_xxx" + }, + "transaction_id": "wallet_tx_xxx", + "coin_balance": { + "asset_type": "COIN", + "available_amount": 20100, + "frozen_amount": 0, + "version": 18 + }, + "server_time_ms": 1784073700000 + } +} +``` + +## 9. 上线全服通知 + +### 接口地址 + +`POST /api/v1/vip/online-notice` + +### 参数 + +```json +{ + "command_id": "vip_online__2026-07-15" +} +``` + +- `command_id` 最长 128 字节。 +- 同一进程同一 UTC 日复用同一个 `command_id`。 +- `process_boot_id` 只保存在内存中,不写磁盘。 + +### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_online_notice", + "data": { + "event_id": "vip_online_notice:10001:sha256_digest", + "group_id": "hy_fami_bc_g_v2", + "status": "pending", + "created": true, + "evaluated_at_ms": 1784073610000 + } +} +``` + +- `status=pending` 表示事件已进入异步投递链路。 +- 幂等命中时 `created=false`,不是失败。 +- 同一进程每天触发一次;杀掉进程后新进程当天可以再次触发。 + +## 10. 进房 VIP 通知 + +### 接口地址 + +`POST /api/v1/rooms/join` + +### 参数 + +```json +{ + "room_id": "room_1001", + "command_id": "join_10001_room_1001_1784073600000", + "role": "audience", + "password": "", + "response_mode": "full" +} +``` + +### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_join", + "data": { + "result": { + "applied": true, + "room_version": 18, + "server_time_ms": 1784073600000 + }, + "room": {}, + "viewer": {}, + "seats": [], + "profiles": [], + "im": { + "group_id": "room_1001", + "need_join_group": true + }, + "effective_vip": { + "program_type": "tiered_privilege_v1", + "level": 8, + "name": "VIP8", + "room_entry_notice_enabled": true + }, + "server_time_ms": 1784073600000 + } +} +``` + +本人进房首屏使用 HTTP 返回的 `data.effective_vip`。其他用户的进房效果使用当前房间 IM 消息。 + +## 11. VIP 装扮资源 + +### 11.1 我的资源列表 + +#### 接口地址 + +`GET /api/v1/users/me/resources?resource_type={resource_type}` + +#### 参数 + +| 参数 | 位置 | 必填 | 说明 | +|---|---|---|---| +| `resource_type` | query | 否 | `avatar_frame`、`profile_card`、`vehicle`、`chat_bubble` 等资源类型 | + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_resources", + "data": { + "items": [ + { + "entitlement_id": "ent_xxx", + "resource_id": 108, + "resource": { + "resource_id": 108, + "resource_code": "frame_vip9", + "resource_type": "avatar_frame", + "name": "VIP头像框", + "status": "active", + "asset_url": "https://cdn.example/frame.png", + "preview_url": "https://cdn.example/frame-preview.png", + "animation_url": "https://cdn.example/frame.svga", + "metadata_json": "{}", + "sort_order": 10 + }, + "status": "active", + "expires_at_ms": 1786665600000, + "equipped": true + } + ], + "total": 1 + } +} +``` + +### 11.2 佩戴资源 + +#### 接口地址 + +`POST /api/v1/users/me/resources/{resource_id}/equip` + +#### 参数 + +| 参数 | 位置 | 必填 | 说明 | +|---|---|---|---| +| `resource_id` | path | 是 | 资源 ID | + +无 body。 + +### 11.3 卸下资源 + +#### 接口地址 + +`DELETE /api/v1/users/me/resources/{resource_type}/unequip` + +#### 参数 + +| 参数 | 位置 | 必填 | 说明 | +|---|---|---|---| +| `resource_type` | path | 是 | 资源类型 | + +无 body。 + +### 11.4 当前装扮 + +#### 接口地址 + +- `GET /api/v1/appearance` +- `GET /api/v1/users/by-id/{user_id}/appearance` + +#### 参数 + +第二个接口使用 path 参数 `user_id`。 + +#### 返回值 + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_appearance", + "data": { + "user_id": "10001", + "avatar_frame": {}, + "profile_card": {}, + "vehicle": {}, + "mic_seat_animation": {}, + "equipped_badges": [], + "badges": [], + "resources": [], + "server_time_ms": 1784073600000 + } +} +``` + +## 12. 相关 IM + +### 12.1 VIP 激活通知 + +通道:腾讯云 IM C2C `TIMCustomElem`。 + +```json +{ + "Ext": "vip_notice", + "Desc": "VipActivated", + "Data": "{\"event_type\":\"VipActivated\",\"event_id\":\"evt_xxx\",\"app_code\":\"fami\",\"transaction_id\":\"tx_xxx\",\"command_id\":\"vip_purchase_10001_4_1780100000000\",\"user_id\":\"10001\",\"source\":\"vip_purchase\",\"action\":\"upgrade\",\"previous_level\":3,\"previous_expires_at_ms\":1781396000000,\"level\":4,\"vip_name\":\"VIP4\",\"started_at_ms\":1780100000000,\"expires_at_ms\":1782692000000,\"program_type\":\"tiered_privilege_v1\",\"config_version\":7,\"expiry_policy\":\"replace_from_now\",\"created_at_ms\":1780100000000}" +} +``` + +Flutter 按 `event_id` 去重,然后调用 `GET /api/v1/vip/me`,不能直接使用 IM 内容生成权限。 + +### 12.2 进房通知 + +通道:当前房间腾讯云 IM 群 `TIMCustomElem`,不发送到全服群。 + +```json +{ + "Ext": "room_system_message", + "Desc": "room_user_joined", + "Data": "{\"event_id\":\"evt_join_xxx\",\"room_id\":\"room_1001\",\"event_type\":\"room_user_joined\",\"actor_user_id\":10001,\"target_user_id\":10001,\"room_version\":18,\"role\":\"audience\",\"nickname\":\"Nina\",\"avatar\":\"https://cdn.example/avatar.png\",\"display_user_id\":\"100042\",\"pretty_display_user_id\":\"888042\",\"vip_program_type\":\"tiered_privilege_v1\",\"effective_vip_level\":\"8\",\"effective_vip_name\":\"VIP8\",\"room_entry_notice_enabled\":\"true\"}" +} +``` + +仅当 `event_type=room_user_joined` 且 `room_entry_notice_enabled=true` 时展示 VIP 进房效果。使用 `event_id` 去重。 + +### 12.3 上线全服通知 + +通道:全局播报群 `TIMCustomElem`。 + +| 字段 | 值 | +|---|---| +| `Ext` | `im_broadcast` | +| `Desc` | `vip_online_notice` | +| `Data` | 下方 JSON 字符串 | +| `CloudCustomData` | 与 `Data` 相同 | + +```json +{ + "event_id": "vip_online_notice:10001:sha256_digest", + "broadcast_type": "vip_online_notice", + "scope": "global", + "app_code": "fami", + "user_id": 10001, + "sender_user_id": 10001, + "nickname": "Nina", + "avatar": "https://cdn.example/avatar.png", + "avatar_frame_url": "https://cdn.example/frame.png", + "avatar_frame_resource_id": 108, + "avatar_frame_code": "frame_vip9", + "avatar_frame_asset_url": "https://cdn.example/frame.png", + "avatar_frame_preview_url": "https://cdn.example/frame-preview.png", + "avatar_frame_animation_url": "https://cdn.example/frame-animation.svga", + "display_user_id": "888042", + "raw_display_user_id": "100042", + "pretty_display_user_id": "888042", + "vip_program_type": "tiered_privilege_v1", + "vip_level": 9, + "vip_name": "VIP9", + "message": "欢迎进入Fami,祝你有美好的一天", + "action": { + "type": "none" + }, + "sent_at_ms": 1784073610500 +} +``` + +Flutter 使用 `event_id` 去重,直接使用事件内的用户、VIP 和头像框快照渲染。 + +### 12.4 金币返现系统消息 + +接口:`GET /api/v1/messages?section=system&page_size=20&page_token=`。 + +```json +{ + "message_id": "msg_vip_rebate_xxx", + "title": "VIP金币返现", + "summary": "尊敬的VIP用户,平台今日返现100金币,请及时领取。", + "body": "尊敬的VIP用户,平台今日返现100金币,请及时领取。", + "icon_url": "", + "image_url": "", + "action_type": "vip_coin_rebate_claim", + "action_param": "{\"coin_amount\":100,\"expires_at_ms\":1784160000000,\"rebate_id\":\"vip_rebate_xxx\",\"task_day\":\"2026-07-15\"}", + "read": false, + "sent_at_ms": 1784073600000 +} +``` + +Flutter 将 `action_param` 解析为 JSON,打开页面后调用 `/vip/coin-rebates/statuses` 获取真实领取状态。 + +### 12.5 IM 登录与全局群 + +接口:`GET /api/v1/im/usersig`。 + +Flutter 使用返回的 UserSig 登录腾讯云 IM,并加入响应 `join_groups` 中 `type=global_broadcast` 的群组后,再消费 `vip_online_notice`。 diff --git a/pkg/activitymq/messages.go b/pkg/activitymq/messages.go new file mode 100644 index 00000000..cc7c015b --- /dev/null +++ b/pkg/activitymq/messages.go @@ -0,0 +1,181 @@ +// Package activitymq defines the RocketMQ fact contract owned by activity-service. +package activitymq + +import ( + "encoding/json" + "errors" + "fmt" + "sort" + "strings" + "time" +) + +const ( + MessageTypeActivityTemplateFact = "activity_template_fact" + TagActivityTemplateFact = MessageTypeActivityTemplateFact + + EventTypeGiftScored = "GiftScored" + EventTypeTaskProgressed = "TaskProgressed" + EventTypeTaskClaimed = "TaskClaimed" + EventTypeActivityVisited = "ActivityVisited" +) + +// ActivityTemplateFactMessage is a self-contained immutable activity fact. Every +// dimension needed by statistics is carried in the message so consumers never +// need to read activity-service owner tables. +type ActivityTemplateFactMessage struct { + MessageType string `json:"message_type"` + AppCode string `json:"app_code"` + EventID string `json:"event_id"` + EventType string `json:"event_type"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + PublishedVersion int64 `json:"published_version"` + StatDay string `json:"stat_day"` + RegionID int64 `json:"region_id"` + UserID int64 `json:"user_id"` + GiftID string `json:"gift_id"` + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + GiftCountDelta int64 `json:"gift_count_delta"` + CoinAmountDelta int64 `json:"coin_amount_delta"` + ProgressDelta int64 `json:"progress_delta"` + CompletedDelta int64 `json:"completed_delta"` + ClaimedDelta int64 `json:"claimed_delta"` + VisitCountDelta int64 `json:"visit_count_delta"` + OccurredAtMS int64 `json:"occurred_at_ms"` + AttributionAtMS int64 `json:"attribution_at_ms"` +} + +// EventTypeTag accepts only committed owner facts. Keeping the allow-list here +// prevents a malformed database value from becoming a broker routing expression. +func EventTypeTag(eventType string) (string, error) { + switch tag := strings.TrimSpace(eventType); tag { + case EventTypeGiftScored, EventTypeTaskProgressed, EventTypeTaskClaimed, EventTypeActivityVisited: + return tag, nil + case "": + return "", errors.New("activity event_type tag is required") + default: + return "", fmt.Errorf("unsupported activity event_type tag %q", eventType) + } +} + +// LegacyCompatibleTagExpression keeps messages published before typed tags were +// enabled consumable while making all new deliveries broker-filtered and explicit. +func LegacyCompatibleTagExpression(eventTypes ...string) (string, error) { + tags := make([]string, 0, len(eventTypes)) + seen := make(map[string]struct{}, len(eventTypes)) + for _, eventType := range eventTypes { + tag, err := EventTypeTag(eventType) + if err != nil { + return "", err + } + if _, exists := seen[tag]; exists { + continue + } + seen[tag] = struct{}{} + tags = append(tags, tag) + } + if len(tags) == 0 { + return "", errors.New("at least one typed activity event tag is required") + } + sort.Strings(tags) + return TagActivityTemplateFact + " || " + strings.Join(tags, " || "), nil +} + +// EncodeActivityTemplateFactMessage normalizes the wrapper discriminator and +// rejects poison facts before they can leave the transactional outbox relay. +func EncodeActivityTemplateFactMessage(message ActivityTemplateFactMessage) ([]byte, error) { + message.MessageType = MessageTypeActivityTemplateFact + message = normalizeActivityTemplateFact(message) + if err := validateActivityTemplateFact(message); err != nil { + return nil, err + } + return json.Marshal(message) +} + +// DecodeActivityTemplateFactMessage applies the same validation at every ingest +// boundary, including replay tooling that may bypass the original producer. +func DecodeActivityTemplateFactMessage(body []byte) (ActivityTemplateFactMessage, error) { + var message ActivityTemplateFactMessage + if err := json.Unmarshal(body, &message); err != nil { + return ActivityTemplateFactMessage{}, err + } + if message.MessageType != MessageTypeActivityTemplateFact { + return ActivityTemplateFactMessage{}, errors.New("unexpected activity template fact message_type") + } + message = normalizeActivityTemplateFact(message) + if err := validateActivityTemplateFact(message); err != nil { + return ActivityTemplateFactMessage{}, err + } + return message, nil +} + +func normalizeActivityTemplateFact(message ActivityTemplateFactMessage) ActivityTemplateFactMessage { + message.AppCode = strings.TrimSpace(message.AppCode) + message.EventID = strings.TrimSpace(message.EventID) + message.EventType = strings.TrimSpace(message.EventType) + message.TemplateID = strings.TrimSpace(message.TemplateID) + message.TemplateCode = strings.TrimSpace(message.TemplateCode) + message.StatDay = strings.TrimSpace(message.StatDay) + message.GiftID = strings.TrimSpace(message.GiftID) + message.TaskKey = strings.TrimSpace(message.TaskKey) + message.TaskType = strings.TrimSpace(message.TaskType) + if message.AttributionAtMS <= 0 { + message.AttributionAtMS = message.OccurredAtMS + } + return message +} + +func validateActivityTemplateFact(message ActivityTemplateFactMessage) error { + if message.AppCode == "" || + message.EventID == "" || + message.TemplateID == "" || + message.TemplateCode == "" || + message.PublishedVersion <= 0 || + message.RegionID < 0 || + message.UserID <= 0 || + message.OccurredAtMS <= 0 { + return errors.New("activity template fact is incomplete") + } + if _, err := EventTypeTag(message.EventType); err != nil { + return err + } + if message.GiftCountDelta < 0 || message.CoinAmountDelta < 0 || + message.ProgressDelta < 0 || message.CompletedDelta < 0 || message.ClaimedDelta < 0 || message.VisitCountDelta < 0 { + return errors.New("activity template fact deltas cannot be negative") + } + parsedDay, err := time.Parse("2006-01-02", message.StatDay) + if err != nil || parsedDay.Format("2006-01-02") != message.StatDay { + return errors.New("activity template fact stat_day must be a UTC YYYY-MM-DD date") + } + // Task claims can be executed days after completion. stat_day remains the task earning day while + // occurred_at_ms is the truthful wallet-grant time; attribution_at_ms proves the owner-selected bucket. + daySourceMS := message.OccurredAtMS + if message.EventType == EventTypeTaskClaimed { + daySourceMS = message.AttributionAtMS + } + if time.UnixMilli(daySourceMS).UTC().Format("2006-01-02") != message.StatDay { + return errors.New("activity template fact stat_day does not match attribution time") + } + switch message.EventType { + case EventTypeGiftScored: + if message.GiftID == "" || message.GiftCountDelta <= 0 { + return errors.New("GiftScored requires gift_id and positive gift_count_delta") + } + case EventTypeTaskProgressed: + if message.TaskKey == "" || message.TaskType == "" || + (message.ProgressDelta == 0 && message.CompletedDelta == 0) { + return errors.New("TaskProgressed requires task identity and a progress or completed delta") + } + case EventTypeTaskClaimed: + if message.TaskKey == "" || message.TaskType == "" || message.ClaimedDelta <= 0 { + return errors.New("TaskClaimed requires task identity and positive claimed_delta") + } + case EventTypeActivityVisited: + if message.VisitCountDelta <= 0 { + return errors.New("ActivityVisited requires positive visit_count_delta") + } + } + return nil +} diff --git a/pkg/activitymq/messages_test.go b/pkg/activitymq/messages_test.go new file mode 100644 index 00000000..65627b83 --- /dev/null +++ b/pkg/activitymq/messages_test.go @@ -0,0 +1,104 @@ +package activitymq + +import ( + "strings" + "testing" + "time" +) + +func TestActivityTemplateFactRoundTrip(t *testing.T) { + occurredAt := time.Date(2026, time.July, 14, 8, 30, 0, 0, time.UTC).UnixMilli() + want := ActivityTemplateFactMessage{ + AppCode: "lalu", EventID: "activity:g1", EventType: EventTypeGiftScored, + TemplateID: "template-1", TemplateCode: "summer_rank", PublishedVersion: 3, + StatDay: "2026-07-14", RegionID: 9, UserID: 1001, GiftID: "rose", + GiftCountDelta: 2, CoinAmountDelta: 200, OccurredAtMS: occurredAt, + } + body, err := EncodeActivityTemplateFactMessage(want) + if err != nil { + t.Fatalf("encode: %v", err) + } + got, err := DecodeActivityTemplateFactMessage(body) + if err != nil { + t.Fatalf("decode: %v", err) + } + if got.MessageType != MessageTypeActivityTemplateFact || got.EventID != want.EventID || got.CoinAmountDelta != 200 { + t.Fatalf("unexpected round trip: %+v", got) + } +} + +func TestActivityTemplateFactRejectsMismatchedDayAndIncompleteDimensions(t *testing.T) { + base := ActivityTemplateFactMessage{ + AppCode: "lalu", EventID: "activity:t1", EventType: EventTypeTaskProgressed, + TemplateID: "template-1", TemplateCode: "summer_rank", PublishedVersion: 1, + StatDay: "2026-07-13", UserID: 1001, TaskKey: "send_gift", TaskType: "gift", + ProgressDelta: 1, OccurredAtMS: time.Date(2026, time.July, 14, 0, 0, 0, 0, time.UTC).UnixMilli(), + } + if _, err := EncodeActivityTemplateFactMessage(base); err == nil || !strings.Contains(err.Error(), "does not match") { + t.Fatalf("expected stat day mismatch, got %v", err) + } + base.StatDay = "2026-07-14" + base.TaskKey = "" + if _, err := EncodeActivityTemplateFactMessage(base); err == nil { + t.Fatal("expected incomplete task identity rejection") + } +} + +func TestTaskClaimedUsesImmutableEarningAttributionDay(t *testing.T) { + earningAt := time.Date(2026, time.July, 14, 23, 50, 0, 0, time.UTC).UnixMilli() + claimedAt := time.Date(2026, time.July, 17, 9, 15, 0, 0, time.UTC).UnixMilli() + want := ActivityTemplateFactMessage{ + AppCode: "lalu", EventID: "activity:claim:delayed", EventType: EventTypeTaskClaimed, + TemplateID: "template-1", TemplateCode: "summer_rank", PublishedVersion: 3, + StatDay: "2026-07-14", RegionID: 9, UserID: 1001, TaskKey: "send_gift", TaskType: "gift", + ClaimedDelta: 1, OccurredAtMS: claimedAt, AttributionAtMS: earningAt, + } + body, err := EncodeActivityTemplateFactMessage(want) + if err != nil { + t.Fatalf("encode delayed task claim: %v", err) + } + got, err := DecodeActivityTemplateFactMessage(body) + if err != nil { + t.Fatalf("decode delayed task claim: %v", err) + } + if got.StatDay != "2026-07-14" || got.OccurredAtMS != claimedAt || got.AttributionAtMS != earningAt { + t.Fatalf("task claim attribution changed: %+v", got) + } + + // A claim cannot relabel its earning day independently from the persisted + // attribution timestamp, otherwise retry time or a moved user region could + // rewrite already-earned statistics. + want.AttributionAtMS = time.Date(2026, time.July, 15, 0, 0, 0, 0, time.UTC).UnixMilli() + if _, err := EncodeActivityTemplateFactMessage(want); err == nil || !strings.Contains(err.Error(), "attribution") { + t.Fatalf("expected attribution mismatch rejection, got %v", err) + } +} + +func TestActivityVisitedRequiresPositiveVisitDelta(t *testing.T) { + visitedAt := time.Date(2026, time.July, 14, 8, 30, 0, 0, time.UTC).UnixMilli() + fact := ActivityTemplateFactMessage{ + AppCode: "lalu", EventID: "activity:visit:1", EventType: EventTypeActivityVisited, + TemplateID: "template-1", TemplateCode: "summer_rank", PublishedVersion: 3, + StatDay: "2026-07-14", RegionID: 9, UserID: 1001, OccurredAtMS: visitedAt, + } + if _, err := EncodeActivityTemplateFactMessage(fact); err == nil { + t.Fatal("expected zero visit delta rejection") + } + fact.VisitCountDelta = 1 + if _, err := EncodeActivityTemplateFactMessage(fact); err != nil { + t.Fatalf("encode activity visit: %v", err) + } +} + +func TestActivityTemplateFactTagExpressionIsSafeAndDeterministic(t *testing.T) { + expression, err := LegacyCompatibleTagExpression(EventTypeTaskClaimed, EventTypeGiftScored, EventTypeTaskClaimed) + if err != nil { + t.Fatalf("expression: %v", err) + } + if expression != "activity_template_fact || GiftScored || TaskClaimed" { + t.Fatalf("unexpected expression: %s", expression) + } + if _, err := EventTypeTag("GiftScored || *"); err == nil { + t.Fatal("expected unsafe tag rejection") + } +} diff --git a/scripts/apply-local-rocketmq-topics.sh b/scripts/apply-local-rocketmq-topics.sh index 07050dbe..251e896c 100755 --- a/scripts/apply-local-rocketmq-topics.sh +++ b/scripts/apply-local-rocketmq-topics.sh @@ -48,6 +48,7 @@ TOPICS=( "hyapp_room_rocket_launch" "hyapp_user_outbox" "hyapp_message_action_outbox" + "hyapp_activity_outbox" "hyapp_game_outbox" ) diff --git a/scripts/prepare-local-mysql-initdb.sh b/scripts/prepare-local-mysql-initdb.sh index 5a25d665..3172e1be 100755 --- a/scripts/prepare-local-mysql-initdb.sh +++ b/scripts/prepare-local-mysql-initdb.sh @@ -20,6 +20,29 @@ OPTIONAL_SQL_FILES=( mkdir -p "${LOCAL_INITDB_DIR}" +append_current_repo_grants() { + local target_file="$1" + cat >> "${target_file}" <<'EOF' + +-- Local bootstrap follows the databases owned by this repository. The optional +-- deploy-platform grants can lag a newly added service or be absent in a lightweight +-- checkout; every current owner must still be able to start with the shared local user. +CREATE USER IF NOT EXISTS 'hyapp'@'%' IDENTIFIED BY 'hyapp'; +GRANT ALL PRIVILEGES ON hyapp_room.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_user.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_wallet.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_activity.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_lucky_gift.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_cron.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_game.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_robot.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_notice.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_statistics.* TO 'hyapp'@'%'; +GRANT ALL PRIVILEGES ON hyapp_admin.* TO 'hyapp'@'%'; +FLUSH PRIVILEGES; +EOF +} + for sql_name in "${OPTIONAL_SQL_FILES[@]}"; do source_file="${DEPLOY_PLATFORM_ROOT}/deploy/mysql/initdb/${sql_name}" target_file="${LOCAL_INITDB_DIR}/${sql_name}" @@ -27,24 +50,22 @@ for sql_name in "${OPTIONAL_SQL_FILES[@]}"; do if [[ -f "${source_file}" ]]; then cp "${source_file}" "${target_file}" if [[ "${sql_name}" == "999_local_grants.sql" ]]; then - # hyapp-server 新增 owner 库时,deploy-platform 的本地授权文件可能还没同步。 - # 本地启动必须以当前仓库服务清单为准,否则新服务库已经创建但 hyapp 用户无法连接。 - cat >> "${target_file}" <<'EOF' -GRANT ALL PRIVILEGES ON hyapp_lucky_gift.* TO 'hyapp'@'%'; -FLUSH PRIVILEGES; -EOF + append_current_repo_grants "${target_file}" fi printf 'prepared optional mysql init file: %s\n' "${source_file}" continue fi printf -- '-- optional mysql init file is absent locally: %s\n' "${source_file}" > "${target_file}" - if [[ "${sql_name}" == "999_local_grants.sql" ]]; then + if [[ "${sql_name}" == "006_admin_database.sql" ]]; then + # server/admin owns its migrations but requires the database itself before the + # process can connect and run them. Keep the fallback minimal and idempotent. cat >> "${target_file}" <<'EOF' -CREATE USER IF NOT EXISTS 'hyapp'@'%' IDENTIFIED BY 'hyapp'; -GRANT ALL PRIVILEGES ON hyapp_lucky_gift.* TO 'hyapp'@'%'; -FLUSH PRIVILEGES; +CREATE DATABASE IF NOT EXISTS hyapp_admin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; EOF fi + if [[ "${sql_name}" == "999_local_grants.sql" ]]; then + append_current_repo_grants "${target_file}" + fi printf 'prepared empty optional mysql init file: %s\n' "${source_file}" done diff --git a/server/admin/cmd/server/main.go b/server/admin/cmd/server/main.go index ccf1ebab..5902ca64 100644 --- a/server/admin/cmd/server/main.go +++ b/server/admin/cmd/server/main.go @@ -23,11 +23,13 @@ import ( "hyapp-admin-server/internal/integration/luckygiftadmin" "hyapp-admin-server/internal/integration/robotclient" "hyapp-admin-server/internal/integration/roomclient" + "hyapp-admin-server/internal/integration/statisticsclient" "hyapp-admin-server/internal/integration/userclient" "hyapp-admin-server/internal/integration/walletclient" jobrunner "hyapp-admin-server/internal/job" "hyapp-admin-server/internal/migration" achievementconfigmodule "hyapp-admin-server/internal/modules/achievementconfig" + activitytemplatemodule "hyapp-admin-server/internal/modules/activitytemplate" adminusermodule "hyapp-admin-server/internal/modules/adminuser" agencyopeningmodule "hyapp-admin-server/internal/modules/agencyopening" appconfigmodule "hyapp-admin-server/internal/modules/appconfig" @@ -351,10 +353,14 @@ func main() { ) luckyGiftHandler := luckygiftmodule.New(luckygiftadmin.NewGRPC(luckyGiftConn), cfg.LuckyGiftService.RequestTimeout, auditHandler) handlers := router.Handlers{ - Audit: auditHandler, - Auth: authmodule.New(store, auth, auditHandler, cfg), - AdminUser: adminusermodule.New(store, cfg, auditHandler), - AgencyOpening: agencyopeningmodule.New(activityclient.NewGRPC(activityConn), auditHandler), + Audit: auditHandler, + Auth: authmodule.New(store, auth, auditHandler, cfg), + AdminUser: adminusermodule.New(store, cfg, auditHandler), + AgencyOpening: agencyopeningmodule.New(activityclient.NewGRPC(activityConn), auditHandler), + ActivityTemplate: activitytemplatemodule.New( + activityclient.NewGRPC(activityConn), auditHandler, + statisticsclient.NewHTTP(cfg.StatisticsService.BaseURL, cfg.StatisticsService.RequestTimeout), + ).BindUserBatchGetter(userclient.NewGRPC(userConn)), AchievementConfig: achievementconfigmodule.New(activityclient.NewGRPC(activityConn), auditHandler), AppConfig: appconfigmodule.New(store, auditHandler), AppRegistry: appregistrymodule.New(userDB, store), diff --git a/server/admin/internal/integration/activityclient/client.go b/server/admin/internal/integration/activityclient/client.go index b02ff909..3ae25332 100644 --- a/server/admin/internal/integration/activityclient/client.go +++ b/server/admin/internal/integration/activityclient/client.go @@ -8,7 +8,7 @@ import ( "google.golang.org/grpc" ) -// Client 是 admin-server 访问 activity-service 任务配置能力的最小 gRPC 依赖。 +// Client 是 admin-server 访问 activity-service 后台配置能力的 gRPC 边界。 type Client interface { ListTaskDefinitions(ctx context.Context, req *activityv1.ListTaskDefinitionsRequest) (*activityv1.ListTaskDefinitionsResponse, error) UpsertTaskDefinition(ctx context.Context, req *activityv1.UpsertTaskDefinitionRequest) (*activityv1.UpsertTaskDefinitionResponse, error) @@ -51,6 +51,20 @@ type Client interface { SetAgencyOpeningCycleStatus(ctx context.Context, req *activityv1.SetAgencyOpeningCycleStatusRequest) (*activityv1.SetAgencyOpeningCycleStatusResponse, error) ListAgencyOpeningApplications(ctx context.Context, req *activityv1.ListAgencyOpeningApplicationsRequest) (*activityv1.ListAgencyOpeningApplicationsResponse, error) ReviewAgencyOpeningApplication(ctx context.Context, req *activityv1.ReviewAgencyOpeningApplicationRequest) (*activityv1.ReviewAgencyOpeningApplicationResponse, error) + ListActivityTemplates(ctx context.Context, req *activityv1.ListActivityTemplatesRequest) (*activityv1.ListActivityTemplatesResponse, error) + CreateActivityTemplate(ctx context.Context, req *activityv1.CreateActivityTemplateRequest) (*activityv1.CreateActivityTemplateResponse, error) + GetActivityTemplate(ctx context.Context, req *activityv1.GetActivityTemplateRequest) (*activityv1.GetActivityTemplateResponse, error) + UpdateActivityTemplate(ctx context.Context, req *activityv1.UpdateActivityTemplateRequest) (*activityv1.UpdateActivityTemplateResponse, error) + SetActivityTemplateStatus(ctx context.Context, req *activityv1.SetActivityTemplateStatusRequest) (*activityv1.SetActivityTemplateStatusResponse, error) + DeleteActivityTemplate(ctx context.Context, req *activityv1.DeleteActivityTemplateRequest) (*activityv1.DeleteActivityTemplateResponse, error) + ListActivityTemplateVersions(ctx context.Context, req *activityv1.ListActivityTemplateVersionsRequest) (*activityv1.ListActivityTemplateVersionsResponse, error) + CloneActivityTemplate(ctx context.Context, req *activityv1.CloneActivityTemplateRequest) (*activityv1.CloneActivityTemplateResponse, error) + ValidateActivityTemplate(ctx context.Context, req *activityv1.ValidateActivityTemplateRequest) (*activityv1.ValidateActivityTemplateResponse, error) + ListActivityTemplateLeaderboard(ctx context.Context, req *activityv1.AdminListActivityTemplateLeaderboardRequest) (*activityv1.AdminListActivityTemplateLeaderboardResponse, error) + ListActivityTemplateRewardJobs(ctx context.Context, req *activityv1.ListActivityTemplateRewardJobsRequest) (*activityv1.ListActivityTemplateRewardJobsResponse, error) + RetryActivityTemplateRewardJob(ctx context.Context, req *activityv1.RetryActivityTemplateRewardJobRequest) (*activityv1.RetryActivityTemplateRewardJobResponse, error) + ListActivityTemplateTaskClaims(ctx context.Context, req *activityv1.ListActivityTemplateTaskClaimsRequest) (*activityv1.ListActivityTemplateTaskClaimsResponse, error) + RetryActivityTemplateTaskClaim(ctx context.Context, req *activityv1.RetryActivityTemplateTaskClaimRequest) (*activityv1.RetryActivityTemplateTaskClaimResponse, error) GetCPWeeklyRankConfig(ctx context.Context, req *activityv1.GetCPWeeklyRankConfigRequest) (*activityv1.GetCPWeeklyRankConfigResponse, error) UpdateCPWeeklyRankConfig(ctx context.Context, req *activityv1.UpdateCPWeeklyRankConfigRequest) (*activityv1.UpdateCPWeeklyRankConfigResponse, error) ListCPWeeklyRankSettlements(ctx context.Context, req *activityv1.ListCPWeeklyRankSettlementsRequest) (*activityv1.ListCPWeeklyRankSettlementsResponse, error) @@ -80,6 +94,7 @@ type GRPCClient struct { roomTurnoverRewardClient activityv1.AdminRoomTurnoverRewardServiceClient weeklyStarClient activityv1.AdminWeeklyStarServiceClient agencyOpeningClient activityv1.AdminAgencyOpeningServiceClient + activityTemplateClient activityv1.AdminActivityTemplateServiceClient cpWeeklyRankClient activityv1.AdminCPWeeklyRankServiceClient wheelClient activityv1.AdminWheelServiceClient broadcastClient activityv1.BroadcastServiceClient @@ -100,6 +115,7 @@ func NewGRPC(conn grpc.ClientConnInterface) *GRPCClient { roomTurnoverRewardClient: activityv1.NewAdminRoomTurnoverRewardServiceClient(conn), weeklyStarClient: activityv1.NewAdminWeeklyStarServiceClient(conn), agencyOpeningClient: activityv1.NewAdminAgencyOpeningServiceClient(conn), + activityTemplateClient: activityv1.NewAdminActivityTemplateServiceClient(conn), cpWeeklyRankClient: activityv1.NewAdminCPWeeklyRankServiceClient(conn), wheelClient: activityv1.NewAdminWheelServiceClient(conn), broadcastClient: activityv1.NewBroadcastServiceClient(conn), @@ -273,6 +289,62 @@ func (c *GRPCClient) ReviewAgencyOpeningApplication(ctx context.Context, req *ac return c.agencyOpeningClient.ReviewAgencyOpeningApplication(ctx, req) } +func (c *GRPCClient) ListActivityTemplates(ctx context.Context, req *activityv1.ListActivityTemplatesRequest) (*activityv1.ListActivityTemplatesResponse, error) { + return c.activityTemplateClient.ListActivityTemplates(ctx, req) +} + +func (c *GRPCClient) CreateActivityTemplate(ctx context.Context, req *activityv1.CreateActivityTemplateRequest) (*activityv1.CreateActivityTemplateResponse, error) { + return c.activityTemplateClient.CreateActivityTemplate(ctx, req) +} + +func (c *GRPCClient) GetActivityTemplate(ctx context.Context, req *activityv1.GetActivityTemplateRequest) (*activityv1.GetActivityTemplateResponse, error) { + return c.activityTemplateClient.GetActivityTemplate(ctx, req) +} + +func (c *GRPCClient) UpdateActivityTemplate(ctx context.Context, req *activityv1.UpdateActivityTemplateRequest) (*activityv1.UpdateActivityTemplateResponse, error) { + return c.activityTemplateClient.UpdateActivityTemplate(ctx, req) +} + +func (c *GRPCClient) SetActivityTemplateStatus(ctx context.Context, req *activityv1.SetActivityTemplateStatusRequest) (*activityv1.SetActivityTemplateStatusResponse, error) { + return c.activityTemplateClient.SetActivityTemplateStatus(ctx, req) +} + +func (c *GRPCClient) DeleteActivityTemplate(ctx context.Context, req *activityv1.DeleteActivityTemplateRequest) (*activityv1.DeleteActivityTemplateResponse, error) { + return c.activityTemplateClient.DeleteActivityTemplate(ctx, req) +} + +func (c *GRPCClient) ListActivityTemplateVersions(ctx context.Context, req *activityv1.ListActivityTemplateVersionsRequest) (*activityv1.ListActivityTemplateVersionsResponse, error) { + return c.activityTemplateClient.ListActivityTemplateVersions(ctx, req) +} + +func (c *GRPCClient) CloneActivityTemplate(ctx context.Context, req *activityv1.CloneActivityTemplateRequest) (*activityv1.CloneActivityTemplateResponse, error) { + return c.activityTemplateClient.CloneActivityTemplate(ctx, req) +} + +func (c *GRPCClient) ValidateActivityTemplate(ctx context.Context, req *activityv1.ValidateActivityTemplateRequest) (*activityv1.ValidateActivityTemplateResponse, error) { + return c.activityTemplateClient.ValidateActivityTemplate(ctx, req) +} + +func (c *GRPCClient) ListActivityTemplateLeaderboard(ctx context.Context, req *activityv1.AdminListActivityTemplateLeaderboardRequest) (*activityv1.AdminListActivityTemplateLeaderboardResponse, error) { + return c.activityTemplateClient.ListActivityTemplateLeaderboard(ctx, req) +} + +func (c *GRPCClient) ListActivityTemplateRewardJobs(ctx context.Context, req *activityv1.ListActivityTemplateRewardJobsRequest) (*activityv1.ListActivityTemplateRewardJobsResponse, error) { + return c.activityTemplateClient.ListActivityTemplateRewardJobs(ctx, req) +} + +func (c *GRPCClient) RetryActivityTemplateRewardJob(ctx context.Context, req *activityv1.RetryActivityTemplateRewardJobRequest) (*activityv1.RetryActivityTemplateRewardJobResponse, error) { + return c.activityTemplateClient.RetryActivityTemplateRewardJob(ctx, req) +} + +func (c *GRPCClient) ListActivityTemplateTaskClaims(ctx context.Context, req *activityv1.ListActivityTemplateTaskClaimsRequest) (*activityv1.ListActivityTemplateTaskClaimsResponse, error) { + return c.activityTemplateClient.ListActivityTemplateTaskClaims(ctx, req) +} + +func (c *GRPCClient) RetryActivityTemplateTaskClaim(ctx context.Context, req *activityv1.RetryActivityTemplateTaskClaimRequest) (*activityv1.RetryActivityTemplateTaskClaimResponse, error) { + return c.activityTemplateClient.RetryActivityTemplateTaskClaim(ctx, req) +} + func (c *GRPCClient) GetCPWeeklyRankConfig(ctx context.Context, req *activityv1.GetCPWeeklyRankConfigRequest) (*activityv1.GetCPWeeklyRankConfigResponse, error) { return c.cpWeeklyRankClient.GetCPWeeklyRankConfig(ctx, req) } diff --git a/server/admin/internal/integration/statisticsclient/activity_template.go b/server/admin/internal/integration/statisticsclient/activity_template.go new file mode 100644 index 00000000..99acaed6 --- /dev/null +++ b/server/admin/internal/integration/statisticsclient/activity_template.go @@ -0,0 +1,148 @@ +package statisticsclient + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strconv" + "strings" + "time" +) + +type ActivityTemplateDataQuery struct { + AppCode string + TemplateID string + PublishedVersion int64 + RegionID int64 + StartMS int64 + EndMS int64 +} + +type ActivityTemplateOverview struct { + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + PublishedVersion int64 `json:"published_version"` + Participants int64 `json:"participants"` + VisitCount int64 `json:"visit_count"` + GiftUsers int64 `json:"gift_users"` + TaskUsers int64 `json:"task_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +type ActivityTemplateTrendPoint struct { + StatDay string `json:"stat_day"` + Participants int64 `json:"participants"` + VisitCount int64 `json:"visit_count"` + GiftUsers int64 `json:"gift_users"` + TaskUsers int64 `json:"task_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +type ActivityTemplateGiftStat struct { + GiftID string `json:"gift_id"` + GiftUsers int64 `json:"gift_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` +} + +type ActivityTemplateTaskStat struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TaskUsers int64 `json:"task_users"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +// ActivityTemplateData mirrors statistics-service's aggregate-only read model. +// Admin intentionally does not reconstruct any of these counters from activity owner tables. +type ActivityTemplateData struct { + Overview ActivityTemplateOverview `json:"overview"` + Trend []ActivityTemplateTrendPoint `json:"trend"` + Gifts []ActivityTemplateGiftStat `json:"gifts"` + Tasks []ActivityTemplateTaskStat `json:"tasks"` + Granularity string `json:"granularity"` + Timezone string `json:"timezone"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + RegionID int64 `json:"region_id"` + DimensionLimit int `json:"dimension_limit"` + GiftSort string `json:"gift_sort"` + TaskSort string `json:"task_sort"` + ServerTimeMS int64 `json:"server_time_ms"` +} + +type ActivityTemplateDataClient interface { + ActivityTemplateData(context.Context, ActivityTemplateDataQuery) (ActivityTemplateData, error) +} + +type HTTPClient struct { + baseURL string + client *http.Client +} + +func NewHTTP(baseURL string, timeout time.Duration) *HTTPClient { + if timeout <= 0 { + timeout = 3 * time.Second + } + return &HTTPClient{ + baseURL: strings.TrimRight(strings.TrimSpace(baseURL), "/"), + client: &http.Client{Timeout: timeout}, + } +} + +func (c *HTTPClient) ActivityTemplateData(ctx context.Context, query ActivityTemplateDataQuery) (ActivityTemplateData, error) { + values := url.Values{} + values.Set("app_code", strings.TrimSpace(query.AppCode)) + values.Set("template_id", strings.TrimSpace(query.TemplateID)) + values.Set("published_version", strconv.FormatInt(query.PublishedVersion, 10)) + values.Set("start_ms", strconv.FormatInt(query.StartMS, 10)) + values.Set("end_ms", strconv.FormatInt(query.EndMS, 10)) + if query.RegionID > 0 { + values.Set("region_id", strconv.FormatInt(query.RegionID, 10)) + } + req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.baseURL+"/internal/v1/statistics/activity-templates/data?"+values.Encode(), nil) + if err != nil { + return ActivityTemplateData{}, err + } + resp, err := c.client.Do(req) + if err != nil { + return ActivityTemplateData{}, err + } + defer resp.Body.Close() + if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices { + var body struct { + Error string `json:"error"` + } + _ = json.NewDecoder(resp.Body).Decode(&body) + return ActivityTemplateData{}, fmt.Errorf("statistics service returned status %d: %s", resp.StatusCode, strings.TrimSpace(body.Error)) + } + var out ActivityTemplateData + if err := json.NewDecoder(resp.Body).Decode(&out); err != nil { + return ActivityTemplateData{}, err + } + // Arrays must remain arrays for dense table/chart clients; nil would serialize as null and force needless branches. + if out.Trend == nil { + out.Trend = []ActivityTemplateTrendPoint{} + } + if out.Gifts == nil { + out.Gifts = []ActivityTemplateGiftStat{} + } + if out.Tasks == nil { + out.Tasks = []ActivityTemplateTaskStat{} + } + return out, nil +} diff --git a/server/admin/internal/modules/activitytemplate/data.go b/server/admin/internal/modules/activitytemplate/data.go new file mode 100644 index 00000000..2e637acc --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/data.go @@ -0,0 +1,304 @@ +package activitytemplate + +import ( + "strconv" + "strings" + "time" + + "hyapp-admin-server/internal/appctx" + "hyapp-admin-server/internal/integration/statisticsclient" + "hyapp-admin-server/internal/integration/userclient" + "hyapp-admin-server/internal/middleware" + "hyapp-admin-server/internal/modules/shared" + "hyapp-admin-server/internal/response" + activityv1 "hyapp.local/api/proto/activity/v1" + + "github.com/gin-gonic/gin" +) + +const maxActivityTemplateDataRange = 366 * 24 * time.Hour + +func (h *Handler) Leaderboard(c *gin.Context) { + options := shared.ListOptions(c) + versionNo, ok := positiveInt64Query(c, "version_no", true) + if !ok { + response.BadRequest(c, "version_no 参数不正确") + return + } + boardType := strings.ToLower(strings.TrimSpace(c.Query("board_type"))) + periodKey := strings.TrimSpace(c.Query("period_key")) + if boardType != "daily" && boardType != "total" { + response.BadRequest(c, "board_type 参数不正确") + return + } + if boardType == "daily" { + if parsed, err := time.Parse("2006-01-02", periodKey); err != nil || parsed.Format("2006-01-02") != periodKey { + response.BadRequest(c, "daily 榜单必须提供 YYYY-MM-DD 格式的 period_key") + return + } + } else { + periodKey = "total" + } + resp, err := h.activity.ListActivityTemplateLeaderboard(c.Request.Context(), &activityv1.AdminListActivityTemplateLeaderboardRequest{ + Meta: h.meta(c), TemplateId: strings.TrimSpace(c.Param("template_id")), VersionNo: versionNo, + BoardType: boardType, PeriodKey: periodKey, Page: int32(options.Page), PageSize: int32(options.PageSize), + }) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版榜单失败") + return + } + entries := make([]leaderboardEntryDTO, 0, len(resp.GetEntries())) + users := h.activityTemplateUsers(c, leaderboardProtoUserIDs(resp.GetEntries())) + for _, item := range resp.GetEntries() { + entries = append(entries, leaderboardEntryFromProto(item, users)) + } + response.OK(c, leaderboardPageDTO{ + Period: rankPeriodFromProto(resp.GetPeriod()), Items: entries, + Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal(), + }) +} + +func (h *Handler) RewardJobs(c *gin.Context) { + options := shared.ListOptions(c) + versionNo, ok := positiveInt64Query(c, "version_no", true) + if !ok { + response.BadRequest(c, "version_no 参数不正确") + return + } + boardType := strings.ToLower(strings.TrimSpace(c.Query("board_type"))) + if boardType != "" && boardType != "daily" && boardType != "total" { + response.BadRequest(c, "board_type 参数不正确") + return + } + status := strings.ToLower(strings.TrimSpace(c.Query("status"))) + if status != "" && status != "pending" && status != "running" && status != "granted" && status != "failed" && status != "dead" { + response.BadRequest(c, "status 参数不正确") + return + } + periodKey := strings.TrimSpace(c.Query("period_key")) + if boardType == "total" && periodKey != "" { + periodKey = "total" + } + resp, err := h.activity.ListActivityTemplateRewardJobs(c.Request.Context(), &activityv1.ListActivityTemplateRewardJobsRequest{ + Meta: h.meta(c), TemplateId: strings.TrimSpace(c.Param("template_id")), VersionNo: versionNo, + BoardType: boardType, PeriodKey: periodKey, Status: status, Page: int32(options.Page), PageSize: int32(options.PageSize), + }) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版奖励发放记录失败") + return + } + items := make([]rewardJobDTO, 0, len(resp.GetJobs())) + users := h.activityTemplateUsers(c, rewardJobProtoUserIDs(resp.GetJobs())) + for _, item := range resp.GetJobs() { + items = append(items, rewardJobFromProto(item, users)) + } + response.OK(c, pageDTO{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal()}) +} + +func (h *Handler) RetryRewardJob(c *gin.Context) { + templateID := strings.TrimSpace(c.Param("template_id")) + jobID := strings.TrimSpace(c.Param("reward_job_id")) + if templateID == "" || jobID == "" { + response.BadRequest(c, "活动模版或奖励任务 ID 不正确") + return + } + resp, err := h.activity.RetryActivityTemplateRewardJob(c.Request.Context(), &activityv1.RetryActivityTemplateRewardJobRequest{ + Meta: h.meta(c), TemplateId: templateID, RewardJobId: jobID, OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "重试活动模版奖励发放失败") + return + } + users := h.activityTemplateUsers(c, []int64{resp.GetJob().GetUserId()}) + item := rewardJobFromProto(resp.GetJob(), users) + shared.OperationLogWithResourceID(c, h.audit, "retry-activity-template-reward", "activity_template_reward_jobs", jobID, "success", "") + response.OK(c, item) +} + +func (h *Handler) TaskClaims(c *gin.Context) { + options := shared.ListOptions(c) + versionNo, versionOK := positiveInt64Query(c, "version_no", false) + userID, userOK := positiveInt64Query(c, "user_id", false) + if !versionOK || !userOK { + response.BadRequest(c, "version_no 或 user_id 参数不正确") + return + } + taskDay := strings.TrimSpace(c.Query("task_day")) + if taskDay != "" { + parsed, err := time.Parse("2006-01-02", taskDay) + if err != nil || parsed.Format("2006-01-02") != taskDay { + response.BadRequest(c, "task_day 必须为 YYYY-MM-DD") + return + } + } + status := strings.ToLower(strings.TrimSpace(c.Query("status"))) + if status != "" && status != "pending" && status != "running" && status != "granted" && status != "failed" { + response.BadRequest(c, "status 参数不正确") + return + } + resp, err := h.activity.ListActivityTemplateTaskClaims(c.Request.Context(), &activityv1.ListActivityTemplateTaskClaimsRequest{ + Meta: h.meta(c), TemplateId: strings.TrimSpace(c.Param("template_id")), VersionNo: versionNo, + TaskDay: taskDay, TaskKey: strings.TrimSpace(c.Query("task_key")), UserId: userID, Status: status, + Page: int32(options.Page), PageSize: int32(options.PageSize), + }) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版任务领奖记录失败") + return + } + items := make([]taskClaimDTO, 0, len(resp.GetClaims())) + users := h.activityTemplateUsers(c, taskClaimProtoUserIDs(resp.GetClaims())) + for _, item := range resp.GetClaims() { + items = append(items, taskClaimFromProto(item, users)) + } + response.OK(c, pageDTO{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal()}) +} + +func (h *Handler) RetryTaskClaim(c *gin.Context) { + templateID := strings.TrimSpace(c.Param("template_id")) + claimID := strings.TrimSpace(c.Param("claim_id")) + if templateID == "" || claimID == "" { + response.BadRequest(c, "活动模版或任务领奖记录 ID 不正确") + return + } + resp, err := h.activity.RetryActivityTemplateTaskClaim(c.Request.Context(), &activityv1.RetryActivityTemplateTaskClaimRequest{ + Meta: h.meta(c), TemplateId: templateID, ClaimId: claimID, OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "重试活动模版任务奖励发放失败") + return + } + users := h.activityTemplateUsers(c, []int64{resp.GetClaim().GetUserId()}) + item := taskClaimFromProto(resp.GetClaim(), users) + shared.OperationLogWithResourceID(c, h.audit, "retry-activity-template-task-claim", "activity_template_task_claims", claimID, "success", "") + response.OK(c, item) +} + +func (h *Handler) activityTemplateUsers(c *gin.Context, userIDs []int64) map[int64]*userclient.User { + if h.users == nil || len(userIDs) == 0 { + return nil + } + unique := make([]int64, 0, len(userIDs)) + seen := make(map[int64]struct{}, len(userIDs)) + for _, userID := range userIDs { + if userID <= 0 { + continue + } + if _, exists := seen[userID]; exists { + continue + } + seen[userID] = struct{}{} + unique = append(unique, userID) + } + if len(unique) == 0 { + return nil + } + users, err := h.users.BatchGetUsers(c.Request.Context(), userclient.BatchGetUsersRequest{ + RequestID: middleware.CurrentRequestID(c), Caller: "admin-server", UserIDs: unique, + }) + if err != nil { + // 用户资料是展示装饰,榜单和发奖事实仍必须返回;不能因 user-service 短暂不可用隐藏结算结果。 + return nil + } + return users +} + +func leaderboardProtoUserIDs(items []*activityv1.ActivityTemplateLeaderboardEntry) []int64 { + userIDs := make([]int64, 0, len(items)) + for _, item := range items { + if item != nil { + userIDs = append(userIDs, item.GetUserId()) + } + } + return userIDs +} + +func rewardJobProtoUserIDs(items []*activityv1.ActivityTemplateRewardJob) []int64 { + userIDs := make([]int64, 0, len(items)) + for _, item := range items { + if item != nil { + userIDs = append(userIDs, item.GetUserId()) + } + } + return userIDs +} + +func taskClaimProtoUserIDs(items []*activityv1.ActivityTemplateTaskClaim) []int64 { + userIDs := make([]int64, 0, len(items)) + for _, item := range items { + if item != nil { + userIDs = append(userIDs, item.GetUserId()) + } + } + return userIDs +} + +func (h *Handler) Data(c *gin.Context) { + if h.stats == nil { + response.ServerError(c, "活动模版统计服务未配置") + return + } + versionNo, ok := positiveInt64Query(c, "version_no", true) + if !ok { + response.BadRequest(c, "version_no 参数不正确") + return + } + startMS, startOK := requiredPositiveInt64Query(c, "start_ms") + endMS, endOK := requiredPositiveInt64Query(c, "end_ms") + if !startOK || !endOK || endMS <= startMS { + response.BadRequest(c, "start_ms 或 end_ms 参数不正确") + return + } + regionID := int64(0) + if raw, exists := c.GetQuery("region_id"); exists { + var err error + regionID, err = strconv.ParseInt(strings.TrimSpace(raw), 10, 64) + if err != nil || regionID <= 0 { + response.BadRequest(c, "region_id 参数不正确") + return + } + } + // statistics-service 按 UTC 日聚合。把任意 UI 时间窗归一为覆盖它的完整 [UTC 00:00, UTC 00:00), + // 既避免半日过滤产生“看似精确但实际丢整日”的静默误差,也由响应 start_ms/end_ms 明确回显生效窗口。 + effectiveStartMS := utcDayFloor(startMS) + effectiveEndMS := utcDayCeil(endMS) + if effectiveEndMS-effectiveStartMS > maxActivityTemplateDataRange.Milliseconds() { + response.BadRequest(c, "活动模版数据查询区间不能超过 366 天") + return + } + data, err := h.stats.ActivityTemplateData(c.Request.Context(), statisticsclient.ActivityTemplateDataQuery{ + AppCode: appctx.FromContext(c.Request.Context()), TemplateID: strings.TrimSpace(c.Param("template_id")), + PublishedVersion: versionNo, RegionID: regionID, StartMS: effectiveStartMS, EndMS: effectiveEndMS, + }) + if err != nil { + response.ServerError(c, "获取活动模版统计数据失败") + return + } + response.OK(c, data) +} + +func positiveInt64Query(c *gin.Context, key string, required bool) (int64, bool) { + raw, exists := c.GetQuery(key) + if !exists || strings.TrimSpace(raw) == "" { + return 0, !required + } + value, err := strconv.ParseInt(strings.TrimSpace(raw), 10, 64) + return value, err == nil && value > 0 +} + +func requiredPositiveInt64Query(c *gin.Context, key string) (int64, bool) { + value, ok := positiveInt64Query(c, key, true) + return value, ok +} + +func utcDayFloor(ms int64) int64 { + value := time.UnixMilli(ms).UTC() + return time.Date(value.Year(), value.Month(), value.Day(), 0, 0, 0, 0, time.UTC).UnixMilli() +} + +func utcDayCeil(ms int64) int64 { + floor := utcDayFloor(ms) + if floor == ms { + return floor + } + return floor + 24*time.Hour.Milliseconds() +} diff --git a/server/admin/internal/modules/activitytemplate/handler.go b/server/admin/internal/modules/activitytemplate/handler.go new file mode 100644 index 00000000..7912b534 --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/handler.go @@ -0,0 +1,275 @@ +package activitytemplate + +import ( + "context" + "strconv" + "strings" + "time" + + "hyapp-admin-server/internal/appctx" + "hyapp-admin-server/internal/integration/activityclient" + "hyapp-admin-server/internal/integration/statisticsclient" + "hyapp-admin-server/internal/integration/userclient" + "hyapp-admin-server/internal/middleware" + "hyapp-admin-server/internal/modules/shared" + "hyapp-admin-server/internal/response" + activityv1 "hyapp.local/api/proto/activity/v1" + + "github.com/gin-gonic/gin" + "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" +) + +type Handler struct { + activity activityclient.Client + stats statisticsclient.ActivityTemplateDataClient + users UserBatchGetter + audit shared.OperationLogger +} + +type UserBatchGetter interface { + BatchGetUsers(context.Context, userclient.BatchGetUsersRequest) (map[int64]*userclient.User, error) +} + +func New(activity activityclient.Client, audit shared.OperationLogger, dataClients ...statisticsclient.ActivityTemplateDataClient) *Handler { + handler := &Handler{activity: activity, audit: audit} + if len(dataClients) > 0 { + handler.stats = dataClients[0] + } + return handler +} + +func (h *Handler) BindUserBatchGetter(users UserBatchGetter) *Handler { + if h != nil { + h.users = users + } + return h +} + +func (h *Handler) List(c *gin.Context) { + options := shared.ListOptions(c) + startMS, startOK := parseOptionalNonNegativeInt64Query(c, "start_ms") + endMS, endOK := parseOptionalNonNegativeInt64Query(c, "end_ms") + if !startOK || !endOK { + response.BadRequest(c, "start_ms 或 end_ms 参数不正确") + return + } + req := &activityv1.ListActivityTemplatesRequest{ + Meta: h.meta(c), + Keyword: strings.TrimSpace(options.Keyword), + Status: strings.TrimSpace(options.Status), + StartMs: startMS, + EndMs: endMS, + Page: int32(options.Page), + PageSize: int32(options.PageSize), + } + if raw, exists := c.GetQuery("region_id"); exists { + regionID, err := strconv.ParseInt(strings.TrimSpace(raw), 10, 64) + if err != nil || regionID <= 0 { + response.BadRequest(c, "region_id 参数不正确") + return + } + req.RegionId = ®ionID + } + if raw, exists := c.GetQuery("all_regions"); exists { + allRegions, err := strconv.ParseBool(strings.TrimSpace(raw)) + if err != nil { + response.BadRequest(c, "all_regions 参数不正确") + return + } + req.AllRegions = &allRegions + } + resp, err := h.activity.ListActivityTemplates(c.Request.Context(), req) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版失败") + return + } + items := make([]templateSummaryDTO, 0, len(resp.GetTemplates())) + for _, item := range resp.GetTemplates() { + items = append(items, summaryFromProto(item)) + } + response.OK(c, pageDTO{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal(), ServerTimeMS: resp.GetServerTimeMs()}) +} + +func (h *Handler) Create(c *gin.Context) { + var req templateRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "活动模版参数不正确") + return + } + resp, err := h.activity.CreateActivityTemplate(c.Request.Context(), &activityv1.CreateActivityTemplateRequest{ + Meta: h.meta(c), Template: req.toProto(""), OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "创建活动模版失败") + return + } + item := templateFromProto(resp.GetTemplate()) + shared.OperationLogWithResourceID(c, h.audit, "create-activity-template", "activity_templates", item.TemplateID, "success", "") + response.Created(c, item) +} + +func (h *Handler) Get(c *gin.Context) { + templateID := strings.TrimSpace(c.Param("template_id")) + resp, err := h.activity.GetActivityTemplate(c.Request.Context(), &activityv1.GetActivityTemplateRequest{Meta: h.meta(c), TemplateId: templateID}) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版详情失败") + return + } + response.OK(c, templateFromProto(resp.GetTemplate())) +} + +func (h *Handler) Update(c *gin.Context) { + var req templateRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "活动模版参数不正确") + return + } + resp, err := h.activity.UpdateActivityTemplate(c.Request.Context(), &activityv1.UpdateActivityTemplateRequest{ + Meta: h.meta(c), Template: req.toProto(strings.TrimSpace(c.Param("template_id"))), + ExpectedRevision: req.ExpectedRevision, OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "更新活动模版失败") + return + } + item := templateFromProto(resp.GetTemplate()) + shared.OperationLogWithResourceID(c, h.audit, "update-activity-template", "activity_templates", item.TemplateID, "success", "") + response.OK(c, item) +} + +func (h *Handler) SetStatus(c *gin.Context) { + var req statusRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "活动模版状态参数不正确") + return + } + templateID := strings.TrimSpace(c.Param("template_id")) + resp, err := h.activity.SetActivityTemplateStatus(c.Request.Context(), &activityv1.SetActivityTemplateStatusRequest{ + Meta: h.meta(c), TemplateId: templateID, Status: strings.TrimSpace(req.Status), + ExpectedRevision: req.ExpectedRevision, OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "更新活动模版状态失败") + return + } + item := templateFromProto(resp.GetTemplate()) + shared.OperationLogWithResourceID(c, h.audit, "set-activity-template-status", "activity_templates", item.TemplateID, "success", "") + response.OK(c, item) +} + +func (h *Handler) Delete(c *gin.Context) { + expectedRevision := parseInt64Query(c, "revision") + if expectedRevision <= 0 { + response.BadRequest(c, "revision 参数不正确") + return + } + templateID := strings.TrimSpace(c.Param("template_id")) + resp, err := h.activity.DeleteActivityTemplate(c.Request.Context(), &activityv1.DeleteActivityTemplateRequest{ + Meta: h.meta(c), TemplateId: templateID, ExpectedRevision: expectedRevision, + OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "删除活动模版失败") + return + } + item := templateFromProto(resp.GetTemplate()) + shared.OperationLogWithResourceID(c, h.audit, "archive-activity-template", "activity_templates", item.TemplateID, "success", "") + response.OK(c, gin.H{"template": item, "archived": resp.GetArchived()}) +} + +func (h *Handler) Versions(c *gin.Context) { + options := shared.ListOptions(c) + resp, err := h.activity.ListActivityTemplateVersions(c.Request.Context(), &activityv1.ListActivityTemplateVersionsRequest{ + Meta: h.meta(c), TemplateId: strings.TrimSpace(c.Param("template_id")), Page: int32(options.Page), PageSize: int32(options.PageSize), + }) + if err != nil { + h.writeGRPCError(c, err, "获取活动模版版本失败") + return + } + items := make([]versionDTO, 0, len(resp.GetVersions())) + for _, version := range resp.GetVersions() { + items = append(items, versionDTO{ + TemplateID: version.GetTemplateId(), VersionNo: version.GetVersionNo(), Snapshot: templateFromProto(version.GetSnapshot()), + PublishedByAdminID: version.GetPublishedByAdminId(), PublishedAtMS: version.GetPublishedAtMs(), + RuntimeFromMS: version.GetRuntimeFromMs(), RuntimeToMS: version.GetRuntimeToMs(), + }) + } + response.OK(c, pageDTO{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal()}) +} + +func (h *Handler) Clone(c *gin.Context) { + var req cloneRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "复制活动模版参数不正确") + return + } + resp, err := h.activity.CloneActivityTemplate(c.Request.Context(), &activityv1.CloneActivityTemplateRequest{ + Meta: h.meta(c), SourceTemplateId: strings.TrimSpace(c.Param("template_id")), SourceVersion: req.SourceVersion, + TemplateCode: strings.TrimSpace(req.TemplateCode), Name: strings.TrimSpace(req.Name), OperatorAdminId: int64(middleware.CurrentUserID(c)), + }) + if err != nil { + h.writeGRPCError(c, err, "复制活动模版失败") + return + } + item := templateFromProto(resp.GetTemplate()) + shared.OperationLogWithResourceID(c, h.audit, "clone-activity-template", "activity_templates", item.TemplateID, "success", "") + response.Created(c, item) +} + +func (h *Handler) Validate(c *gin.Context) { + var req validateRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "活动模版校验参数不正确") + return + } + resp, err := h.activity.ValidateActivityTemplate(c.Request.Context(), &activityv1.ValidateActivityTemplateRequest{ + Meta: h.meta(c), Template: req.Template.toProto(""), ForPublish: req.ForPublish, + }) + if err != nil { + h.writeGRPCError(c, err, "校验活动模版失败") + return + } + issues := make([]validationIssueDTO, 0, len(resp.GetIssues())) + for _, issue := range resp.GetIssues() { + issues = append(issues, validationIssueDTO{Field: issue.GetField(), Code: issue.GetCode(), Message: issue.GetMessage()}) + } + response.OK(c, gin.H{"valid": resp.GetValid(), "issues": issues}) +} + +func (h *Handler) meta(c *gin.Context) *activityv1.RequestMeta { + return &activityv1.RequestMeta{ + RequestId: middleware.CurrentRequestID(c), Caller: "admin-server", AppCode: appctx.FromContext(c.Request.Context()), + SentAtMs: time.Now().UTC().UnixMilli(), + } +} + +// writeGRPCError 把 owner service 的并发和状态冲突稳定映射为 HTTP 409; +// 不能把 revision 冲突降级成 400,否则编辑器无法区分字段错误与“别人已经保存过”。 +func (h *Handler) writeGRPCError(c *gin.Context, err error, fallback string) { + status := grpcstatus.Convert(err) + switch status.Code() { + case codes.InvalidArgument: + response.BadRequest(c, status.Message()) + case codes.NotFound: + response.NotFound(c, status.Message()) + case codes.AlreadyExists, codes.FailedPrecondition, codes.Aborted: + response.Conflict(c, status.Message()) + default: + response.ServerError(c, fallback) + } +} + +func parseInt64Query(c *gin.Context, key string) int64 { + value, _ := strconv.ParseInt(strings.TrimSpace(c.Query(key)), 10, 64) + return value +} + +func parseOptionalNonNegativeInt64Query(c *gin.Context, key string) (int64, bool) { + raw, exists := c.GetQuery(key) + if !exists { + return 0, true + } + value, err := strconv.ParseInt(strings.TrimSpace(raw), 10, 64) + return value, err == nil && value >= 0 +} diff --git a/server/admin/internal/modules/activitytemplate/handler_test.go b/server/admin/internal/modules/activitytemplate/handler_test.go new file mode 100644 index 00000000..bb584745 --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/handler_test.go @@ -0,0 +1,412 @@ +package activitytemplate + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "strconv" + "strings" + "testing" + "time" + + "hyapp-admin-server/internal/integration/activityclient" + "hyapp-admin-server/internal/integration/statisticsclient" + "hyapp-admin-server/internal/integration/userclient" + "hyapp-admin-server/internal/middleware" + activityv1 "hyapp.local/api/proto/activity/v1" + + "github.com/gin-gonic/gin" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +type revisionConflictClient struct { + activityclient.Client +} + +type activityTemplateDataOwnerClient struct { + activityclient.Client + leaderboard *activityv1.AdminListActivityTemplateLeaderboardResponse + rewards *activityv1.ListActivityTemplateRewardJobsResponse + retryReward *activityv1.RetryActivityTemplateRewardJobResponse + claims *activityv1.ListActivityTemplateTaskClaimsResponse + retryClaim *activityv1.RetryActivityTemplateTaskClaimResponse + lastClaims *activityv1.ListActivityTemplateTaskClaimsRequest + lastRetry *activityv1.RetryActivityTemplateTaskClaimRequest + lastRewards *activityv1.ListActivityTemplateRewardJobsRequest + lastRewardRetry *activityv1.RetryActivityTemplateRewardJobRequest +} + +type activityTemplateVersionsOwnerClient struct { + activityclient.Client + response *activityv1.ListActivityTemplateVersionsResponse +} + +func (f activityTemplateVersionsOwnerClient) ListActivityTemplateVersions(context.Context, *activityv1.ListActivityTemplateVersionsRequest) (*activityv1.ListActivityTemplateVersionsResponse, error) { + return f.response, nil +} + +func (f activityTemplateDataOwnerClient) ListActivityTemplateLeaderboard(context.Context, *activityv1.AdminListActivityTemplateLeaderboardRequest) (*activityv1.AdminListActivityTemplateLeaderboardResponse, error) { + return f.leaderboard, nil +} + +func (f *activityTemplateDataOwnerClient) ListActivityTemplateRewardJobs(_ context.Context, req *activityv1.ListActivityTemplateRewardJobsRequest) (*activityv1.ListActivityTemplateRewardJobsResponse, error) { + f.lastRewards = req + return f.rewards, nil +} + +func (f *activityTemplateDataOwnerClient) RetryActivityTemplateRewardJob(_ context.Context, req *activityv1.RetryActivityTemplateRewardJobRequest) (*activityv1.RetryActivityTemplateRewardJobResponse, error) { + f.lastRewardRetry = req + return f.retryReward, nil +} + +func (f *activityTemplateDataOwnerClient) ListActivityTemplateTaskClaims(_ context.Context, req *activityv1.ListActivityTemplateTaskClaimsRequest) (*activityv1.ListActivityTemplateTaskClaimsResponse, error) { + f.lastClaims = req + return f.claims, nil +} + +func (f *activityTemplateDataOwnerClient) RetryActivityTemplateTaskClaim(_ context.Context, req *activityv1.RetryActivityTemplateTaskClaimRequest) (*activityv1.RetryActivityTemplateTaskClaimResponse, error) { + f.lastRetry = req + return f.retryClaim, nil +} + +type captureActivityTemplateUsers struct { + calls int + userIDs []int64 + users map[int64]*userclient.User + err error +} + +func (f *captureActivityTemplateUsers) BatchGetUsers(_ context.Context, req userclient.BatchGetUsersRequest) (map[int64]*userclient.User, error) { + f.calls++ + f.userIDs = append([]int64(nil), req.UserIDs...) + return f.users, f.err +} + +type captureActivityTemplateDataClient struct { + query statisticsclient.ActivityTemplateDataQuery +} + +func (c *captureActivityTemplateDataClient) ActivityTemplateData(_ context.Context, query statisticsclient.ActivityTemplateDataQuery) (statisticsclient.ActivityTemplateData, error) { + c.query = query + return statisticsclient.ActivityTemplateData{ + Overview: statisticsclient.ActivityTemplateOverview{TemplateID: query.TemplateID, PublishedVersion: query.PublishedVersion, VisitCount: 13}, + Trend: []statisticsclient.ActivityTemplateTrendPoint{{StatDay: "2026-07-14", VisitCount: 7}}, Gifts: []statisticsclient.ActivityTemplateGiftStat{}, + Tasks: []statisticsclient.ActivityTemplateTaskStat{}, Granularity: "day", Timezone: "UTC", + StartMS: query.StartMS, EndMS: query.EndMS, RegionID: query.RegionID, + }, nil +} + +func (revisionConflictClient) UpdateActivityTemplate(context.Context, *activityv1.UpdateActivityTemplateRequest) (*activityv1.UpdateActivityTemplateResponse, error) { + return nil, status.Error(codes.FailedPrecondition, "activity template revision changed") +} + +func TestUpdateMapsRevisionConflictToHTTP409(t *testing.T) { + gin.SetMode(gin.TestMode) + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + ctx.Request = httptest.NewRequest(http.MethodPut, "/api/v1/admin/activities/templates/acttpl_1", strings.NewReader(`{ + "template_code":"gift_challenge_2026", + "name":"Gift Challenge", + "activity_type":"gift_challenge", + "expected_revision":7 + }`)) + ctx.Request.Header.Set("Content-Type", "application/json") + ctx.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + + New(revisionConflictClient{}, nil).Update(ctx) + + if recorder.Code != http.StatusConflict { + t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusConflict, recorder.Body.String()) + } + var body struct { + Code int `json:"code"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &body); err != nil { + t.Fatalf("decode response: %v", err) + } + if body.Code != 40900 { + t.Fatalf("response code = %d, want 40900", body.Code) + } +} + +func TestListRejectsMalformedTimeFilterBeforeCallingOwnerService(t *testing.T) { + gin.SetMode(gin.TestMode) + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + ctx.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates?start_ms=not-a-time", nil) + + New(nil, nil).List(ctx) + + if recorder.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusBadRequest, recorder.Body.String()) + } +} + +func TestVersionsExposeActualRuntimeWindow(t *testing.T) { + gin.SetMode(gin.TestMode) + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + ctx.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/versions?page=1&page_size=20", nil) + ctx.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + client := activityTemplateVersionsOwnerClient{response: &activityv1.ListActivityTemplateVersionsResponse{ + Total: 1, + Versions: []*activityv1.ActivityTemplateVersion{{ + TemplateId: "acttpl_1", VersionNo: 1, Snapshot: &activityv1.ActivityTemplate{TemplateId: "acttpl_1", LifecycleStatus: "disabled"}, + PublishedByAdminId: 90001, PublishedAtMs: 100, RuntimeFromMs: 100, RuntimeToMs: 500, + }}, + }} + + New(client, nil).Versions(ctx) + + if recorder.Code != http.StatusOK { + t.Fatalf("status = %d; body=%s", recorder.Code, recorder.Body.String()) + } + var body struct { + Data struct { + Items []struct { + RuntimeFromMS int64 `json:"runtime_from_ms"` + RuntimeToMS int64 `json:"runtime_to_ms"` + Snapshot struct { + LifecycleStatus string `json:"lifecycle_status"` + } `json:"snapshot"` + } `json:"items"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &body); err != nil { + t.Fatalf("decode response: %v", err) + } + if len(body.Data.Items) != 1 || body.Data.Items[0].RuntimeFromMS != 100 || body.Data.Items[0].RuntimeToMS != 500 || body.Data.Items[0].Snapshot.LifecycleStatus != "disabled" { + t.Fatalf("version runtime response = %+v", body.Data.Items) + } +} + +func TestDataNormalizesRequestedWindowToUTCWholeDays(t *testing.T) { + gin.SetMode(gin.TestMode) + stats := &captureActivityTemplateDataClient{} + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + start := time.Date(2026, 7, 14, 12, 30, 0, 0, time.UTC).UnixMilli() + end := time.Date(2026, 7, 15, 8, 45, 0, 0, time.UTC).UnixMilli() + ctx.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/data?version_no=3®ion_id=7&start_ms="+strconv.FormatInt(start, 10)+"&end_ms="+strconv.FormatInt(end, 10), nil) + ctx.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + + New(nil, nil, stats).Data(ctx) + + if recorder.Code != http.StatusOK { + t.Fatalf("status = %d; body=%s", recorder.Code, recorder.Body.String()) + } + wantStart := time.Date(2026, 7, 14, 0, 0, 0, 0, time.UTC).UnixMilli() + wantEnd := time.Date(2026, 7, 16, 0, 0, 0, 0, time.UTC).UnixMilli() + if stats.query.TemplateID != "acttpl_1" || stats.query.PublishedVersion != 3 || stats.query.RegionID != 7 || + stats.query.StartMS != wantStart || stats.query.EndMS != wantEnd { + t.Fatalf("normalized statistics query = %+v", stats.query) + } + var body struct { + Data statisticsclient.ActivityTemplateData `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &body); err != nil { + t.Fatalf("decode response: %v", err) + } + if body.Data.StartMS != wantStart || body.Data.EndMS != wantEnd || body.Data.Granularity != "day" || body.Data.Timezone != "UTC" || + body.Data.Overview.VisitCount != 13 || len(body.Data.Trend) != 1 || body.Data.Trend[0].VisitCount != 7 { + t.Fatalf("effective range not echoed: %+v", body.Data) + } +} + +func TestLeaderboardAndRewardsBatchDecorateUsersWithoutOwningProfileFacts(t *testing.T) { + gin.SetMode(gin.TestMode) + owner := activityTemplateDataOwnerClient{ + leaderboard: &activityv1.AdminListActivityTemplateLeaderboardResponse{ + Period: &activityv1.ActivityTemplateRankPeriod{TemplateId: "acttpl_1", BoardType: "daily", PeriodKey: "2026-07-14"}, + Entries: []*activityv1.ActivityTemplateLeaderboardEntry{ + {RankNo: 1, UserId: 501, Score: 900}, {RankNo: 2, UserId: 501, Score: 800}, {RankNo: 3, UserId: 502, Score: 700}, + }, Total: 3, + }, + rewards: &activityv1.ListActivityTemplateRewardJobsResponse{ + Jobs: []*activityv1.ActivityTemplateRewardJob{{RewardJobId: "job-1", UserId: 502, Status: "granted"}}, Total: 1, + }, + } + users := &captureActivityTemplateUsers{users: map[int64]*userclient.User{ + 501: {UserID: 501, DisplayUserID: "L501", Username: "first", Avatar: "first.png"}, + 502: {UserID: 502, DisplayUserID: "L502", Username: "second", Avatar: "second.png"}, + }} + handler := New(&owner, nil).BindUserBatchGetter(users) + + leaderboardRecorder := httptest.NewRecorder() + leaderboardContext, _ := gin.CreateTestContext(leaderboardRecorder) + leaderboardContext.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/leaderboard?version_no=1&board_type=daily&period_key=2026-07-14", nil) + leaderboardContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + handler.Leaderboard(leaderboardContext) + if leaderboardRecorder.Code != http.StatusOK || users.calls != 1 || len(users.userIDs) != 2 || users.userIDs[0] != 501 || users.userIDs[1] != 502 { + t.Fatalf("leaderboard batch enrichment: status=%d calls=%d ids=%v body=%s", leaderboardRecorder.Code, users.calls, users.userIDs, leaderboardRecorder.Body.String()) + } + var leaderboardBody struct { + Data struct { + Items []struct { + User *activityTemplateUserDTO `json:"user"` + } `json:"items"` + } `json:"data"` + } + if err := json.Unmarshal(leaderboardRecorder.Body.Bytes(), &leaderboardBody); err != nil || len(leaderboardBody.Data.Items) != 3 || leaderboardBody.Data.Items[0].User == nil || leaderboardBody.Data.Items[0].User.DisplayUserID != "L501" { + t.Fatalf("leaderboard user decoration mismatch: err=%v body=%s", err, leaderboardRecorder.Body.String()) + } + + users.calls, users.userIDs = 0, nil + rewardsRecorder := httptest.NewRecorder() + rewardsContext, _ := gin.CreateTestContext(rewardsRecorder) + rewardsContext.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/rewards?version_no=1", nil) + rewardsContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + handler.RewardJobs(rewardsContext) + if rewardsRecorder.Code != http.StatusOK || users.calls != 1 || len(users.userIDs) != 1 || users.userIDs[0] != 502 || !strings.Contains(rewardsRecorder.Body.String(), `"display_user_id":"L502"`) { + t.Fatalf("reward user decoration: status=%d calls=%d ids=%v body=%s", rewardsRecorder.Code, users.calls, users.userIDs, rewardsRecorder.Body.String()) + } +} + +func TestRewardJobsRequiresPublishedVersion(t *testing.T) { + gin.SetMode(gin.TestMode) + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + ctx.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/rewards", nil) + ctx.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + + New(&activityTemplateDataOwnerClient{}, nil).RewardJobs(ctx) + + if recorder.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusBadRequest, recorder.Body.String()) + } +} + +func TestRewardJobsExposeDeadBackoffAndAllowExplicitRevival(t *testing.T) { + gin.SetMode(gin.TestMode) + dead := &activityv1.ActivityTemplateRewardJob{ + RewardJobId: "job-dead", TemplateId: "acttpl_1", VersionNo: 2, UserId: 502, + Status: "dead", FailureReason: "maximum delivery attempts exhausted", AttemptCount: 8, + MaxAttempts: 8, NextRetryAtMs: 0, + } + running := proto.Clone(dead).(*activityv1.ActivityTemplateRewardJob) + running.Status, running.AttemptCount, running.MaxAttempts = "running", 9, 9 + owner := &activityTemplateDataOwnerClient{ + rewards: &activityv1.ListActivityTemplateRewardJobsResponse{Jobs: []*activityv1.ActivityTemplateRewardJob{dead}, Total: 1}, + retryReward: &activityv1.RetryActivityTemplateRewardJobResponse{Job: running}, + } + handler := New(owner, nil) + + listRecorder := httptest.NewRecorder() + listContext, _ := gin.CreateTestContext(listRecorder) + listContext.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/rewards?version_no=2&status=dead", nil) + listContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + handler.RewardJobs(listContext) + if listRecorder.Code != http.StatusOK || owner.lastRewards == nil || owner.lastRewards.GetStatus() != "dead" || + !strings.Contains(listRecorder.Body.String(), `"max_attempts":8`) || !strings.Contains(listRecorder.Body.String(), `"next_retry_at_ms":0`) { + t.Fatalf("dead reward list mismatch: status=%d request=%+v body=%s", listRecorder.Code, owner.lastRewards, listRecorder.Body.String()) + } + + retryRecorder := httptest.NewRecorder() + retryContext, _ := gin.CreateTestContext(retryRecorder) + retryContext.Request = httptest.NewRequest(http.MethodPost, "/api/v1/admin/activities/templates/acttpl_1/rewards/job-dead/retry", nil) + retryContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}, {Key: "reward_job_id", Value: "job-dead"}} + retryContext.Set(middleware.ContextUserID, uint(90001)) + handler.RetryRewardJob(retryContext) + if retryRecorder.Code != http.StatusOK || owner.lastRewardRetry == nil || owner.lastRewardRetry.GetRewardJobId() != "job-dead" || + owner.lastRewardRetry.GetOperatorAdminId() != 90001 || !strings.Contains(retryRecorder.Body.String(), `"max_attempts":9`) { + t.Fatalf("dead reward revival mismatch: status=%d request=%+v body=%s", retryRecorder.Code, owner.lastRewardRetry, retryRecorder.Body.String()) + } +} + +func TestTaskClaimsFilterEnrichAndRetryPreserveImmutableAttribution(t *testing.T) { + gin.SetMode(gin.TestMode) + rewardItem := &activityv1.ActivityTemplateRewardItem{ItemType: "resource", ResourceId: 91, ResourceType: "avatar_frame", Name: "Frame", Quantity: 1} + claim := &activityv1.ActivityTemplateTaskClaim{ + ClaimId: "claim-1", CommandId: "device-command", TemplateId: "acttpl_1", TemplateCode: "summer", + VersionNo: 3, TaskDay: "2026-07-14", TaskKey: "send_gift", UserId: 503, + RewardResourceGroupId: 81, WalletCommandId: "wallet-command", WalletGrantId: "wallet-grant", + Status: "failed", FailureReason: "timeout", AttemptCount: 2, + RewardSnapshotId: "rgs-task", RewardSnapshotHash: strings.Repeat("a", 64), RewardName: "Task reward", + RewardItems: []*activityv1.ActivityTemplateRewardItem{rewardItem}, EarningRegionId: 210, AttributionAtMs: 1784073000000, + } + owner := &activityTemplateDataOwnerClient{ + claims: &activityv1.ListActivityTemplateTaskClaimsResponse{Claims: []*activityv1.ActivityTemplateTaskClaim{claim}, Total: 1}, + retryClaim: &activityv1.RetryActivityTemplateTaskClaimResponse{Claim: claim}, + } + users := &captureActivityTemplateUsers{users: map[int64]*userclient.User{ + 503: {UserID: 503, DisplayUserID: "L503", Username: "winner", Avatar: "winner.png"}, + }} + handler := New(owner, nil).BindUserBatchGetter(users) + + listRecorder := httptest.NewRecorder() + listContext, _ := gin.CreateTestContext(listRecorder) + listContext.Request = httptest.NewRequest(http.MethodGet, + "/api/v1/admin/activities/templates/acttpl_1/task-claims?version_no=3&task_day=2026-07-14&task_key=send_gift&user_id=503&status=failed&page=2&page_size=10", nil) + listContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + handler.TaskClaims(listContext) + + if listRecorder.Code != http.StatusOK || owner.lastClaims == nil || owner.lastClaims.GetVersionNo() != 3 || + owner.lastClaims.GetTaskDay() != "2026-07-14" || owner.lastClaims.GetTaskKey() != "send_gift" || + owner.lastClaims.GetUserId() != 503 || owner.lastClaims.GetStatus() != "failed" || owner.lastClaims.GetPage() != 2 || owner.lastClaims.GetPageSize() != 10 { + t.Fatalf("task claim filters mismatch: status=%d request=%+v body=%s", listRecorder.Code, owner.lastClaims, listRecorder.Body.String()) + } + var listBody struct { + Data struct { + Items []taskClaimDTO `json:"items"` + } `json:"data"` + } + if err := json.Unmarshal(listRecorder.Body.Bytes(), &listBody); err != nil || len(listBody.Data.Items) != 1 { + t.Fatalf("decode task claims: err=%v body=%s", err, listRecorder.Body.String()) + } + item := listBody.Data.Items[0] + if item.RewardSnapshotHash != strings.Repeat("a", 64) || item.RewardName != "Task reward" || len(item.RewardItems) != 1 || + item.EarningRegionID != 210 || item.AttributionAtMS != 1784073000000 || item.User == nil || item.User.DisplayUserID != "L503" { + t.Fatalf("task claim immutable/admin view mismatch: %+v", item) + } + + retryRecorder := httptest.NewRecorder() + retryContext, _ := gin.CreateTestContext(retryRecorder) + retryContext.Request = httptest.NewRequest(http.MethodPost, "/api/v1/admin/activities/templates/acttpl_1/task-claims/claim-1/retry", nil) + retryContext.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}, {Key: "claim_id", Value: "claim-1"}} + retryContext.Set(middleware.ContextUserID, uint(90001)) + handler.RetryTaskClaim(retryContext) + if retryRecorder.Code != http.StatusOK || owner.lastRetry == nil || owner.lastRetry.GetTemplateId() != "acttpl_1" || + owner.lastRetry.GetClaimId() != "claim-1" || owner.lastRetry.GetOperatorAdminId() != 90001 { + t.Fatalf("task claim retry mismatch: status=%d request=%+v body=%s", retryRecorder.Code, owner.lastRetry, retryRecorder.Body.String()) + } +} + +func TestAdminRewardDTOsExposePublishedSnapshots(t *testing.T) { + item := &activityv1.ActivityTemplateRewardItem{ItemType: "wallet_asset", WalletAssetType: "coin", WalletAssetAmount: 500, Name: "Coins"} + template := templateFromProto(&activityv1.ActivityTemplate{ + Tasks: []*activityv1.ActivityTemplateTask{{TaskKey: "visit", RewardSnapshotId: "task-snapshot", RewardSnapshotHash: strings.Repeat("b", 64), RewardName: "Visit reward", RewardItems: []*activityv1.ActivityTemplateRewardItem{item}}}, + RankRewards: []*activityv1.ActivityTemplateRankReward{{BoardType: "total", RankFrom: 1, RankTo: 1, RewardSnapshotId: "rank-snapshot", RewardSnapshotHash: strings.Repeat("c", 64), RewardName: "Champion", RewardItems: []*activityv1.ActivityTemplateRewardItem{item}}}, + }) + job := rewardJobFromProto(&activityv1.ActivityTemplateRewardJob{ + RewardJobId: "job-1", RewardSnapshotId: "rank-snapshot", RewardSnapshotHash: strings.Repeat("c", 64), RewardName: "Champion", RewardItems: []*activityv1.ActivityTemplateRewardItem{item}, + }, nil) + if len(template.Tasks) != 1 || template.Tasks[0].RewardSnapshotHash != strings.Repeat("b", 64) || len(template.Tasks[0].RewardItems) != 1 || + len(template.RankRewards) != 1 || template.RankRewards[0].RewardSnapshotHash != strings.Repeat("c", 64) || len(template.RankRewards[0].RewardItems) != 1 || + job.RewardSnapshotID != "rank-snapshot" || job.RewardSnapshotHash != strings.Repeat("c", 64) || len(job.RewardItems) != 1 { + t.Fatalf("published reward snapshots were dropped: template=%+v job=%+v", template, job) + } +} + +func TestLeaderboardProfileFailureDoesNotHideRankFacts(t *testing.T) { + gin.SetMode(gin.TestMode) + owner := activityTemplateDataOwnerClient{leaderboard: &activityv1.AdminListActivityTemplateLeaderboardResponse{ + Period: &activityv1.ActivityTemplateRankPeriod{TemplateId: "acttpl_1", BoardType: "total", PeriodKey: "total"}, + Entries: []*activityv1.ActivityTemplateLeaderboardEntry{{RankNo: 1, UserId: 501, Score: 900}}, Total: 1, + }} + users := &captureActivityTemplateUsers{err: errors.New("user service unavailable")} + handler := New(&owner, nil).BindUserBatchGetter(users) + recorder := httptest.NewRecorder() + ctx, _ := gin.CreateTestContext(recorder) + ctx.Request = httptest.NewRequest(http.MethodGet, "/api/v1/admin/activities/templates/acttpl_1/leaderboard?version_no=1&board_type=total", nil) + ctx.Params = gin.Params{{Key: "template_id", Value: "acttpl_1"}} + + handler.Leaderboard(ctx) + + if recorder.Code != http.StatusOK || users.calls != 1 || !strings.Contains(recorder.Body.String(), `"score":900`) || strings.Contains(recorder.Body.String(), `"user":`) { + t.Fatalf("profile degradation hid or changed rank facts: status=%d body=%s", recorder.Code, recorder.Body.String()) + } +} diff --git a/server/admin/internal/modules/activitytemplate/request.go b/server/admin/internal/modules/activitytemplate/request.go new file mode 100644 index 00000000..62f8b8a4 --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/request.go @@ -0,0 +1,130 @@ +package activitytemplate + +import ( + "strings" + + activityv1 "hyapp.local/api/proto/activity/v1" +) + +type localeRequest struct { + Locale string `json:"locale"` + Title string `json:"title"` + Rules string `json:"rules"` +} + +type giftRequest struct { + GiftID string `json:"gift_id"` + SortOrder int32 `json:"sort_order"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + CoinPrice int64 `json:"coin_price"` + PriceVersion string `json:"price_version"` +} + +type taskRequest struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TargetValue int64 `json:"target_value"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + SortOrder int32 `json:"sort_order"` +} + +type rankRewardRequest struct { + BoardType string `json:"board_type"` + RankFrom int32 `json:"rank_from"` + RankTo int32 `json:"rank_to"` + ResourceGroupID int64 `json:"resource_group_id"` + SortOrder int32 `json:"sort_order"` +} + +type assetRequest struct { + AssetKey string `json:"asset_key"` + Locale string `json:"locale"` + URL string `json:"url"` + MediaType string `json:"media_type"` + SortOrder int32 `json:"sort_order"` +} + +// templateRequest 与 HTTP JSON 一一对应;不在 admin 层重复业务校验,确保保存和发布都复用 activity-service 的同一规则。 +type templateRequest struct { + TemplateCode string `json:"template_code"` + Name string `json:"name"` + ActivityType string `json:"activity_type"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + AllRegions bool `json:"all_regions"` + RegionIDs []int64 `json:"region_ids"` + Locales []localeRequest `json:"locales"` + Gifts []giftRequest `json:"gifts"` + Tasks []taskRequest `json:"tasks"` + DailyLeaderboardSize int32 `json:"daily_leaderboard_size"` + TotalLeaderboardSize int32 `json:"total_leaderboard_size"` + RankRewards []rankRewardRequest `json:"rank_rewards"` + Assets []assetRequest `json:"assets"` + DisplayConfigJSON string `json:"display_config_json"` + ExpectedRevision int64 `json:"expected_revision,omitempty"` +} + +type statusRequest struct { + Status string `json:"status"` + ExpectedRevision int64 `json:"expected_revision"` +} + +type cloneRequest struct { + SourceVersion int64 `json:"source_version"` + TemplateCode string `json:"template_code"` + Name string `json:"name"` +} + +type validateRequest struct { + Template templateRequest `json:"template"` + ForPublish bool `json:"for_publish"` +} + +func (r templateRequest) toProto(templateID string) *activityv1.ActivityTemplate { + item := &activityv1.ActivityTemplate{ + TemplateId: strings.TrimSpace(templateID), + TemplateCode: strings.TrimSpace(r.TemplateCode), + Name: strings.TrimSpace(r.Name), + ActivityType: strings.TrimSpace(r.ActivityType), + StartMs: r.StartMS, + EndMs: r.EndMS, + AllRegions: r.AllRegions, + RegionIds: append([]int64(nil), r.RegionIDs...), + Locales: make([]*activityv1.ActivityTemplateLocale, 0, len(r.Locales)), + Gifts: make([]*activityv1.ActivityTemplateGift, 0, len(r.Gifts)), + Tasks: make([]*activityv1.ActivityTemplateTask, 0, len(r.Tasks)), + DailyLeaderboardSize: r.DailyLeaderboardSize, + TotalLeaderboardSize: r.TotalLeaderboardSize, + RankRewards: make([]*activityv1.ActivityTemplateRankReward, 0, len(r.RankRewards)), + Assets: make([]*activityv1.ActivityTemplateAsset, 0, len(r.Assets)), + DisplayConfigJson: strings.TrimSpace(r.DisplayConfigJSON), + } + for _, locale := range r.Locales { + item.Locales = append(item.Locales, &activityv1.ActivityTemplateLocale{Locale: locale.Locale, Title: locale.Title, Rules: locale.Rules}) + } + for _, gift := range r.Gifts { + item.Gifts = append(item.Gifts, &activityv1.ActivityTemplateGift{ + GiftId: gift.GiftID, SortOrder: gift.SortOrder, Name: gift.Name, IconUrl: gift.IconURL, + CoinPrice: gift.CoinPrice, PriceVersion: gift.PriceVersion, + }) + } + for _, task := range r.Tasks { + item.Tasks = append(item.Tasks, &activityv1.ActivityTemplateTask{ + TaskKey: task.TaskKey, TaskType: task.TaskType, TargetValue: task.TargetValue, + RewardResourceGroupId: task.RewardResourceGroupID, SortOrder: task.SortOrder, + }) + } + for _, reward := range r.RankRewards { + item.RankRewards = append(item.RankRewards, &activityv1.ActivityTemplateRankReward{ + BoardType: reward.BoardType, RankFrom: reward.RankFrom, RankTo: reward.RankTo, + ResourceGroupId: reward.ResourceGroupID, SortOrder: reward.SortOrder, + }) + } + for _, asset := range r.Assets { + item.Assets = append(item.Assets, &activityv1.ActivityTemplateAsset{ + AssetKey: asset.AssetKey, Locale: asset.Locale, Url: asset.URL, MediaType: asset.MediaType, SortOrder: asset.SortOrder, + }) + } + return item +} diff --git a/server/admin/internal/modules/activitytemplate/response.go b/server/admin/internal/modules/activitytemplate/response.go new file mode 100644 index 00000000..56e4543f --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/response.go @@ -0,0 +1,382 @@ +package activitytemplate + +import ( + "hyapp-admin-server/internal/integration/userclient" + activityv1 "hyapp.local/api/proto/activity/v1" +) + +type localeDTO struct { + Locale string `json:"locale"` + Title string `json:"title"` + Rules string `json:"rules"` +} + +type giftDTO struct { + GiftID string `json:"gift_id"` + SortOrder int32 `json:"sort_order"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + CoinPrice int64 `json:"coin_price"` + PriceVersion string `json:"price_version"` +} + +// rewardItemDTO is the immutable, display-safe reward item captured at publish +// time. Admin reads this snapshot instead of joining mutable wallet catalog rows. +type rewardItemDTO struct { + ItemType string `json:"item_type"` + ResourceID int64 `json:"resource_id"` + ResourceType string `json:"resource_type"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + Quantity int64 `json:"quantity"` + DurationMS int64 `json:"duration_ms"` + WalletAssetType string `json:"wallet_asset_type"` + WalletAssetAmount int64 `json:"wallet_asset_amount"` + SortOrder int32 `json:"sort_order"` +} + +type taskDTO struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TargetValue int64 `json:"target_value"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardSnapshotHash string `json:"reward_snapshot_hash"` + RewardName string `json:"reward_name"` + RewardItems []rewardItemDTO `json:"reward_items"` +} + +type rankRewardDTO struct { + BoardType string `json:"board_type"` + RankFrom int32 `json:"rank_from"` + RankTo int32 `json:"rank_to"` + ResourceGroupID int64 `json:"resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardSnapshotHash string `json:"reward_snapshot_hash"` + RewardName string `json:"reward_name"` + RewardItems []rewardItemDTO `json:"reward_items"` +} + +type assetDTO struct { + AssetKey string `json:"asset_key"` + Locale string `json:"locale"` + URL string `json:"url"` + MediaType string `json:"media_type"` + SortOrder int32 `json:"sort_order"` +} + +type templateSummaryDTO struct { + AppCode string `json:"app_code"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + Name string `json:"name"` + ActivityType string `json:"activity_type"` + Status string `json:"status"` + LifecycleStatus string `json:"lifecycle_status"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + AllRegions bool `json:"all_regions"` + RegionIDs []int64 `json:"region_ids"` + Revision int64 `json:"revision"` + PublishedVersion int64 `json:"published_version"` + CreatedByAdminID int64 `json:"created_by_admin_id"` + UpdatedByAdminID int64 `json:"updated_by_admin_id"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` +} + +type templateDTO struct { + AppCode string `json:"app_code"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + Name string `json:"name"` + ActivityType string `json:"activity_type"` + Status string `json:"status"` + LifecycleStatus string `json:"lifecycle_status"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + AllRegions bool `json:"all_regions"` + RegionIDs []int64 `json:"region_ids"` + Locales []localeDTO `json:"locales"` + Gifts []giftDTO `json:"gifts"` + Tasks []taskDTO `json:"tasks"` + DailyLeaderboardSize int32 `json:"daily_leaderboard_size"` + TotalLeaderboardSize int32 `json:"total_leaderboard_size"` + RankRewards []rankRewardDTO `json:"rank_rewards"` + Assets []assetDTO `json:"assets"` + DisplayConfigJSON string `json:"display_config_json"` + Revision int64 `json:"revision"` + PublishedVersion int64 `json:"published_version"` + CreatedByAdminID int64 `json:"created_by_admin_id"` + UpdatedByAdminID int64 `json:"updated_by_admin_id"` + PublishedByAdminID int64 `json:"published_by_admin_id"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` + PublishedAtMS int64 `json:"published_at_ms"` + ArchivedAtMS int64 `json:"archived_at_ms"` +} + +type versionDTO struct { + TemplateID string `json:"template_id"` + VersionNo int64 `json:"version_no"` + Snapshot templateDTO `json:"snapshot"` + PublishedByAdminID int64 `json:"published_by_admin_id"` + PublishedAtMS int64 `json:"published_at_ms"` + RuntimeFromMS int64 `json:"runtime_from_ms"` + RuntimeToMS int64 `json:"runtime_to_ms"` +} + +type validationIssueDTO struct { + Field string `json:"field"` + Code string `json:"code"` + Message string `json:"message"` +} + +type pageDTO struct { + Items any `json:"items"` + Page int `json:"page"` + PageSize int `json:"page_size"` + Total int64 `json:"total"` + ServerTimeMS int64 `json:"server_time_ms,omitempty"` +} + +type rankPeriodDTO struct { + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + VersionNo int64 `json:"version_no"` + BoardType string `json:"board_type"` + PeriodKey string `json:"period_key"` + PeriodStartMS int64 `json:"period_start_ms"` + PeriodEndMS int64 `json:"period_end_ms"` + SettleAfterMS int64 `json:"settle_after_ms"` + Status string `json:"status"` + SettledAtMS int64 `json:"settled_at_ms"` +} + +type leaderboardEntryDTO struct { + RankNo int32 `json:"rank_no"` + UserID int64 `json:"user_id"` + Score int64 `json:"score"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + FirstScoredAtMS int64 `json:"first_scored_at_ms"` + Snapshot bool `json:"snapshot"` + User *activityTemplateUserDTO `json:"user,omitempty"` +} + +type leaderboardPageDTO struct { + Period rankPeriodDTO `json:"period"` + Items []leaderboardEntryDTO `json:"items"` + Page int `json:"page"` + PageSize int `json:"page_size"` + Total int64 `json:"total"` +} + +type rewardJobDTO struct { + RewardJobID string `json:"reward_job_id"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + VersionNo int64 `json:"version_no"` + BoardType string `json:"board_type"` + PeriodKey string `json:"period_key"` + RankNo int32 `json:"rank_no"` + UserID int64 `json:"user_id"` + Score int64 `json:"score"` + ResourceGroupID int64 `json:"resource_group_id"` + WalletCommandID string `json:"wallet_command_id"` + WalletGrantID string `json:"wallet_grant_id"` + Status string `json:"status"` + FailureReason string `json:"failure_reason"` + AttemptCount int32 `json:"attempt_count"` + MaxAttempts int32 `json:"max_attempts"` + NextRetryAtMS int64 `json:"next_retry_at_ms"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` + GrantedAtMS int64 `json:"granted_at_ms"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardSnapshotHash string `json:"reward_snapshot_hash"` + RewardName string `json:"reward_name"` + RewardItems []rewardItemDTO `json:"reward_items"` + User *activityTemplateUserDTO `json:"user,omitempty"` +} + +type taskClaimDTO struct { + ClaimID string `json:"claim_id"` + CommandID string `json:"command_id"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + VersionNo int64 `json:"version_no"` + TaskDay string `json:"task_day"` + TaskKey string `json:"task_key"` + UserID int64 `json:"user_id"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + WalletCommandID string `json:"wallet_command_id"` + WalletGrantID string `json:"wallet_grant_id"` + Status string `json:"status"` + FailureReason string `json:"failure_reason"` + AttemptCount int32 `json:"attempt_count"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` + GrantedAtMS int64 `json:"granted_at_ms"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardSnapshotHash string `json:"reward_snapshot_hash"` + RewardName string `json:"reward_name"` + RewardItems []rewardItemDTO `json:"reward_items"` + EarningRegionID int64 `json:"earning_region_id"` + AttributionAtMS int64 `json:"attribution_at_ms"` + User *activityTemplateUserDTO `json:"user,omitempty"` +} + +type activityTemplateUserDTO struct { + DisplayUserID string `json:"display_user_id"` + Username string `json:"username"` + Avatar string `json:"avatar"` +} + +func rankPeriodFromProto(item *activityv1.ActivityTemplateRankPeriod) rankPeriodDTO { + if item == nil { + return rankPeriodDTO{} + } + return rankPeriodDTO{ + TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), VersionNo: item.GetVersionNo(), + BoardType: item.GetBoardType(), PeriodKey: item.GetPeriodKey(), PeriodStartMS: item.GetPeriodStartMs(), + PeriodEndMS: item.GetPeriodEndMs(), SettleAfterMS: item.GetSettleAfterMs(), + Status: item.GetStatus(), SettledAtMS: item.GetSettledAtMs(), + } +} + +func leaderboardEntryFromProto(item *activityv1.ActivityTemplateLeaderboardEntry, users map[int64]*userclient.User) leaderboardEntryDTO { + if item == nil { + return leaderboardEntryDTO{} + } + out := leaderboardEntryDTO{ + RankNo: item.GetRankNo(), UserID: item.GetUserId(), Score: item.GetScore(), GiftCount: item.GetGiftCount(), + CoinAmount: item.GetCoinAmount(), FirstScoredAtMS: item.GetFirstScoredAtMs(), Snapshot: item.GetSnapshot(), + } + out.User = activityTemplateUserFromClient(users[item.GetUserId()]) + return out +} + +func rewardJobFromProto(item *activityv1.ActivityTemplateRewardJob, users map[int64]*userclient.User) rewardJobDTO { + if item == nil { + return rewardJobDTO{} + } + out := rewardJobDTO{ + RewardJobID: item.GetRewardJobId(), TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), + VersionNo: item.GetVersionNo(), BoardType: item.GetBoardType(), PeriodKey: item.GetPeriodKey(), RankNo: item.GetRankNo(), + UserID: item.GetUserId(), Score: item.GetScore(), ResourceGroupID: item.GetResourceGroupId(), + WalletCommandID: item.GetWalletCommandId(), WalletGrantID: item.GetWalletGrantId(), Status: item.GetStatus(), + FailureReason: item.GetFailureReason(), AttemptCount: item.GetAttemptCount(), MaxAttempts: item.GetMaxAttempts(), + NextRetryAtMS: item.GetNextRetryAtMs(), CreatedAtMS: item.GetCreatedAtMs(), + UpdatedAtMS: item.GetUpdatedAtMs(), GrantedAtMS: item.GetGrantedAtMs(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardSnapshotHash: item.GetRewardSnapshotHash(), + RewardName: item.GetRewardName(), RewardItems: rewardItemsFromProto(item.GetRewardItems()), + } + out.User = activityTemplateUserFromClient(users[item.GetUserId()]) + return out +} + +func taskClaimFromProto(item *activityv1.ActivityTemplateTaskClaim, users map[int64]*userclient.User) taskClaimDTO { + if item == nil { + return taskClaimDTO{RewardItems: []rewardItemDTO{}} + } + out := taskClaimDTO{ + ClaimID: item.GetClaimId(), CommandID: item.GetCommandId(), TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), + VersionNo: item.GetVersionNo(), TaskDay: item.GetTaskDay(), TaskKey: item.GetTaskKey(), UserID: item.GetUserId(), + RewardResourceGroupID: item.GetRewardResourceGroupId(), WalletCommandID: item.GetWalletCommandId(), WalletGrantID: item.GetWalletGrantId(), + Status: item.GetStatus(), FailureReason: item.GetFailureReason(), AttemptCount: item.GetAttemptCount(), + CreatedAtMS: item.GetCreatedAtMs(), UpdatedAtMS: item.GetUpdatedAtMs(), GrantedAtMS: item.GetGrantedAtMs(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardSnapshotHash: item.GetRewardSnapshotHash(), RewardName: item.GetRewardName(), + RewardItems: rewardItemsFromProto(item.GetRewardItems()), EarningRegionID: item.GetEarningRegionId(), AttributionAtMS: item.GetAttributionAtMs(), + } + out.User = activityTemplateUserFromClient(users[item.GetUserId()]) + return out +} + +func rewardItemsFromProto(items []*activityv1.ActivityTemplateRewardItem) []rewardItemDTO { + out := make([]rewardItemDTO, 0, len(items)) + for _, item := range items { + if item == nil { + continue + } + out = append(out, rewardItemDTO{ + ItemType: item.GetItemType(), ResourceID: item.GetResourceId(), ResourceType: item.GetResourceType(), + Name: item.GetName(), IconURL: item.GetIconUrl(), Quantity: item.GetQuantity(), DurationMS: item.GetDurationMs(), + WalletAssetType: item.GetWalletAssetType(), WalletAssetAmount: item.GetWalletAssetAmount(), SortOrder: item.GetSortOrder(), + }) + } + return out +} + +func activityTemplateUserFromClient(item *userclient.User) *activityTemplateUserDTO { + if item == nil { + return nil + } + return &activityTemplateUserDTO{DisplayUserID: item.DisplayUserID, Username: item.Username, Avatar: item.Avatar} +} + +func summaryFromProto(item *activityv1.ActivityTemplateSummary) templateSummaryDTO { + if item == nil { + return templateSummaryDTO{RegionIDs: []int64{}} + } + return templateSummaryDTO{ + AppCode: item.GetAppCode(), TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), + Name: item.GetName(), ActivityType: item.GetActivityType(), Status: item.GetStatus(), LifecycleStatus: item.GetLifecycleStatus(), + StartMS: item.GetStartMs(), EndMS: item.GetEndMs(), AllRegions: item.GetAllRegions(), RegionIDs: cloneInt64Slice(item.GetRegionIds()), + Revision: item.GetRevision(), PublishedVersion: item.GetPublishedVersion(), + CreatedByAdminID: item.GetCreatedByAdminId(), UpdatedByAdminID: item.GetUpdatedByAdminId(), + CreatedAtMS: item.GetCreatedAtMs(), UpdatedAtMS: item.GetUpdatedAtMs(), + } +} + +func templateFromProto(item *activityv1.ActivityTemplate) templateDTO { + if item == nil { + return templateDTO{RegionIDs: []int64{}, Locales: []localeDTO{}, Gifts: []giftDTO{}, Tasks: []taskDTO{}, RankRewards: []rankRewardDTO{}, Assets: []assetDTO{}} + } + out := templateDTO{ + AppCode: item.GetAppCode(), TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), Name: item.GetName(), + ActivityType: item.GetActivityType(), Status: item.GetStatus(), LifecycleStatus: item.GetLifecycleStatus(), + StartMS: item.GetStartMs(), EndMS: item.GetEndMs(), AllRegions: item.GetAllRegions(), RegionIDs: cloneInt64Slice(item.GetRegionIds()), + Locales: make([]localeDTO, 0, len(item.GetLocales())), Gifts: make([]giftDTO, 0, len(item.GetGifts())), + Tasks: make([]taskDTO, 0, len(item.GetTasks())), RankRewards: make([]rankRewardDTO, 0, len(item.GetRankRewards())), + Assets: make([]assetDTO, 0, len(item.GetAssets())), DailyLeaderboardSize: item.GetDailyLeaderboardSize(), + TotalLeaderboardSize: item.GetTotalLeaderboardSize(), DisplayConfigJSON: item.GetDisplayConfigJson(), + Revision: item.GetRevision(), PublishedVersion: item.GetPublishedVersion(), + CreatedByAdminID: item.GetCreatedByAdminId(), UpdatedByAdminID: item.GetUpdatedByAdminId(), PublishedByAdminID: item.GetPublishedByAdminId(), + CreatedAtMS: item.GetCreatedAtMs(), UpdatedAtMS: item.GetUpdatedAtMs(), PublishedAtMS: item.GetPublishedAtMs(), ArchivedAtMS: item.GetArchivedAtMs(), + } + for _, locale := range item.GetLocales() { + out.Locales = append(out.Locales, localeDTO{Locale: locale.GetLocale(), Title: locale.GetTitle(), Rules: locale.GetRules()}) + } + for _, gift := range item.GetGifts() { + out.Gifts = append(out.Gifts, giftDTO{GiftID: gift.GetGiftId(), SortOrder: gift.GetSortOrder(), Name: gift.GetName(), IconURL: gift.GetIconUrl(), CoinPrice: gift.GetCoinPrice(), PriceVersion: gift.GetPriceVersion()}) + } + for _, task := range item.GetTasks() { + out.Tasks = append(out.Tasks, taskDTO{ + TaskKey: task.GetTaskKey(), TaskType: task.GetTaskType(), TargetValue: task.GetTargetValue(), + RewardResourceGroupID: task.GetRewardResourceGroupId(), SortOrder: task.GetSortOrder(), + RewardSnapshotID: task.GetRewardSnapshotId(), RewardSnapshotHash: task.GetRewardSnapshotHash(), + RewardName: task.GetRewardName(), RewardItems: rewardItemsFromProto(task.GetRewardItems()), + }) + } + for _, reward := range item.GetRankRewards() { + out.RankRewards = append(out.RankRewards, rankRewardDTO{ + BoardType: reward.GetBoardType(), RankFrom: reward.GetRankFrom(), RankTo: reward.GetRankTo(), + ResourceGroupID: reward.GetResourceGroupId(), SortOrder: reward.GetSortOrder(), + RewardSnapshotID: reward.GetRewardSnapshotId(), RewardSnapshotHash: reward.GetRewardSnapshotHash(), + RewardName: reward.GetRewardName(), RewardItems: rewardItemsFromProto(reward.GetRewardItems()), + }) + } + for _, asset := range item.GetAssets() { + out.Assets = append(out.Assets, assetDTO{AssetKey: asset.GetAssetKey(), Locale: asset.GetLocale(), URL: asset.GetUrl(), MediaType: asset.GetMediaType(), SortOrder: asset.GetSortOrder()}) + } + return out +} + +func cloneInt64Slice(items []int64) []int64 { + out := make([]int64, len(items)) + copy(out, items) + return out +} diff --git a/server/admin/internal/modules/activitytemplate/routes.go b/server/admin/internal/modules/activitytemplate/routes.go new file mode 100644 index 00000000..2ddbdbfe --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/routes.go @@ -0,0 +1,30 @@ +package activitytemplate + +import ( + "hyapp-admin-server/internal/middleware" + + "github.com/gin-gonic/gin" +) + +func RegisterRoutes(protected *gin.RouterGroup, h *Handler) { + if h == nil { + return + } + protected.GET("/admin/activities/templates", middleware.RequirePermission("activity-template:view"), h.List) + protected.POST("/admin/activities/templates", middleware.RequirePermission("activity-template:create"), h.Create) + protected.POST("/admin/activities/templates/validate", middleware.RequireAnyPermission("activity-template:create", "activity-template:update", "activity-template:publish"), h.Validate) + protected.GET("/admin/activities/templates/:template_id", middleware.RequirePermission("activity-template:view"), h.Get) + protected.PUT("/admin/activities/templates/:template_id", middleware.RequirePermission("activity-template:update"), h.Update) + protected.PATCH("/admin/activities/templates/:template_id/status", middleware.RequirePermission("activity-template:publish"), h.SetStatus) + protected.DELETE("/admin/activities/templates/:template_id", middleware.RequirePermission("activity-template:delete"), h.Delete) + protected.GET("/admin/activities/templates/:template_id/versions", middleware.RequirePermission("activity-template:view"), h.Versions) + protected.POST("/admin/activities/templates/:template_id/clone", middleware.RequirePermission("activity-template:create"), h.Clone) + protected.GET("/admin/activities/templates/:template_id/leaderboard", middleware.RequirePermission("activity-template:data"), h.Leaderboard) + protected.GET("/admin/activities/templates/:template_id/data", middleware.RequirePermission("activity-template:data"), h.Data) + // 导出复用同一受限聚合契约,前端按 overview/trend/gifts/tasks 分区生成 CSV;避免另开一条可能绕过 366 天和 Top100 限制的数据链路。 + protected.GET("/admin/activities/templates/:template_id/data/export", middleware.RequirePermission("activity-template:export"), h.Data) + protected.GET("/admin/activities/templates/:template_id/rewards", middleware.RequirePermission("activity-template:data"), h.RewardJobs) + protected.POST("/admin/activities/templates/:template_id/rewards/:reward_job_id/retry", middleware.RequirePermission("activity-template:retry"), h.RetryRewardJob) + protected.GET("/admin/activities/templates/:template_id/task-claims", middleware.RequirePermission("activity-template:data"), h.TaskClaims) + protected.POST("/admin/activities/templates/:template_id/task-claims/:claim_id/retry", middleware.RequirePermission("activity-template:retry"), h.RetryTaskClaim) +} diff --git a/server/admin/internal/modules/activitytemplate/routes_test.go b/server/admin/internal/modules/activitytemplate/routes_test.go new file mode 100644 index 00000000..fc8ae17d --- /dev/null +++ b/server/admin/internal/modules/activitytemplate/routes_test.go @@ -0,0 +1,92 @@ +package activitytemplate + +import ( + "context" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "hyapp-admin-server/internal/integration/activityclient" + "hyapp-admin-server/internal/middleware" + activityv1 "hyapp.local/api/proto/activity/v1" + + "github.com/gin-gonic/gin" +) + +type validatePermissionClient struct { + activityclient.Client +} + +func (validatePermissionClient) ValidateActivityTemplate(context.Context, *activityv1.ValidateActivityTemplateRequest) (*activityv1.ValidateActivityTemplateResponse, error) { + return &activityv1.ValidateActivityTemplateResponse{Valid: true}, nil +} + +func TestRegisterRoutesExposesActivityTemplateContract(t *testing.T) { + gin.SetMode(gin.TestMode) + engine := gin.New() + RegisterRoutes(engine.Group("/api/v1"), &Handler{}) + + actual := make(map[string]struct{}) + for _, route := range engine.Routes() { + actual[route.Method+" "+route.Path] = struct{}{} + } + expected := []string{ + "GET /api/v1/admin/activities/templates", + "POST /api/v1/admin/activities/templates", + "POST /api/v1/admin/activities/templates/validate", + "GET /api/v1/admin/activities/templates/:template_id", + "PUT /api/v1/admin/activities/templates/:template_id", + "PATCH /api/v1/admin/activities/templates/:template_id/status", + "DELETE /api/v1/admin/activities/templates/:template_id", + "GET /api/v1/admin/activities/templates/:template_id/versions", + "POST /api/v1/admin/activities/templates/:template_id/clone", + "GET /api/v1/admin/activities/templates/:template_id/leaderboard", + "GET /api/v1/admin/activities/templates/:template_id/data", + "GET /api/v1/admin/activities/templates/:template_id/data/export", + "GET /api/v1/admin/activities/templates/:template_id/rewards", + "POST /api/v1/admin/activities/templates/:template_id/rewards/:reward_job_id/retry", + "GET /api/v1/admin/activities/templates/:template_id/task-claims", + "POST /api/v1/admin/activities/templates/:template_id/task-claims/:claim_id/retry", + } + for _, route := range expected { + if _, ok := actual[route]; !ok { + t.Errorf("missing route %s; actual=%v", route, actual) + } + } +} + +func TestValidateRouteAcceptsCreateUpdateOrPublishPermission(t *testing.T) { + gin.SetMode(gin.TestMode) + tests := []struct { + permission string + wantStatus int + }{ + {permission: "activity-template:create", wantStatus: http.StatusOK}, + {permission: "activity-template:update", wantStatus: http.StatusOK}, + {permission: "activity-template:publish", wantStatus: http.StatusOK}, + {permission: "activity-template:view", wantStatus: http.StatusForbidden}, + } + for _, tt := range tests { + t.Run(tt.permission, func(t *testing.T) { + engine := gin.New() + engine.Use(func(c *gin.Context) { + c.Set(middleware.ContextPermissions, []string{tt.permission}) + c.Next() + }) + RegisterRoutes(engine.Group("/api/v1"), New(validatePermissionClient{}, nil)) + recorder := httptest.NewRecorder() + request := httptest.NewRequest(http.MethodPost, "/api/v1/admin/activities/templates/validate", strings.NewReader(`{ + "template":{"template_code":"gift_challenge_2026","name":"Gift Challenge"}, + "for_publish":false + }`)) + request.Header.Set("Content-Type", "application/json") + + engine.ServeHTTP(recorder, request) + + if recorder.Code != tt.wantStatus { + t.Fatalf("status = %d, want %d; body=%s", recorder.Code, tt.wantStatus, recorder.Body.String()) + } + }) + } +} diff --git a/server/admin/internal/modules/appconfig/service_test.go b/server/admin/internal/modules/appconfig/service_test.go index 0bb60e71..40e972fb 100644 --- a/server/admin/internal/modules/appconfig/service_test.go +++ b/server/admin/internal/modules/appconfig/service_test.go @@ -18,7 +18,8 @@ func TestH5AppScopeSchemaMigrationCreatesScopedKeys(t *testing.T) { for _, snippet := range []string{ "app_code VARCHAR(32) NOT NULL DEFAULT ''", "is_deleted BOOLEAN NOT NULL DEFAULT FALSE", - "DROP INDEX idx_admin_app_config_group_key", + "INDEX_NAME = 'uk_admin_app_configs_group_key'", + "INDEX_NAME = 'idx_admin_app_config_group_key'", "uk_admin_app_config_app_group_key (app_code, `group`, `key`)", } { if !strings.Contains(sqlText, snippet) { diff --git a/server/admin/internal/modules/financeorder/handler.go b/server/admin/internal/modules/financeorder/handler.go index 7ce85aae..66382562 100644 --- a/server/admin/internal/modules/financeorder/handler.go +++ b/server/admin/internal/modules/financeorder/handler.go @@ -101,6 +101,31 @@ func (h *Handler) GetCoinSellerRechargeExchangeRate(c *gin.Context) { response.OK(c, item) } +func (h *Handler) GetUSDTAddresses(c *gin.Context) { + item, err := h.service.GetUSDTAddresses(shared.ActorFromContext(c), c.Param("app_code")) + if err != nil { + writeServiceError(c, err, "获取 USDT 收款地址失败") + return + } + response.OK(c, item) +} + +func (h *Handler) UpsertUSDTAddress(c *gin.Context) { + var req financeUSDTAddressUpsertRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "USDT 收款地址参数不正确") + return + } + item, err := h.service.UpsertUSDTAddress(shared.ActorFromContext(c), c.Param("app_code"), c.Param("chain"), req) + if err != nil { + writeServiceError(c, err, "保存 USDT 收款地址失败") + return + } + // 收款地址决定真实资金凭证归属,审计资源 ID 同时包含 App 与链,便于后续定位误改来源。 + shared.OperationLogWithResourceID(c, h.audit, "upsert-finance-usdt-address", "admin_app_configs", item.AppCode+":"+item.Chain, "success", "") + response.OK(c, item) +} + func (h *Handler) ReplaceCoinSellerRechargeExchangeRate(c *gin.Context) { var req coinSellerRechargeExchangeRatePolicyRequest if err := c.ShouldBindJSON(&req); err != nil { diff --git a/server/admin/internal/modules/financeorder/routes.go b/server/admin/internal/modules/financeorder/routes.go index 36e0d825..0a353999 100644 --- a/server/admin/internal/modules/financeorder/routes.go +++ b/server/admin/internal/modules/financeorder/routes.go @@ -17,6 +17,8 @@ func RegisterRoutes(protected *gin.RouterGroup, h *Handler) { protected.POST("/admin/finance/orders/coin-seller-recharges", middleware.RequirePermission(permissionCoinSellerRechargeCreate), h.CreateCoinSellerRechargeOrder) protected.POST("/admin/finance/orders/coin-seller-recharges/:order_id/verify", middleware.RequirePermission(permissionCoinSellerRechargeVerify), h.VerifyCoinSellerRechargeOrder) protected.POST("/admin/finance/orders/coin-seller-recharges/:order_id/grant", middleware.RequirePermission(permissionCoinSellerRechargeGrant), h.GrantCoinSellerRechargeOrder) + protected.GET("/admin/finance/usdt-addresses/:app_code", middleware.RequirePermission(permissionCoinSellerRechargeView), h.GetUSDTAddresses) + protected.PUT("/admin/finance/usdt-addresses/:app_code/:chain", middleware.RequirePermission(permissionUSDTAddressUpdate), h.UpsertUSDTAddress) protected.GET("/admin/finance/coin-seller-recharge-exchange-rates/:app_code", middleware.RequirePermission(permissionCoinSellerExchangeRate), h.GetCoinSellerRechargeExchangeRate) protected.PUT("/admin/finance/coin-seller-recharge-exchange-rates/:app_code", middleware.RequirePermission(permissionCoinSellerExchangeRate), h.ReplaceCoinSellerRechargeExchangeRate) } diff --git a/server/admin/internal/modules/financeorder/service.go b/server/admin/internal/modules/financeorder/service.go index ba821f72..6b917019 100644 --- a/server/admin/internal/modules/financeorder/service.go +++ b/server/admin/internal/modules/financeorder/service.go @@ -29,6 +29,7 @@ const ( permissionCoinSellerRechargeCreate = "finance-order:coin-seller-recharge:create" permissionCoinSellerRechargeVerify = "finance-order:coin-seller-recharge:verify" permissionCoinSellerRechargeGrant = "finance-order:coin-seller-recharge:grant" + permissionUSDTAddressUpdate = "finance-order:usdt-address:update" permissionCoinSellerExchangeRate = "coin-seller:exchange-rate" coinSellerRechargeAssetType = "COIN_SELLER_COIN" @@ -261,6 +262,10 @@ func (s *Service) VerifyOrder(ctx context.Context, actor shared.Actor, id uint, if order.GrantStatus == model.CoinSellerRechargeGrantStatusGranted { return nil, repository.ErrCoinSellerRechargeOrderGranted } + receiveAddress, err := s.financeUSDTReceiveAddress(order.AppCode, order.Chain) + if err != nil { + return nil, err + } resp, err := s.wallet.VerifyCoinSellerRechargeReceipt(appctx.WithContext(ctx, order.AppCode), &walletv1.VerifyCoinSellerRechargeReceiptRequest{ RequestId: strings.TrimSpace(requestID), AppCode: order.AppCode, @@ -273,6 +278,7 @@ func (s *Service) VerifyOrder(ctx context.Context, actor shared.Actor, id uint, ProviderCurrencyCode: order.ProviderCurrencyCode, ProviderAmountMinor: order.ProviderAmountMinor, ProviderPayType: order.ProviderPayType, + ReceiveAddress: receiveAddress, }) if err != nil { return nil, err @@ -543,7 +549,12 @@ func (s *Service) verifyReceiptInput(ctx context.Context, input normalizedReceip if s == nil || s.wallet == nil { return coinSellerRechargeReceiptVerificationDTO{}, errors.New("finance order wallet verifier is not configured") } - // admin-server 不直连三方支付和链节点;wallet-service 统一持有 provider 配置、收款地址和查单适配器。 + receiveAddress, err := s.financeUSDTReceiveAddress(input.AppCode, input.Chain) + if err != nil { + return coinSellerRechargeReceiptVerificationDTO{}, err + } + // admin-server 不直连三方支付和链节点;它只把当前 App 的 SQL 地址作为可信配置快照传给 wallet-service, + // wallet-service 继续统一持有 provider 凭证和查单适配器,避免任一服务反向读取对方数据库。 resp, err := s.wallet.VerifyCoinSellerRechargeReceipt(appctx.WithContext(ctx, input.AppCode), &walletv1.VerifyCoinSellerRechargeReceiptRequest{ RequestId: strings.TrimSpace(requestID), AppCode: input.AppCode, @@ -556,6 +567,7 @@ func (s *Service) verifyReceiptInput(ctx context.Context, input normalizedReceip ProviderCurrencyCode: input.ProviderCurrencyCode, ProviderAmountMinor: input.ProviderAmountMinor, ProviderPayType: input.ProviderPayType, + ReceiveAddress: receiveAddress, }) if err != nil { return coinSellerRechargeReceiptVerificationDTO{}, err @@ -889,6 +901,8 @@ func normalizeRechargeProvider(providerCode string, chain string) (string, strin return "usdt", "BSC", nil case "usdt_c2c", "c2c": return "usdt", "C2C", nil + case "usdt_offchain", "offchain", "binance_offchain": + return "usdt", "OFFCHAIN", nil default: return "", "", errors.New("充值方式不正确") } @@ -906,6 +920,8 @@ func normalizeRechargeChain(chain string) string { return "BSC" case "c2c", "usdt_c2c": return "C2C" + case "offchain", "off_chain", "usdt_offchain", "binance_offchain": + return "OFFCHAIN" default: return "" } @@ -922,6 +938,8 @@ func receiptProviderCode(order model.CoinSellerRechargeOrder) string { return "usdt_bep20" case "C2C": return "usdt_c2c" + case "OFFCHAIN": + return "usdt_offchain" default: return "usdt" } @@ -948,6 +966,8 @@ func receiptChain(order model.CoinSellerRechargeOrder) string { return "bep20" case "C2C": return "c2c" + case "OFFCHAIN": + return "offchain" default: return "" } diff --git a/server/admin/internal/modules/financeorder/service_test.go b/server/admin/internal/modules/financeorder/service_test.go index ac8b8120..47af9538 100644 --- a/server/admin/internal/modules/financeorder/service_test.go +++ b/server/admin/internal/modules/financeorder/service_test.go @@ -38,6 +38,23 @@ func TestNormalizeCreateOrderRequiresExplicitUSDTChain(t *testing.T) { } } +func TestNormalizeCreateOrderSupportsExplicitBinanceOffchain(t *testing.T) { + input, err := normalizeCreateOrderRequest(createCoinSellerRechargeOrderRequest{ + AppCode: "aslan", + TargetUserID: "4337389", + USDAmount: 300.14, + ProviderCode: "usdt", + Chain: "binance_offchain", + ExternalOrderNo: "391252658053", + }) + if err != nil { + t.Fatalf("normalize explicit Binance Off-chain failed: %v", err) + } + if input.ProviderCode != "usdt" || input.Chain != "OFFCHAIN" || input.USDMinorAmount != 30014 || receiptVerificationProviderCode(normalizedReceiptVerificationInput{ProviderCode: input.ProviderCode, Chain: input.Chain}) != "usdt_offchain" { + t.Fatalf("explicit Binance Off-chain mapping mismatch: %+v", input) + } +} + func TestNormalizeCreateOrderRequiresProviderCurrencyAmount(t *testing.T) { for _, providerCode := range []string{"mifapay", "v5pay"} { _, err := normalizeCreateOrderRequest(createCoinSellerRechargeOrderRequest{ diff --git a/server/admin/internal/modules/financeorder/usdt_address.go b/server/admin/internal/modules/financeorder/usdt_address.go new file mode 100644 index 00000000..6641bf0b --- /dev/null +++ b/server/admin/internal/modules/financeorder/usdt_address.go @@ -0,0 +1,198 @@ +package financeorder + +import ( + "errors" + "fmt" + "sort" + "strings" + + "hyapp-admin-server/internal/appctx" + "hyapp-admin-server/internal/model" + "hyapp-admin-server/internal/modules/shared" + + "gorm.io/gorm" +) + +const financeUSDTAddressGroup = "finance-usdt-address" + +var financeUSDTChainOrder = map[string]int{ + "TRON": 0, + "BSC": 1, +} + +type financeUSDTAddressDTO struct { + Chain string `json:"chain"` + Address string `json:"address"` + UpdatedAtMS int64 `json:"updatedAtMs"` +} + +type financeUSDTAddressesDTO struct { + AppCode string `json:"appCode"` + Items []financeUSDTAddressDTO `json:"items"` +} + +type financeUSDTAddressUpsertRequest struct { + Address string `json:"address"` +} + +type financeUSDTAddressUpsertDTO struct { + AppCode string `json:"appCode"` + Chain string `json:"chain"` + Address string `json:"address"` + UpdatedAtMS int64 `json:"updatedAtMs"` +} + +// GetUSDTAddresses 只读取当前 App 自己持有的配置行,不继承空 app_code 的历史基线。 +// 收款地址一旦跨 App 回退,运营会拿到另一账套的地址并让链上订单校验必然失败。 +func (s *Service) GetUSDTAddresses(actor shared.Actor, appCode string) (*financeUSDTAddressesDTO, error) { + if s == nil || s.store == nil { + return nil, errors.New("admin store is not configured") + } + if actor.UserID == 0 || !hasPermission(actor.Permissions, permissionCoinSellerRechargeView) { + return nil, errCoinSellerRechargeForbidden + } + if strings.TrimSpace(appCode) == "" { + return nil, errInvalidCoinSellerRechargeOrderInput + } + appCode = appctx.Normalize(appCode) + // App 范围是后台用户的数据边界;即使调用方绕过页面手写 app_code,也不能读取未授权账套地址。 + access, err := s.store.AppAccessForUser(actor.UserID) + if err != nil { + return nil, err + } + if !access.Allows(appCode) { + return nil, errCoinSellerRechargeForbidden + } + configs, err := s.store.ListOwnedAppConfigs(appCode, financeUSDTAddressGroup) + if err != nil { + return nil, err + } + items, err := financeUSDTAddressesFromConfigs(configs) + if err != nil { + return nil, err + } + return &financeUSDTAddressesDTO{AppCode: appCode, Items: items}, nil +} + +// UpsertUSDTAddress 把收款地址写入现有 app-scoped 配置表;唯一键确保更新是单行 upsert, +// 不新增地址历史副本,也不会覆盖其他 App。生产查单会在每次校验前重新读取该行。 +func (s *Service) UpsertUSDTAddress(actor shared.Actor, appCode string, chain string, req financeUSDTAddressUpsertRequest) (*financeUSDTAddressUpsertDTO, error) { + if s == nil || s.store == nil { + return nil, errors.New("admin store is not configured") + } + if actor.UserID == 0 || !hasPermission(actor.Permissions, permissionUSDTAddressUpdate) { + return nil, errCoinSellerRechargeForbidden + } + if strings.TrimSpace(appCode) == "" { + return nil, errInvalidCoinSellerRechargeOrderInput + } + appCode = appctx.Normalize(appCode) + chain = strings.ToUpper(strings.TrimSpace(chain)) + address := strings.TrimSpace(req.Address) + if _, supported := financeUSDTChainOrder[chain]; !supported { + return nil, errors.New("USDT 链不正确") + } + if !validFinanceUSDTAddress(chain, address) { + return nil, errors.New("USDT 收款地址不正确") + } + access, err := s.store.AppAccessForUser(actor.UserID) + if err != nil { + return nil, err + } + if !access.Allows(appCode) { + return nil, errCoinSellerRechargeForbidden + } + if err := s.store.UpsertScopedAppConfigs(appCode, []model.AppConfig{{ + Group: financeUSDTAddressGroup, + Key: chain, + Value: address, + Description: "财务 USDT 收款地址", + }}); err != nil { + return nil, err + } + item, err := s.store.GetOwnedAppConfig(appCode, financeUSDTAddressGroup, chain) + if err != nil { + return nil, err + } + return &financeUSDTAddressUpsertDTO{AppCode: appCode, Chain: chain, Address: item.Value, UpdatedAtMS: item.UpdatedAtMS}, nil +} + +// financeUSDTReceiveAddress 把订单校验链映射到当前 SQL 地址。Off-chain 虽没有公链 hash, +// 但 Binance Deposit History 仍记录实际 TRX 收款地址,因此必须复用 TRON 配置;C2C Pay 则没有地址。 +func (s *Service) financeUSDTReceiveAddress(appCode string, receiptChain string) (string, error) { + addressChain := "" + switch strings.ToUpper(strings.TrimSpace(receiptChain)) { + case "TRON": + addressChain = "TRON" + case "BSC": + addressChain = "BSC" + case "OFFCHAIN": + addressChain = "TRON" + case "", "C2C": + return "", nil + default: + return "", errors.New("USDT 链不正确") + } + item, err := s.store.GetOwnedAppConfig(appctx.Normalize(appCode), financeUSDTAddressGroup, addressChain) + if errors.Is(err, gorm.ErrRecordNotFound) { + return "", fmt.Errorf("当前 APP 未配置 %s USDT 收款地址", addressChain) + } + if err != nil { + return "", err + } + address := strings.TrimSpace(item.Value) + if !validFinanceUSDTAddress(addressChain, address) { + return "", fmt.Errorf("%s USDT 收款地址配置不正确", addressChain) + } + return address, nil +} + +func financeUSDTAddressesFromConfigs(configs []model.AppConfig) ([]financeUSDTAddressDTO, error) { + items := make([]financeUSDTAddressDTO, 0, len(configs)) + for _, config := range configs { + chain := strings.ToUpper(strings.TrimSpace(config.Key)) + if _, supported := financeUSDTChainOrder[chain]; !supported { + // 同组未来若新增其他链,旧版本必须安全忽略,不能把未知地址误标成 TRON/BSC。 + continue + } + address := strings.TrimSpace(config.Value) + if address == "" { + continue + } + if !validFinanceUSDTAddress(chain, address) { + return nil, fmt.Errorf("%s USDT 收款地址配置不正确", chain) + } + items = append(items, financeUSDTAddressDTO{Chain: chain, Address: address, UpdatedAtMS: config.UpdatedAtMS}) + } + sort.Slice(items, func(i, j int) bool { + return financeUSDTChainOrder[items[i].Chain] < financeUSDTChainOrder[items[j].Chain] + }) + return items, nil +} + +func validFinanceUSDTAddress(chain string, address string) bool { + switch chain { + case "TRON": + if len(address) != 34 || address[0] != 'T' { + return false + } + for _, char := range address { + if !strings.ContainsRune("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", char) { + return false + } + } + return true + case "BSC": + if len(address) != 42 || !strings.HasPrefix(address, "0x") { + return false + } + for _, char := range address[2:] { + if !strings.ContainsRune("0123456789abcdefABCDEF", char) { + return false + } + } + return true + default: + return false + } +} diff --git a/server/admin/internal/modules/financeorder/usdt_address_test.go b/server/admin/internal/modules/financeorder/usdt_address_test.go new file mode 100644 index 00000000..da8ef3d5 --- /dev/null +++ b/server/admin/internal/modules/financeorder/usdt_address_test.go @@ -0,0 +1,62 @@ +package financeorder + +import ( + "testing" + + "hyapp-admin-server/internal/model" + "hyapp-admin-server/internal/repository" + + "github.com/DATA-DOG/go-sqlmock" + "gorm.io/driver/mysql" + "gorm.io/gorm" +) + +func TestFinanceUSDTAddressesFromConfigsKeepsSupportedValidChainsInBusinessOrder(t *testing.T) { + items, err := financeUSDTAddressesFromConfigs([]model.AppConfig{ + {Key: "BSC", Value: "0x55d398326f99059fF775485246999027B3197955", UpdatedAtMS: 200}, + {Key: "future-chain", Value: "not-exposed", UpdatedAtMS: 300}, + {Key: "TRON", Value: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", UpdatedAtMS: 100}, + }) + if err != nil { + t.Fatalf("normalize USDT address configs failed: %v", err) + } + if len(items) != 2 || items[0].Chain != "TRON" || items[1].Chain != "BSC" { + t.Fatalf("USDT addresses must expose only supported chains in business order: %+v", items) + } +} + +func TestFinanceUSDTAddressesFromConfigsRejectsMalformedStoredAddress(t *testing.T) { + _, err := financeUSDTAddressesFromConfigs([]model.AppConfig{{Key: "TRON", Value: "wrong-app-address"}}) + if err == nil { + t.Fatal("malformed SQL address must fail closed instead of being copied into a recharge order") + } +} + +func TestFinanceUSDTReceiveAddressMapsOffchainToCurrentTRONSQLRow(t *testing.T) { + sqlDB, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("create sql mock failed: %v", err) + } + defer func() { _ = sqlDB.Close() }() + gormDB, err := gorm.Open(mysql.New(mysql.Config{Conn: sqlDB, SkipInitializeWithVersion: true}), &gorm.Config{}) + if err != nil { + t.Fatalf("create gorm db failed: %v", err) + } + const address = "TLv7wERsM42ZeobMrrKVC5C72d3gFUa44J" + mock.ExpectQuery("SELECT \\* FROM `admin_app_configs` WHERE app_code = \\? AND `group` = \\? AND `key` = \\? AND is_deleted = FALSE"). + WithArgs("aslan", financeUSDTAddressGroup, "TRON", 1). + WillReturnRows(sqlmock.NewRows([]string{"id", "app_code", "group", "key", "value", "description", "is_deleted", "created_at_ms", "updated_at_ms"}). + AddRow(9, "aslan", financeUSDTAddressGroup, "TRON", address, "财务 USDT 收款地址", false, int64(100), int64(200))) + + service := NewService(repository.New(gormDB), nil, nil) + got, err := service.financeUSDTReceiveAddress(" ASLAN ", "OFFCHAIN") + if err != nil { + t.Fatalf("load current Off-chain TRON address failed: %v", err) + } + if got != address { + t.Fatalf("Off-chain must use current app-scoped TRON SQL address, got %q", got) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations mismatch: %v", err) + } +} diff --git a/server/admin/internal/repository/role_permission_matrix.go b/server/admin/internal/repository/role_permission_matrix.go index 1c98263d..8b7f8e02 100644 --- a/server/admin/internal/repository/role_permission_matrix.go +++ b/server/admin/internal/repository/role_permission_matrix.go @@ -31,6 +31,7 @@ var ( "finance-order:coin-seller-recharge:create", "finance-order:coin-seller-recharge:verify", "finance-order:coin-seller-recharge:grant", + "finance-order:usdt-address:update", "finance-withdrawal:view", "finance-withdrawal:audit", } @@ -124,12 +125,15 @@ var ( } activityRead = []string{ + "activity-template:view", "activity-template:data", "daily-task:view", "first-recharge-reward:view", "cumulative-recharge-reward:view", "invite-activity-reward:view", "seven-day-checkin:view", "room-rocket:view", "room-turnover-reward:view", "wheel:view", "weekly-star:view", "agency-opening:view", "user-leaderboard:view", "red-packet:view", "cp-config:view", "cp-weekly-rank:view", "vip-config:view", "achievement:view", } activityManage = []string{ + "activity-template:create", "activity-template:update", "activity-template:publish", "activity-template:delete", + "activity-template:export", "activity-template:retry", "daily-task:create", "daily-task:update", "daily-task:status", "first-recharge-reward:update", "cumulative-recharge-reward:update", "invite-activity-reward:update", "seven-day-checkin:update", "room-rocket:update", "room-turnover-reward:update", "room-turnover-reward:retry", diff --git a/server/admin/internal/repository/seed.go b/server/admin/internal/repository/seed.go index bb240505..8c1385ab 100644 --- a/server/admin/internal/repository/seed.go +++ b/server/admin/internal/repository/seed.go @@ -142,6 +142,7 @@ var defaultPermissions = []model.Permission{ {Name: "币商充值订单创建", Code: "finance-order:coin-seller-recharge:create", Kind: "button"}, {Name: "币商充值订单校验", Code: "finance-order:coin-seller-recharge:verify", Kind: "button"}, {Name: "币商充值订单发放", Code: "finance-order:coin-seller-recharge:grant", Kind: "button"}, + {Name: "USDT 收款地址编辑", Code: "finance-order:usdt-address:update", Kind: "button", Description: "允许按 APP 新增或修改 USDT 收款地址"}, {Name: "用户提现申请查看", Code: "finance-withdrawal:view", Kind: "menu"}, {Name: "用户提现申请审核", Code: "finance-withdrawal:audit", Kind: "button"}, {Name: "内购配置查看", Code: "payment-product:view", Kind: "menu"}, @@ -173,6 +174,14 @@ var defaultPermissions = []model.Permission{ {Name: "每日任务创建", Code: "daily-task:create", Kind: "button"}, {Name: "每日任务更新", Code: "daily-task:update", Kind: "button"}, {Name: "每日任务状态", Code: "daily-task:status", Kind: "button"}, + {Name: "活动模版查看", Code: "activity-template:view", Kind: "menu"}, + {Name: "活动模版创建", Code: "activity-template:create", Kind: "button"}, + {Name: "活动模版更新", Code: "activity-template:update", Kind: "button"}, + {Name: "活动模版发布", Code: "activity-template:publish", Kind: "button"}, + {Name: "活动模版删除", Code: "activity-template:delete", Kind: "button"}, + {Name: "活动模版数据", Code: "activity-template:data", Kind: "button"}, + {Name: "活动模版导出", Code: "activity-template:export", Kind: "button"}, + {Name: "活动模版重试", Code: "activity-template:retry", Kind: "button"}, {Name: "成就配置查看", Code: "achievement:view", Kind: "menu"}, {Name: "成就配置创建", Code: "achievement:create", Kind: "button"}, {Name: "成就配置更新", Code: "achievement:update", Kind: "button"}, @@ -270,7 +279,7 @@ func (s *Store) seedMenus() error { {Title: "资源管理", Code: "resources", Path: "", Icon: "inventory", PermissionCode: "", Sort: 60, Visible: true}, {Title: "运营管理", Code: "operations", Path: "", Icon: "operations", PermissionCode: "", Sort: 70, Visible: true}, {Title: "支付管理", Code: "payment", Path: "", Icon: "wallet", PermissionCode: "", Sort: 80, Visible: true}, - {Title: "活动管理", Code: "activities", Path: "", Icon: "campaign", PermissionCode: "", Sort: 90, Visible: true}, + {Title: "运营活动", Code: "activities", Path: "", Icon: "campaign", PermissionCode: "", Sort: 90, Visible: true}, {Title: "游戏管理", Code: "games", Path: "", Icon: "sports_esports", PermissionCode: "", Sort: 100, Visible: true}, {Title: "地区管理", Code: "geo", Path: "", Icon: "map", PermissionCode: "", Sort: 110, Visible: true}, {Title: "后台设置", Code: "system", Path: "", Icon: "settings", PermissionCode: "", Sort: 120, Visible: true}, @@ -361,6 +370,7 @@ func (s *Store) seedMenus() error { {ParentID: &paymentID, Title: "三方临时支付链接", Code: "payment-temporary-links", Path: "/payment/temporary-links", Icon: "receipt", PermissionCode: "payment-temporary-link:view", Sort: 70, Visible: true}, {ParentID: &paymentID, Title: "支付内购商品", Code: "payment-recharge-products", Path: "/payment/recharge-products", Icon: "wallet", PermissionCode: "payment-product:view", Sort: 71, Visible: true}, {ParentID: &paymentID, Title: "币商充值订单", Code: "finance-coin-seller-recharge-orders", Path: "/finance/orders/coin-seller-recharges", Icon: "receipt", PermissionCode: "finance-order:coin-seller-recharge:view", Sort: 72, Visible: true}, + {ParentID: &activityID, Title: "活动模版", Code: "activity-template", Path: "/activities/templates", Icon: "campaign", PermissionCode: "activity-template:view", Sort: 68, Visible: true}, {ParentID: &activityID, Title: "每日任务", Code: "daily-task-list", Path: "/activities/daily-tasks", Icon: "task", PermissionCode: "daily-task:view", Sort: 69, Visible: true}, {ParentID: &activityID, Title: "注册奖励", Code: "registration-reward", Path: "/activities/registration-reward", Icon: "gift", PermissionCode: "registration-reward:view", Sort: 70, Visible: true}, {ParentID: &activityID, Title: "成就配置", Code: "achievement-config", Path: "/activities/achievements", Icon: "military_tech", PermissionCode: "achievement:view", Sort: 71, Visible: true}, diff --git a/server/admin/internal/repository/seed_test.go b/server/admin/internal/repository/seed_test.go index ba5877c5..a06e42ff 100644 --- a/server/admin/internal/repository/seed_test.go +++ b/server/admin/internal/repository/seed_test.go @@ -201,6 +201,26 @@ func TestGiftRecordPermissionMigrationExtendsOperationsReadRoles(t *testing.T) { } } +func TestActivityTemplatePermissionMigrationExtendsManagedRoles(t *testing.T) { + content, err := os.ReadFile("../../migrations/096_activity_template_navigation.sql") + if err != nil { + t.Fatalf("read activity template permission migration: %v", err) + } + sqlText := string(content) + for _, token := range []string{ + "'活动模版'", "'activity-template'", "'/activities/templates'", + "'platform-admin', 'ops-admin', 'product-lead'", + "'operations-specialist', 'product-specialist', 'auditor', 'readonly'", + "'activity-template:view'", "'activity-template:create'", "'activity-template:update'", + "'activity-template:publish'", "'activity-template:delete'", "'activity-template:data'", + "'activity-template:export'", "'activity-template:retry'", + } { + if !strings.Contains(sqlText, token) { + t.Fatalf("activity template migration missing %s", token) + } + } +} + func assertMigrationPermissionCodes(t *testing.T, roleCode string, sqlList string) { t.Helper() quotedCode := regexp.MustCompile(`'([a-z0-9:-]+)'`) @@ -210,9 +230,13 @@ func assertMigrationPermissionCodes(t *testing.T, roleCode string, sqlList strin actual = append(actual, match[1]) } expected := append([]string(nil), defaultRolePermissionCodes(roleCode)...) - // 093 已在生产执行,不能为了新增页面回写旧迁移;095 以增量方式给同一批运营只读岗位补 gift-record:view。 - // 这里仍校验 093 的原始精确矩阵,新权限由上面的 095 专项测试锁定。 - expected = stringSetDifference(expected, []string{"gift-record:view"}) + // 093 已在生产执行,不能为了新增页面回写旧迁移;095/096 以增量方式补充页面权限。 + // 这里仍校验 093 的原始精确矩阵,新权限由上面的专项迁移测试锁定。 + expected = stringSetDifference(expected, []string{ + "gift-record:view", + "activity-template:view", "activity-template:create", "activity-template:update", "activity-template:publish", + "activity-template:delete", "activity-template:data", "activity-template:export", "activity-template:retry", + }) sort.Strings(actual) sort.Strings(expected) if !reflect.DeepEqual(actual, expected) { diff --git a/server/admin/internal/response/codes.go b/server/admin/internal/response/codes.go index 88f174d3..c6b16195 100644 --- a/server/admin/internal/response/codes.go +++ b/server/admin/internal/response/codes.go @@ -6,5 +6,6 @@ const ( CodeUnauthorized = 40100 CodeForbidden = 40300 CodeNotFound = 40400 + CodeConflict = 40900 CodeServerError = 50000 ) diff --git a/server/admin/internal/response/error.go b/server/admin/internal/response/error.go index a3e15ccd..47662d8b 100644 --- a/server/admin/internal/response/error.go +++ b/server/admin/internal/response/error.go @@ -26,6 +26,10 @@ func NotFound(c *gin.Context, message string) { Fail(c, http.StatusNotFound, CodeNotFound, message) } +func Conflict(c *gin.Context, message string) { + Fail(c, http.StatusConflict, CodeConflict, message) +} + func ServerError(c *gin.Context, message string) { Fail(c, http.StatusInternalServerError, CodeServerError, message) } diff --git a/server/admin/internal/router/router.go b/server/admin/internal/router/router.go index 4eb70085..d1b3b74e 100644 --- a/server/admin/internal/router/router.go +++ b/server/admin/internal/router/router.go @@ -4,6 +4,7 @@ import ( "hyapp-admin-server/internal/config" "hyapp-admin-server/internal/middleware" "hyapp-admin-server/internal/modules/achievementconfig" + "hyapp-admin-server/internal/modules/activitytemplate" "hyapp-admin-server/internal/modules/adminuser" "hyapp-admin-server/internal/modules/agencyopening" "hyapp-admin-server/internal/modules/appconfig" @@ -70,6 +71,7 @@ import ( type Handlers struct { AdminUser *adminuser.Handler AgencyOpening *agencyopening.Handler + ActivityTemplate *activitytemplate.Handler AchievementConfig *achievementconfig.Handler AppConfig *appconfig.Handler AppRegistry *appregistry.Handler @@ -142,6 +144,7 @@ func New(cfg config.Config, auth *service.AuthService, store *repository.Store, authroutes.RegisterRoutes(api, protected, h.Auth) agencyopening.RegisterRoutes(appProtected, h.AgencyOpening) + activitytemplate.RegisterRoutes(appProtected, h.ActivityTemplate) achievementconfig.RegisterRoutes(appProtected, h.AchievementConfig) coinledger.RegisterRoutes(appProtected, h.CoinLedger) menu.RegisterRoutes(protected, h.Menu) @@ -185,7 +188,9 @@ func New(cfg config.Config, auth *service.AuthService, store *repository.Store, prettyid.RegisterRoutes(appProtected, h.PrettyID) job.RegisterRoutes(protected, h.Job) levelconfig.RegisterRoutes(appProtected, h.LevelConfig) - opscenter.RegisterRoutes(appProtected, h.OpsCenter) + // Ops Center 是跨 App 工作台:它必须先读取应用目录,再按 app_code 扇出查询。 + // 这里仅沿用登录、审计和模块内 lucky-gift 权限,不能要求尚未选出的 X-App-Code。 + opscenter.RegisterRoutes(protected, h.OpsCenter) upload.RegisterRoutes(appProtected, h.Upload) search.RegisterRoutes(protected, h.Search) sevendaycheckin.RegisterRoutes(appProtected, h.SevenDayCheckIn) diff --git a/server/admin/internal/router/router_test.go b/server/admin/internal/router/router_test.go new file mode 100644 index 00000000..7f8fc91d --- /dev/null +++ b/server/admin/internal/router/router_test.go @@ -0,0 +1,46 @@ +package router + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "hyapp-admin-server/internal/config" + "hyapp-admin-server/internal/modules/opscenter" + "hyapp-admin-server/internal/service" + + "github.com/gin-gonic/gin" +) + +func TestOpsCenterAppBootstrapDoesNotRequireAppCode(t *testing.T) { + gin.SetMode(gin.TestMode) + auth := service.NewAuthService("ops-center-router-test-secret", time.Hour) + token, _, err := auth.GenerateAccessToken(7, "operator", nil) + if err != nil { + t.Fatalf("generate access token: %v", err) + } + + engine := New(config.Config{}, auth, nil, Handlers{OpsCenter: opscenter.New(nil, nil)}) + request := httptest.NewRequest(http.MethodGet, "/api/v1/admin/ops-center/apps", nil) + request.Header.Set("Authorization", "Bearer "+token) + response := httptest.NewRecorder() + engine.ServeHTTP(response, request) + + // Ops Center 先读取跨 App 目录,再按 app_code 查询每个应用的数据;启动接口若要求 + // X-App-Code,就会形成“先拿到 App 才能发 header、先发 header 才能拿 App”的死锁。 + if response.Code != http.StatusOK { + t.Fatalf("status = %d body=%s", response.Code, response.Body.String()) + } + if body := response.Body.String(); !strings.Contains(body, `"app_code":"yumi"`) || !strings.Contains(body, `"app_code":"aslan"`) { + t.Fatalf("bootstrap app catalog missing fixed apps: %s", body) + } + + // 从 appProtected 移出只解除 App 选择依赖;路由仍必须位于 protected 下,不能变成匿名应用目录。 + unauthorized := httptest.NewRecorder() + engine.ServeHTTP(unauthorized, httptest.NewRequest(http.MethodGet, "/api/v1/admin/ops-center/apps", nil)) + if unauthorized.Code != http.StatusUnauthorized { + t.Fatalf("unauthorized status = %d body=%s", unauthorized.Code, unauthorized.Body.String()) + } +} diff --git a/server/admin/migrations/086_app_config_app_scope.sql b/server/admin/migrations/086_app_config_app_scope.sql index 0f02b786..bfc8325d 100644 --- a/server/admin/migrations/086_app_config_app_scope.sql +++ b/server/admin/migrations/086_app_config_app_scope.sql @@ -2,10 +2,58 @@ SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; -- 历史 admin_app_configs 没有租户列,所有 App 共同读取同一行。迁移把这些行保留为 app_code='' -- 的只读默认基线:未知或未来新增 App 仍能读取原配置,后续写操作只创建当前 App 的 scoped override。 --- 同一个 key 可以同时存在一行 legacy 基线和多行 App override;三元唯一键是隔离写入的最终兜底。 -ALTER TABLE admin_app_configs - ADD COLUMN app_code VARCHAR(32) NOT NULL DEFAULT '' COMMENT '应用编码;空值仅表示迁移前的只读默认基线' AFTER id, - ADD COLUMN is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '当前 App 删除墓碑;用于屏蔽默认基线' AFTER description, - DROP INDEX idx_admin_app_config_group_key, - ADD UNIQUE KEY uk_admin_app_config_app_group_key (app_code, `group`, `key`), - ADD KEY idx_admin_app_configs_app_group (app_code, `group`); +-- 早期 AutoMigrate 和 024 SQL 使用过两个不同的 legacy 唯一索引名;每一步均按元数据执行, +-- 使全新数据库、任一历史形态以及失败后重跑都收敛到同一三元唯一键。 +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND COLUMN_NAME = 'app_code') = 0, + 'ALTER TABLE admin_app_configs ADD COLUMN app_code VARCHAR(32) NOT NULL DEFAULT '''' COMMENT ''应用编码;空值仅表示迁移前的只读默认基线'' AFTER id', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND COLUMN_NAME = 'is_deleted') = 0, + 'ALTER TABLE admin_app_configs ADD COLUMN is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT ''当前 App 删除墓碑;用于屏蔽默认基线'' AFTER description', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND INDEX_NAME = 'uk_admin_app_configs_group_key') > 0, + 'ALTER TABLE admin_app_configs DROP INDEX uk_admin_app_configs_group_key', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND INDEX_NAME = 'idx_admin_app_config_group_key') > 0, + 'ALTER TABLE admin_app_configs DROP INDEX idx_admin_app_config_group_key', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND INDEX_NAME = 'uk_admin_app_config_app_group_key') = 0, + 'ALTER TABLE admin_app_configs ADD UNIQUE KEY uk_admin_app_config_app_group_key (app_code, `group`, `key`)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'admin_app_configs' AND INDEX_NAME = 'idx_admin_app_configs_app_group') = 0, + 'ALTER TABLE admin_app_configs ADD KEY idx_admin_app_configs_app_group (app_code, `group`)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/server/admin/migrations/093_role_permission_matrix.sql b/server/admin/migrations/093_role_permission_matrix.sql index 5e9bd527..276f0e5d 100644 --- a/server/admin/migrations/093_role_permission_matrix.sql +++ b/server/admin/migrations/093_role_permission_matrix.sql @@ -95,7 +95,7 @@ JOIN admin_permissions permission WHERE role.code = 'ops-admin' AND permission.code IN ( 'overview:view', - 'finance-order:coin-seller-recharge:view', 'finance-order:coin-seller-recharge:create', 'finance-order:coin-seller-recharge:verify', 'finance-order:coin-seller-recharge:grant', + 'finance-order:coin-seller-recharge:view', 'finance-order:coin-seller-recharge:create', 'finance-order:coin-seller-recharge:verify', 'finance-order:coin-seller-recharge:grant', 'finance-order:usdt-address:update', 'finance-withdrawal:view', 'finance-withdrawal:audit', 'app-user:view', 'app-user:export', 'app-user:update', 'app-user:level', 'app-user:status', 'app-user:password', 'level-config:view', 'level-config:update', 'pretty-id:view', 'pretty-id:update', 'pretty-id:grant', @@ -146,7 +146,7 @@ JOIN admin_permissions permission WHERE role.code = 'operations-specialist' AND permission.code IN ( 'overview:view', - 'finance-order:coin-seller-recharge:view', 'finance-order:coin-seller-recharge:create', 'finance-order:coin-seller-recharge:verify', 'finance-order:coin-seller-recharge:grant', + 'finance-order:coin-seller-recharge:view', 'finance-order:coin-seller-recharge:create', 'finance-order:coin-seller-recharge:verify', 'finance-order:coin-seller-recharge:grant', 'finance-order:usdt-address:update', 'finance-withdrawal:view', 'finance-withdrawal:audit', 'app-user:view', 'app-user:export', 'app-user:update', 'app-user:level', 'app-user:status', 'app-user:password', 'level-config:view', 'level-config:update', 'pretty-id:view', 'pretty-id:update', 'pretty-id:grant', diff --git a/server/admin/migrations/096_activity_template_navigation.sql b/server/admin/migrations/096_activity_template_navigation.sql new file mode 100644 index 00000000..c93fc74b --- /dev/null +++ b/server/admin/migrations/096_activity_template_navigation.sql @@ -0,0 +1,62 @@ +SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 活动模版配置事实由 activity-service 持有;后台仅提供 RBAC、审计和 HTTP 到 gRPC 的协议适配。 +SET @now_ms = CAST(UNIX_TIMESTAMP(UTC_TIMESTAMP(3)) * 1000 AS UNSIGNED); + +INSERT INTO admin_permissions (name, code, kind, description, created_at_ms, updated_at_ms) VALUES + ('活动模版查看', 'activity-template:view', 'menu', '', @now_ms, @now_ms), + ('活动模版创建', 'activity-template:create', 'button', '', @now_ms, @now_ms), + ('活动模版更新', 'activity-template:update', 'button', '', @now_ms, @now_ms), + ('活动模版发布', 'activity-template:publish', 'button', '', @now_ms, @now_ms), + ('活动模版删除', 'activity-template:delete', 'button', '', @now_ms, @now_ms), + ('活动模版数据', 'activity-template:data', 'button', '查看活动聚合数据、榜单与奖励发放记录', @now_ms, @now_ms), + ('活动模版导出', 'activity-template:export', 'button', '导出受时间范围和维度上限约束的活动聚合数据', @now_ms, @now_ms), + ('活动模版重试', 'activity-template:retry', 'button', '重试失败的活动榜单奖励发放任务', @now_ms, @now_ms) +ON DUPLICATE KEY UPDATE + name = VALUES(name), + kind = VALUES(kind), + description = VALUES(description), + updated_at_ms = @now_ms; + +-- parent code 保持 activities 兼容既有路径和角色,但展示名按本期产品信息架构统一为“运营活动”。 +INSERT INTO admin_menus (parent_id, title, code, path, icon, permission_code, sort, visible, created_at_ms, updated_at_ms) VALUES + (NULL, '运营活动', 'activities', '', 'campaign', '', 90, TRUE, @now_ms, @now_ms) +ON DUPLICATE KEY UPDATE + title = VALUES(title), + path = VALUES(path), + icon = VALUES(icon), + permission_code = VALUES(permission_code), + sort = VALUES(sort), + visible = VALUES(visible), + updated_at_ms = @now_ms; + +INSERT INTO admin_menus (parent_id, title, code, path, icon, permission_code, sort, visible, created_at_ms, updated_at_ms) +SELECT parent.id, '活动模版', 'activity-template', '/activities/templates', 'campaign', 'activity-template:view', 68, TRUE, @now_ms, @now_ms +FROM admin_menus parent +WHERE parent.code = 'activities' +ON DUPLICATE KEY UPDATE + parent_id = VALUES(parent_id), + title = VALUES(title), + path = VALUES(path), + icon = VALUES(icon), + permission_code = VALUES(permission_code), + sort = VALUES(sort), + visible = VALUES(visible), + updated_at_ms = @now_ms; + +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT admin_role.id, admin_permission.id +FROM admin_roles admin_role +JOIN admin_permissions admin_permission +WHERE admin_role.code IN ('platform-admin', 'ops-admin', 'product-lead') + AND admin_permission.code IN ( + 'activity-template:view', 'activity-template:create', 'activity-template:update', 'activity-template:publish', + 'activity-template:delete', 'activity-template:data', 'activity-template:export', 'activity-template:retry' + ); + +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT admin_role.id, admin_permission.id +FROM admin_roles admin_role +JOIN admin_permissions admin_permission +WHERE admin_role.code IN ('operations-specialist', 'product-specialist', 'auditor', 'readonly') + AND admin_permission.code IN ('activity-template:view', 'activity-template:data'); diff --git a/server/admin/migrations/097_finance_usdt_address_update_permission.sql b/server/admin/migrations/097_finance_usdt_address_update_permission.sql new file mode 100644 index 00000000..bad2f2ee --- /dev/null +++ b/server/admin/migrations/097_finance_usdt_address_update_permission.sql @@ -0,0 +1,19 @@ +-- 收款地址是按 APP 隔离的财务敏感配置;独立写权限避免仅有订单查看权限的账号修改校验口径。 +-- 迁移只通过角色 code、权限 code 唯一索引写少量元数据,不扫描订单或配置业务表。 +SET @now_ms = CAST(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000 AS UNSIGNED); + +INSERT INTO admin_permissions (name, code, kind, description, created_at_ms, updated_at_ms) +VALUES ('USDT 收款地址编辑', 'finance-order:usdt-address:update', 'button', '允许按 APP 新增或修改 USDT 收款地址', @now_ms, @now_ms) +ON DUPLICATE KEY UPDATE + name = VALUES(name), + kind = VALUES(kind), + description = VALUES(description), + updated_at_ms = @now_ms; + +-- 平台管理员、运营负责人和运营专员原本都能创建并校验币商充值订单;地址维护沿用同一岗位边界。 +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT role.id, permission.id +FROM admin_roles role +JOIN admin_permissions permission +WHERE role.code IN ('platform-admin', 'ops-admin', 'operations-specialist') + AND permission.code = 'finance-order:usdt-address:update'; diff --git a/services/activity-service/configs/config.docker.yaml b/services/activity-service/configs/config.docker.yaml index 7ceff219..356f44a4 100644 --- a/services/activity-service/configs/config.docker.yaml +++ b/services/activity-service/configs/config.docker.yaml @@ -37,6 +37,13 @@ wheel_reward_worker: batch_size: 50 lock_ttl: "30s" max_retry: 16 +activity_template_stats_worker: + enabled: true + poll_interval: "1s" + batch_size: 100 + lock_ttl: "30s" +activity_template_runtime: + settlement_lateness: "10m" message_action_confirm_worker: enabled: true outbox_poll_interval: "1s" @@ -77,6 +84,7 @@ rocketmq: enabled: true topic: "hyapp_room_outbox" consumer_group: "hyapp-activity-room-outbox" + activity_template_consumer_group: "hyapp-activity-template-room-outbox" consumer_max_reconsume_times: 16 lucky_gift_outbox: enabled: true @@ -103,6 +111,12 @@ rocketmq: invite_activity_consumer_group: "hyapp-activity-invite-user-outbox" message_action_consumer_group: "hyapp-activity-message-action-user-outbox" consumer_max_reconsume_times: 16 + activity_template_outbox: + enabled: true + topic: "hyapp_activity_outbox" + producer_group: "hyapp-activity-template-outbox" + send_timeout: "5s" + retry: 2 message_action_outbox: enabled: true topic: "hyapp_message_action_outbox" diff --git a/services/activity-service/configs/config.tencent.example.yaml b/services/activity-service/configs/config.tencent.example.yaml index ec6d0461..fe9c8ef4 100644 --- a/services/activity-service/configs/config.tencent.example.yaml +++ b/services/activity-service/configs/config.tencent.example.yaml @@ -37,6 +37,13 @@ wheel_reward_worker: batch_size: 50 lock_ttl: "30s" max_retry: 16 +activity_template_stats_worker: + enabled: true + poll_interval: "1s" + batch_size: 100 + lock_ttl: "30s" +activity_template_runtime: + settlement_lateness: "10m" message_action_confirm_worker: enabled: true outbox_poll_interval: "1s" @@ -78,6 +85,7 @@ rocketmq: enabled: true topic: "hyapp_room_outbox" consumer_group: "hyapp-activity-room-outbox" + activity_template_consumer_group: "hyapp-activity-template-room-outbox" consumer_max_reconsume_times: 16 lucky_gift_outbox: enabled: true @@ -104,6 +112,12 @@ rocketmq: invite_activity_consumer_group: "hyapp-activity-invite-user-outbox" message_action_consumer_group: "hyapp-activity-message-action-user-outbox" consumer_max_reconsume_times: 16 + activity_template_outbox: + enabled: true + topic: "hyapp_activity_outbox" + producer_group: "hyapp-activity-template-outbox" + send_timeout: "5s" + retry: 2 message_action_outbox: enabled: true topic: "hyapp_message_action_outbox" diff --git a/services/activity-service/configs/config.yaml b/services/activity-service/configs/config.yaml index 546d6ef3..69389b94 100644 --- a/services/activity-service/configs/config.yaml +++ b/services/activity-service/configs/config.yaml @@ -37,6 +37,13 @@ wheel_reward_worker: batch_size: 50 lock_ttl: "30s" max_retry: 16 +activity_template_stats_worker: + enabled: true + poll_interval: "1s" + batch_size: 100 + lock_ttl: "30s" +activity_template_runtime: + settlement_lateness: "10m" message_action_confirm_worker: enabled: true outbox_poll_interval: "1s" @@ -78,6 +85,7 @@ rocketmq: enabled: true topic: "hyapp_room_outbox" consumer_group: "hyapp-activity-room-outbox" + activity_template_consumer_group: "hyapp-activity-template-room-outbox" consumer_max_reconsume_times: 16 lucky_gift_outbox: enabled: true @@ -104,6 +112,12 @@ rocketmq: invite_activity_consumer_group: "hyapp-activity-invite-user-outbox" message_action_consumer_group: "hyapp-activity-message-action-user-outbox" consumer_max_reconsume_times: 16 + activity_template_outbox: + enabled: true + topic: "hyapp_activity_outbox" + producer_group: "hyapp-activity-template-outbox" + send_timeout: "5s" + retry: 2 message_action_outbox: enabled: true topic: "hyapp_message_action_outbox" diff --git a/services/activity-service/deploy/mysql/initdb/001_activity_service.sql b/services/activity-service/deploy/mysql/initdb/001_activity_service.sql index 6ef1df87..558e331b 100644 --- a/services/activity-service/deploy/mysql/initdb/001_activity_service.sql +++ b/services/activity-service/deploy/mysql/initdb/001_activity_service.sql @@ -1479,3 +1479,366 @@ CREATE TABLE IF NOT EXISTS invite_activity_reward_claims ( KEY idx_invite_activity_reward_claim_user (app_code, cycle_key, user_id, created_at_ms), KEY idx_invite_activity_reward_claim_status (app_code, status, created_at_ms) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动金币领取记录'; + +-- 活动模版配置和发布版本由 activity-service 统一持久化;admin-server 只能通过 AdminActivityTemplateService 访问。 +CREATE TABLE IF NOT EXISTS activity_templates ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + template_code VARCHAR(64) NOT NULL COMMENT 'App 内唯一业务编码', + name VARCHAR(128) NOT NULL COMMENT '后台内部名称', + activity_type VARCHAR(32) NOT NULL DEFAULT 'gift_challenge' COMMENT '活动类型', + status VARCHAR(24) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/disabled/archived', + start_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动开始,UTC epoch ms,包含', + end_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动结束,UTC epoch ms,不包含', + all_regions BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否覆盖全部区域', + daily_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '日榜最多展示人数', + total_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '总榜最多展示人数', + display_config_json JSON NOT NULL COMMENT '客户端布局和样式配置', + revision BIGINT NOT NULL DEFAULT 1 COMMENT '后台编辑乐观锁版本', + published_version BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布快照版本', + created_by_admin_id BIGINT NOT NULL COMMENT '创建管理员', + updated_by_admin_id BIGINT NOT NULL COMMENT '最后更新管理员', + published_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布管理员', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + published_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布时间,UTC epoch ms', + archived_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '软归档时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id), + UNIQUE KEY uk_activity_template_code (app_code, template_code), + KEY idx_activity_template_list (app_code, status, updated_at_ms, template_id), + KEY idx_activity_template_period (app_code, status, start_ms, end_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='可排期运营活动模版实例'; + +-- 发布互斥行按 App 串行化“检查重叠 + 写入 published”。仅锁候选活动行会出现两个草稿并发发布时互相不可见的写偏差。 +CREATE TABLE IF NOT EXISTS activity_template_publish_locks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + updated_at_ms BIGINT NOT NULL COMMENT '最近获取发布锁时间,UTC epoch ms', + PRIMARY KEY (app_code) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版发布事务互斥行'; + +CREATE TABLE IF NOT EXISTS activity_template_regions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + region_id BIGINT NOT NULL COMMENT '投放区域 ID', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, region_id), + KEY idx_activity_template_region_match (app_code, region_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版投放区域'; + +CREATE TABLE IF NOT EXISTS activity_template_locales ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + locale VARCHAR(24) NOT NULL COMMENT 'BCP-47 基础语言码', + title VARCHAR(160) NOT NULL DEFAULT '' COMMENT '客户端活动标题', + rules MEDIUMTEXT NOT NULL COMMENT '客户端活动规则正文', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版多语言文案'; + +CREATE TABLE IF NOT EXISTS activity_template_gifts ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + gift_id VARCHAR(96) NOT NULL COMMENT 'wallet 礼物 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '发布展示名称快照', + icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '发布展示图标快照', + coin_price BIGINT NOT NULL DEFAULT 0 COMMENT '发布时金币价格快照,仅供展示', + price_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发布时价格版本快照', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, gift_id), + KEY idx_activity_template_gift_match (app_code, gift_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版指定礼物和展示快照'; + +CREATE TABLE IF NOT EXISTS activity_template_tasks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + task_key VARCHAR(64) NOT NULL COMMENT '模版内稳定任务键', + task_type VARCHAR(32) NOT NULL COMMENT 'daily_visit/gift_count/gift_coin_amount', + target_value BIGINT NOT NULL DEFAULT 0 COMMENT '任务达成阈值', + reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, task_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版每日任务配置'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_rewards ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + board_type VARCHAR(16) NOT NULL COMMENT 'daily/total', + rank_from INT NOT NULL COMMENT '奖励起始名次,闭区间', + rank_to INT NOT NULL COMMENT '奖励结束名次,闭区间', + resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, board_type, rank_from, rank_to) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版日榜和总榜名次奖励'; + +CREATE TABLE IF NOT EXISTS activity_template_assets ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + asset_key VARCHAR(64) NOT NULL COMMENT '素材位键', + locale VARCHAR(24) NOT NULL DEFAULT '*' COMMENT '* 表示共享素材,否则为语言码', + url VARCHAR(1024) NOT NULL COMMENT 'COS/CDN 素材地址', + media_type VARCHAR(16) NOT NULL COMMENT 'image/webp/svga/pag', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, asset_key, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版客户端素材'; + +CREATE TABLE IF NOT EXISTS activity_template_versions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + version_no BIGINT NOT NULL COMMENT '单模版递增发布版本', + snapshot_json JSON NOT NULL COMMENT '发布时完整不可变配置快照', + published_by_admin_id BIGINT NOT NULL COMMENT '发布管理员', + published_at_ms BIGINT NOT NULL COMMENT '发布时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_version_list (app_code, template_id, published_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变发布版本'; + +-- 活动模版真实运行时、任务、榜单结算及统计事实 outbox。 +-- Activity-template runtime facts are version-bound. Configuration edits never rewrite these tables. +CREATE TABLE IF NOT EXISTS activity_template_runtime_versions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + start_ms BIGINT NOT NULL, + end_ms BIGINT NOT NULL, + all_regions BOOLEAN NOT NULL DEFAULT FALSE, + runtime_from_ms BIGINT NOT NULL, + runtime_to_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_runtime_current (app_code, template_code, start_ms, end_ms, runtime_from_ms, runtime_to_ms), + KEY idx_activity_template_runtime_due (app_code, end_ms, runtime_to_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变运行版本启停窗口'; + +CREATE TABLE IF NOT EXISTS activity_template_runtime_regions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + version_no BIGINT NOT NULL, + region_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, region_id), + KEY idx_activity_template_runtime_region (app_code, region_id, template_id, version_no) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行版本区域快照'; + +CREATE TABLE IF NOT EXISTS activity_template_event_consumption ( + app_code VARCHAR(32) NOT NULL, + source_event_id VARCHAR(128) NOT NULL, + event_type VARCHAR(64) NOT NULL, + template_id VARCHAR(96) NOT NULL DEFAULT '', + template_code VARCHAR(64) NOT NULL DEFAULT '', + version_no BIGINT NOT NULL DEFAULT 0, + user_id BIGINT NOT NULL DEFAULT 0, + region_id BIGINT NOT NULL DEFAULT 0, + task_day VARCHAR(10) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + skip_reason VARCHAR(128) NOT NULL DEFAULT '', + occurred_at_ms BIGINT NOT NULL, + consumed_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, source_event_id), + KEY idx_activity_template_event_template (app_code, template_id, version_no, occurred_at_ms), + KEY idx_activity_template_event_status (app_code, status, consumed_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行事件幂等事实'; + +CREATE TABLE IF NOT EXISTS activity_template_user_day_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + day_start_ms BIGINT NOT NULL, + day_end_ms BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + KEY idx_activity_template_day_rank (app_code, template_id, version_no, task_day, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 UTC 日榜实时分数'; + +CREATE TABLE IF NOT EXISTS activity_template_user_total_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, user_id), + KEY idx_activity_template_total_rank (app_code, template_id, version_no, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版活动总榜实时分数'; + +CREATE TABLE IF NOT EXISTS activity_template_daily_visits ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + command_id VARCHAR(128) NOT NULL, + visited_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + UNIQUE KEY uk_activity_template_visit_command (app_code, command_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 daily_visit 自然幂等事实'; + +CREATE TABLE IF NOT EXISTS activity_template_task_progress ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + first_region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(64) NOT NULL, + task_type VARCHAR(32) NOT NULL, + target_value BIGINT NOT NULL, + progress_value BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + sort_order INT NOT NULL DEFAULT 0, + status VARCHAR(24) NOT NULL, + completed_at_ms BIGINT NOT NULL DEFAULT 0, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + claimed_at_ms BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id, task_key), + KEY idx_activity_template_task_data (app_code, template_id, version_no, task_day, task_key, status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版用户每日任务进度'; + +CREATE TABLE IF NOT EXISTS activity_template_task_claims ( + app_code VARCHAR(32) NOT NULL, + claim_id VARCHAR(96) NOT NULL, + command_id VARCHAR(128) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + task_key VARCHAR(64) NOT NULL, + user_id BIGINT NOT NULL, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(160) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, claim_id), + UNIQUE KEY uk_activity_template_claim_command (app_code, command_id), + UNIQUE KEY uk_activity_template_claim_task (app_code, template_id, version_no, task_day, user_id, task_key), + UNIQUE KEY uk_activity_template_claim_wallet (app_code, wallet_command_id), + KEY idx_activity_template_claim_status (app_code, status, updated_at_ms), + KEY idx_activity_template_claim_admin (app_code, template_id, version_no, task_day, task_key, user_id, status, updated_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版任务资源组领奖事实'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_periods ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + period_start_ms BIGINT NOT NULL, + period_end_ms BIGINT NOT NULL, + settle_after_ms BIGINT NOT NULL COMMENT '结算水位:周期结束加允许迟到窗口,UTC epoch ms', + leaderboard_size INT NOT NULL, + status VARCHAR(24) NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + settled_at_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key), + KEY idx_activity_template_period_settle_due (app_code, status, settle_after_ms, lock_until_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单结算周期'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_snapshots ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + gift_count BIGINT NOT NULL, + coin_amount BIGINT NOT NULL, + first_scored_at_ms BIGINT NOT NULL, + snapshot_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_rank_user (app_code, template_id, version_no, board_type, period_key, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版冻结榜单快照'; + +CREATE TABLE IF NOT EXISTS activity_template_reward_jobs ( + app_code VARCHAR(32) NOT NULL, + reward_job_id VARCHAR(96) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(192) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + max_attempts INT NOT NULL DEFAULT 8 COMMENT '自动投递总尝试上限;dead 手工复活时只扩一轮预算', + next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次可领取时间,UTC epoch ms', + locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前 job lease owner', + lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT 'job lease 过期时间,UTC epoch ms', + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, reward_job_id), + UNIQUE KEY uk_activity_template_reward_rank (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_reward_wallet (app_code, wallet_command_id), + KEY idx_activity_template_reward_query (app_code, template_id, version_no, board_type, period_key, status), + KEY idx_activity_template_reward_retry (app_code, status, updated_at_ms), + KEY idx_activity_template_reward_claim (app_code, status, next_retry_at_ms, lock_until_ms, created_at_ms, reward_job_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单奖励发放任务'; + +CREATE TABLE IF NOT EXISTS activity_template_stats_outbox ( + outbox_id VARCHAR(96) NOT NULL, + app_code VARCHAR(32) NOT NULL, + event_type VARCHAR(64) NOT NULL, + payload BLOB NOT NULL, + status VARCHAR(24) NOT NULL, + retry_count INT NOT NULL DEFAULT 0, + next_retry_at_ms BIGINT NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + last_error VARCHAR(512) NOT NULL DEFAULT '', + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (outbox_id), + KEY idx_activity_template_stats_outbox_claim (status, next_retry_at_ms, lock_until_ms, created_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版统计事实 RocketMQ transactional outbox'; diff --git a/services/activity-service/deploy/mysql/migrations/010_activity_templates.sql b/services/activity-service/deploy/mysql/migrations/010_activity_templates.sql new file mode 100644 index 00000000..8cb31811 --- /dev/null +++ b/services/activity-service/deploy/mysql/migrations/010_activity_templates.sql @@ -0,0 +1,119 @@ +CREATE TABLE IF NOT EXISTS activity_templates ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + template_code VARCHAR(64) NOT NULL COMMENT 'App 内唯一业务编码', + name VARCHAR(128) NOT NULL COMMENT '后台内部名称', + activity_type VARCHAR(32) NOT NULL DEFAULT 'gift_challenge' COMMENT '活动类型', + status VARCHAR(24) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/disabled/archived', + start_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动开始,UTC epoch ms,包含', + end_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动结束,UTC epoch ms,不包含', + all_regions BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否覆盖全部区域', + daily_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '日榜最多展示人数', + total_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '总榜最多展示人数', + display_config_json JSON NOT NULL COMMENT '客户端布局和样式配置', + revision BIGINT NOT NULL DEFAULT 1 COMMENT '后台编辑乐观锁版本', + published_version BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布快照版本', + created_by_admin_id BIGINT NOT NULL COMMENT '创建管理员', + updated_by_admin_id BIGINT NOT NULL COMMENT '最后更新管理员', + published_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布管理员', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + published_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布时间,UTC epoch ms', + archived_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '软归档时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id), + UNIQUE KEY uk_activity_template_code (app_code, template_code), + KEY idx_activity_template_list (app_code, status, updated_at_ms, template_id), + KEY idx_activity_template_period (app_code, status, start_ms, end_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='可排期运营活动模版实例'; + +-- 发布互斥行按 App 串行化“检查重叠 + 写入 published”。仅锁候选活动行会出现两个草稿并发发布时互相不可见的写偏差。 +CREATE TABLE IF NOT EXISTS activity_template_publish_locks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + updated_at_ms BIGINT NOT NULL COMMENT '最近获取发布锁时间,UTC epoch ms', + PRIMARY KEY (app_code) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版发布事务互斥行'; + +CREATE TABLE IF NOT EXISTS activity_template_regions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + region_id BIGINT NOT NULL COMMENT '投放区域 ID', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, region_id), + KEY idx_activity_template_region_match (app_code, region_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版投放区域'; + +CREATE TABLE IF NOT EXISTS activity_template_locales ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + locale VARCHAR(24) NOT NULL COMMENT 'BCP-47 基础语言码', + title VARCHAR(160) NOT NULL DEFAULT '' COMMENT '客户端活动标题', + rules MEDIUMTEXT NOT NULL COMMENT '客户端活动规则正文', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版多语言文案'; + +CREATE TABLE IF NOT EXISTS activity_template_gifts ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + gift_id VARCHAR(96) NOT NULL COMMENT 'wallet 礼物 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '发布展示名称快照', + icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '发布展示图标快照', + coin_price BIGINT NOT NULL DEFAULT 0 COMMENT '发布时金币价格快照,仅供展示', + price_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发布时价格版本快照', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, gift_id), + KEY idx_activity_template_gift_match (app_code, gift_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版指定礼物和展示快照'; + +CREATE TABLE IF NOT EXISTS activity_template_tasks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + task_key VARCHAR(64) NOT NULL COMMENT '模版内稳定任务键', + task_type VARCHAR(32) NOT NULL COMMENT 'daily_visit/gift_count/gift_coin_amount', + target_value BIGINT NOT NULL DEFAULT 0 COMMENT '任务达成阈值', + reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, task_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版每日任务配置'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_rewards ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + board_type VARCHAR(16) NOT NULL COMMENT 'daily/total', + rank_from INT NOT NULL COMMENT '奖励起始名次,闭区间', + rank_to INT NOT NULL COMMENT '奖励结束名次,闭区间', + resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, board_type, rank_from, rank_to) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版日榜和总榜名次奖励'; + +CREATE TABLE IF NOT EXISTS activity_template_assets ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + asset_key VARCHAR(64) NOT NULL COMMENT '素材位键', + locale VARCHAR(24) NOT NULL DEFAULT '*' COMMENT '* 表示共享素材,否则为语言码', + url VARCHAR(1024) NOT NULL COMMENT 'COS/CDN 素材地址', + media_type VARCHAR(16) NOT NULL COMMENT 'image/webp/svga/pag', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, asset_key, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版客户端素材'; + +CREATE TABLE IF NOT EXISTS activity_template_versions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + version_no BIGINT NOT NULL COMMENT '单模版递增发布版本', + snapshot_json JSON NOT NULL COMMENT '发布时完整不可变配置快照', + published_by_admin_id BIGINT NOT NULL COMMENT '发布管理员', + published_at_ms BIGINT NOT NULL COMMENT '发布时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_version_list (app_code, template_id, published_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变发布版本'; diff --git a/services/activity-service/deploy/mysql/migrations/011_activity_template_runtime.sql b/services/activity-service/deploy/mysql/migrations/011_activity_template_runtime.sql new file mode 100644 index 00000000..2b2f7dac --- /dev/null +++ b/services/activity-service/deploy/mysql/migrations/011_activity_template_runtime.sql @@ -0,0 +1,235 @@ +-- Activity-template runtime facts are version-bound. Configuration edits never rewrite these tables. +CREATE TABLE IF NOT EXISTS activity_template_runtime_versions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + start_ms BIGINT NOT NULL, + end_ms BIGINT NOT NULL, + all_regions BOOLEAN NOT NULL DEFAULT FALSE, + runtime_from_ms BIGINT NOT NULL, + runtime_to_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_runtime_current (app_code, template_code, start_ms, end_ms, runtime_from_ms, runtime_to_ms), + KEY idx_activity_template_runtime_due (app_code, end_ms, runtime_to_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变运行版本启停窗口'; + +CREATE TABLE IF NOT EXISTS activity_template_runtime_regions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + version_no BIGINT NOT NULL, + region_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, region_id), + KEY idx_activity_template_runtime_region (app_code, region_id, template_id, version_no) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行版本区域快照'; + +CREATE TABLE IF NOT EXISTS activity_template_event_consumption ( + app_code VARCHAR(32) NOT NULL, + source_event_id VARCHAR(128) NOT NULL, + event_type VARCHAR(64) NOT NULL, + template_id VARCHAR(96) NOT NULL DEFAULT '', + template_code VARCHAR(64) NOT NULL DEFAULT '', + version_no BIGINT NOT NULL DEFAULT 0, + user_id BIGINT NOT NULL DEFAULT 0, + region_id BIGINT NOT NULL DEFAULT 0, + task_day VARCHAR(10) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + skip_reason VARCHAR(128) NOT NULL DEFAULT '', + occurred_at_ms BIGINT NOT NULL, + consumed_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, source_event_id), + KEY idx_activity_template_event_template (app_code, template_id, version_no, occurred_at_ms), + KEY idx_activity_template_event_status (app_code, status, consumed_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行事件幂等事实'; + +CREATE TABLE IF NOT EXISTS activity_template_user_day_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + day_start_ms BIGINT NOT NULL, + day_end_ms BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + KEY idx_activity_template_day_rank (app_code, template_id, version_no, task_day, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 UTC 日榜实时分数'; + +CREATE TABLE IF NOT EXISTS activity_template_user_total_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, user_id), + KEY idx_activity_template_total_rank (app_code, template_id, version_no, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版活动总榜实时分数'; + +CREATE TABLE IF NOT EXISTS activity_template_daily_visits ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + command_id VARCHAR(128) NOT NULL, + visited_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + UNIQUE KEY uk_activity_template_visit_command (app_code, command_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 daily_visit 自然幂等事实'; + +CREATE TABLE IF NOT EXISTS activity_template_task_progress ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + first_region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(64) NOT NULL, + task_type VARCHAR(32) NOT NULL, + target_value BIGINT NOT NULL, + progress_value BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + sort_order INT NOT NULL DEFAULT 0, + status VARCHAR(24) NOT NULL, + completed_at_ms BIGINT NOT NULL DEFAULT 0, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + claimed_at_ms BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id, task_key), + KEY idx_activity_template_task_data (app_code, template_id, version_no, task_day, task_key, status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版用户每日任务进度'; + +CREATE TABLE IF NOT EXISTS activity_template_task_claims ( + app_code VARCHAR(32) NOT NULL, + claim_id VARCHAR(96) NOT NULL, + command_id VARCHAR(128) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + task_key VARCHAR(64) NOT NULL, + user_id BIGINT NOT NULL, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(160) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, claim_id), + UNIQUE KEY uk_activity_template_claim_command (app_code, command_id), + UNIQUE KEY uk_activity_template_claim_task (app_code, template_id, version_no, task_day, user_id, task_key), + UNIQUE KEY uk_activity_template_claim_wallet (app_code, wallet_command_id), + KEY idx_activity_template_claim_status (app_code, status, updated_at_ms), + KEY idx_activity_template_claim_admin (app_code, template_id, version_no, task_day, task_key, user_id, status, updated_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版任务资源组领奖事实'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_periods ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + period_start_ms BIGINT NOT NULL, + period_end_ms BIGINT NOT NULL, + settle_after_ms BIGINT NOT NULL COMMENT '结算水位:周期结束加允许迟到窗口,UTC epoch ms', + leaderboard_size INT NOT NULL, + status VARCHAR(24) NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + settled_at_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key), + KEY idx_activity_template_period_settle_due (app_code, status, settle_after_ms, lock_until_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单结算周期'; + +CREATE TABLE IF NOT EXISTS activity_template_rank_snapshots ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + gift_count BIGINT NOT NULL, + coin_amount BIGINT NOT NULL, + first_scored_at_ms BIGINT NOT NULL, + snapshot_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_rank_user (app_code, template_id, version_no, board_type, period_key, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版冻结榜单快照'; + +CREATE TABLE IF NOT EXISTS activity_template_reward_jobs ( + app_code VARCHAR(32) NOT NULL, + reward_job_id VARCHAR(96) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(192) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, reward_job_id), + UNIQUE KEY uk_activity_template_reward_rank (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_reward_wallet (app_code, wallet_command_id), + KEY idx_activity_template_reward_query (app_code, template_id, version_no, board_type, period_key, status), + KEY idx_activity_template_reward_retry (app_code, status, updated_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单奖励发放任务'; + +CREATE TABLE IF NOT EXISTS activity_template_stats_outbox ( + outbox_id VARCHAR(96) NOT NULL, + app_code VARCHAR(32) NOT NULL, + event_type VARCHAR(64) NOT NULL, + payload BLOB NOT NULL, + status VARCHAR(24) NOT NULL, + retry_count INT NOT NULL DEFAULT 0, + next_retry_at_ms BIGINT NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + last_error VARCHAR(512) NOT NULL DEFAULT '', + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (outbox_id), + KEY idx_activity_template_stats_outbox_claim (status, next_retry_at_ms, lock_until_ms, created_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版统计事实 RocketMQ transactional outbox'; diff --git a/services/activity-service/deploy/mysql/migrations/012_activity_template_reward_job_leases.sql b/services/activity-service/deploy/mysql/migrations/012_activity_template_reward_job_leases.sql new file mode 100644 index 00000000..c5cd5254 --- /dev/null +++ b/services/activity-service/deploy/mysql/migrations/012_activity_template_reward_job_leases.sql @@ -0,0 +1,12 @@ +-- 榜单周期冻结与钱包发奖解耦:job 独立租约允许水平扩展,退避/终态避免钱包故障时形成重试风暴。 +ALTER TABLE activity_template_reward_jobs + ADD COLUMN max_attempts INT NOT NULL DEFAULT 8 + COMMENT '自动投递总尝试上限;dead 手工复活时只扩一轮预算' AFTER attempt_count, + ADD COLUMN next_retry_at_ms BIGINT NOT NULL DEFAULT 0 + COMMENT '下一次可领取时间,UTC epoch ms' AFTER max_attempts, + ADD COLUMN locked_by VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '当前 job lease owner' AFTER next_retry_at_ms, + ADD COLUMN lock_until_ms BIGINT NOT NULL DEFAULT 0 + COMMENT 'job lease 过期时间,UTC epoch ms' AFTER locked_by, + ADD KEY idx_activity_template_reward_claim + (app_code, status, next_retry_at_ms, lock_until_ms, created_at_ms, reward_job_id); diff --git a/services/activity-service/internal/app/activity_template_stats_outbox.go b/services/activity-service/internal/app/activity_template_stats_outbox.go new file mode 100644 index 00000000..1ee2cddb --- /dev/null +++ b/services/activity-service/internal/app/activity_template_stats_outbox.go @@ -0,0 +1,30 @@ +package app + +import ( + "context" + "log/slog" + "time" + + "hyapp/pkg/logx" +) + +func (a *App) runActivityTemplateStatsOutboxWorker(ctx context.Context) { + options := a.activityTemplateStatsWorkerOptions + ticker := time.NewTicker(options.PollInterval) + defer ticker.Stop() + for { + claimed, _, err := a.activityTemplate.ProcessStatsOutboxBatch(ctx, a.activityTemplateProducer, + a.activityTemplateOutboxTopic, a.workerNodeID+":activity-template-stats", options.BatchSize, options.LockTTL) + if err != nil && ctx.Err() == nil { + logx.Error(ctx, "activity_template_stats_outbox_publish_failed", err, slog.String("node_id", a.workerNodeID)) + } + if claimed >= options.BatchSize { + continue + } + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + } +} diff --git a/services/activity-service/internal/app/app.go b/services/activity-service/internal/app/app.go index f8ef22dc..089f54be 100644 --- a/services/activity-service/internal/app/app.go +++ b/services/activity-service/internal/app/app.go @@ -16,6 +16,7 @@ import ( "hyapp/pkg/servicekit/grpcserver" servicemq "hyapp/pkg/servicekit/mq" "hyapp/services/activity-service/internal/config" + activitytemplateservice "hyapp/services/activity-service/internal/service/activitytemplate" broadcastservice "hyapp/services/activity-service/internal/service/broadcast" cumulativerechargeservice "hyapp/services/activity-service/internal/service/cumulativerecharge" firstrechargeservice "hyapp/services/activity-service/internal/service/firstrecharge" @@ -28,32 +29,37 @@ import ( // App 装配 activity-service 的 gRPC 入口、健康检查、后台 worker 和外部连接。 // 具体业务模块的创建和注册都放在独立文件里,避免启动入口继续膨胀成一个难维护的大函数。 type App struct { - server *grpc.Server - listener net.Listener - health *grpchealth.ServingChecker - healthHTTP *healthhttp.Server - mysqlRepo *mysqlstorage.Repository - broadcast *broadcastservice.Service - firstRechargeReward *firstrechargeservice.Service - cumulativeRecharge *cumulativerechargeservice.Service - inviteActivityReward *inviteactivityservice.Service - actionConfirm *messageservice.ActionConfirmService - wheel *wheelservice.Service - broadcastWorkerEnabled bool - messageActionWorkerEnabled bool - wheelRewardWorkerEnabled bool - workerNodeID string - messageActionWorkerOptions config.MessageActionConfirmWorkerConfig - wheelRewardWorkerOptions config.WheelRewardWorkerConfig - messageActionOutboxTopic string - userLeaderboardRedisClose func() error - mqConsumers []*rocketmqx.Consumer - messageActionProducer *rocketmqx.Producer - userConn *grpc.ClientConn - walletConn *grpc.ClientConn - roomConn *grpc.ClientConn - workers *serviceapp.BackgroundGroup - closeOnce sync.Once + server *grpc.Server + listener net.Listener + health *grpchealth.ServingChecker + healthHTTP *healthhttp.Server + mysqlRepo *mysqlstorage.Repository + broadcast *broadcastservice.Service + firstRechargeReward *firstrechargeservice.Service + cumulativeRecharge *cumulativerechargeservice.Service + inviteActivityReward *inviteactivityservice.Service + actionConfirm *messageservice.ActionConfirmService + wheel *wheelservice.Service + activityTemplate *activitytemplateservice.Service + broadcastWorkerEnabled bool + messageActionWorkerEnabled bool + wheelRewardWorkerEnabled bool + activityTemplateStatsWorkerEnabled bool + workerNodeID string + messageActionWorkerOptions config.MessageActionConfirmWorkerConfig + wheelRewardWorkerOptions config.WheelRewardWorkerConfig + activityTemplateStatsWorkerOptions config.ActivityTemplateStatsWorkerConfig + messageActionOutboxTopic string + activityTemplateOutboxTopic string + userLeaderboardRedisClose func() error + mqConsumers []*rocketmqx.Consumer + messageActionProducer *rocketmqx.Producer + activityTemplateProducer *rocketmqx.Producer + userConn *grpc.ClientConn + walletConn *grpc.ClientConn + roomConn *grpc.ClientConn + workers *serviceapp.BackgroundGroup + closeOnce sync.Once } // New 初始化 activity-service 应用。 @@ -69,10 +75,11 @@ func New(cfg config.Config) (*App, error) { var clients externalClients var mqConsumers []*rocketmqx.Consumer var messageActionProducer *rocketmqx.Producer + var activityTemplateProducer *rocketmqx.Producer var userLeaderboardRedisClose func() error cleanup := func() { shutdownConsumers(mqConsumers) - servicemq.ShutdownProducers([]*rocketmqx.Producer{messageActionProducer}) + servicemq.ShutdownProducers([]*rocketmqx.Producer{messageActionProducer, activityTemplateProducer}) if userLeaderboardRedisClose != nil { _ = userLeaderboardRedisClose() } @@ -120,6 +127,13 @@ func New(cfg config.Config) (*App, error) { return nil, err } } + if cfg.RocketMQ.ActivityTemplateOutbox.Enabled { + activityTemplateProducer, err = rocketmqx.NewProducer(activityTemplateProducerConfig(cfg.RocketMQ)) + if err != nil { + cleanup() + return nil, err + } + } health, healthHTTP, err := newHealthServers(cfg, server, repository) if err != nil { cleanup() @@ -127,31 +141,36 @@ func New(cfg config.Config) (*App, error) { } return &App{ - server: server, - listener: listener, - health: health, - healthHTTP: healthHTTP, - mysqlRepo: repository, - broadcast: services.broadcast, - firstRechargeReward: services.firstRechargeReward, - cumulativeRecharge: services.cumulativeRecharge, - inviteActivityReward: services.inviteActivityReward, - actionConfirm: services.actionConfirm, - wheel: services.wheel, - broadcastWorkerEnabled: cfg.Broadcast.Enabled, - messageActionWorkerEnabled: cfg.MessageActionConfirmWorker.Enabled, - wheelRewardWorkerEnabled: cfg.WheelRewardWorker.Enabled, - workerNodeID: cfg.NodeID, - messageActionWorkerOptions: cfg.MessageActionConfirmWorker, - wheelRewardWorkerOptions: cfg.WheelRewardWorker, - messageActionOutboxTopic: cfg.RocketMQ.MessageActionOutbox.Topic, - userLeaderboardRedisClose: userLeaderboardRedisClose, - mqConsumers: mqConsumers, - messageActionProducer: messageActionProducer, - userConn: clients.userConn, - walletConn: clients.walletConn, - roomConn: clients.roomConn, - workers: serviceapp.NewBackground(context.Background()), + server: server, + listener: listener, + health: health, + healthHTTP: healthHTTP, + mysqlRepo: repository, + broadcast: services.broadcast, + firstRechargeReward: services.firstRechargeReward, + cumulativeRecharge: services.cumulativeRecharge, + inviteActivityReward: services.inviteActivityReward, + actionConfirm: services.actionConfirm, + wheel: services.wheel, + activityTemplate: services.activityTemplate, + broadcastWorkerEnabled: cfg.Broadcast.Enabled, + messageActionWorkerEnabled: cfg.MessageActionConfirmWorker.Enabled, + wheelRewardWorkerEnabled: cfg.WheelRewardWorker.Enabled, + activityTemplateStatsWorkerEnabled: cfg.ActivityTemplateStatsWorker.Enabled, + workerNodeID: cfg.NodeID, + messageActionWorkerOptions: cfg.MessageActionConfirmWorker, + wheelRewardWorkerOptions: cfg.WheelRewardWorker, + activityTemplateStatsWorkerOptions: cfg.ActivityTemplateStatsWorker, + messageActionOutboxTopic: cfg.RocketMQ.MessageActionOutbox.Topic, + activityTemplateOutboxTopic: cfg.RocketMQ.ActivityTemplateOutbox.Topic, + userLeaderboardRedisClose: userLeaderboardRedisClose, + mqConsumers: mqConsumers, + messageActionProducer: messageActionProducer, + activityTemplateProducer: activityTemplateProducer, + userConn: clients.userConn, + walletConn: clients.walletConn, + roomConn: clients.roomConn, + workers: serviceapp.NewBackground(context.Background()), }, nil } @@ -185,6 +204,11 @@ func (a *App) Run() error { }) }) } + if a.activityTemplateStatsWorkerEnabled && a.activityTemplate != nil && a.activityTemplateProducer != nil && a.workers != nil { + a.workers.Go(func(ctx context.Context) { + a.runActivityTemplateStatsOutboxWorker(ctx) + }) + } err := a.server.Serve(a.listener) if a.workers != nil { a.workers.StopAndWait() @@ -248,7 +272,7 @@ func (a *App) closeHealthHTTP() { } func (a *App) startMQ() error { - if err := servicemq.StartProducers([]*rocketmqx.Producer{a.messageActionProducer}); err != nil { + if err := servicemq.StartProducers([]*rocketmqx.Producer{a.messageActionProducer, a.activityTemplateProducer}); err != nil { return err } return servicemq.StartConsumers(a.mqConsumers) @@ -256,5 +280,5 @@ func (a *App) startMQ() error { func (a *App) shutdownMQ() { servicemq.ShutdownConsumers(a.mqConsumers) - servicemq.ShutdownProducers([]*rocketmqx.Producer{a.messageActionProducer}) + servicemq.ShutdownProducers([]*rocketmqx.Producer{a.messageActionProducer, a.activityTemplateProducer}) } diff --git a/services/activity-service/internal/app/dependencies.go b/services/activity-service/internal/app/dependencies.go index 0cbbec50..bd76ea25 100644 --- a/services/activity-service/internal/app/dependencies.go +++ b/services/activity-service/internal/app/dependencies.go @@ -23,6 +23,7 @@ func openRepository(ctx context.Context, cfg config.Config) (*mysqlstorage.Repos if err != nil { return nil, err } + repository.SetActivityTemplateSettlementLateness(cfg.ActivityTemplateRuntime.SettlementLateness) if cfg.MySQLAutoMigrate { if err := repository.Migrate(ctx); err != nil { _ = repository.Close() diff --git a/services/activity-service/internal/app/grpc_registration.go b/services/activity-service/internal/app/grpc_registration.go index 80680d4b..24cafa38 100644 --- a/services/activity-service/internal/app/grpc_registration.go +++ b/services/activity-service/internal/app/grpc_registration.go @@ -8,11 +8,13 @@ import ( func registerGRPCServers(server *grpc.Server, services *serviceBundle) { activityv1.RegisterActivityServiceServer(server, grpcserver.NewServer(services.activity)) + activityv1.RegisterAdminActivityTemplateServiceServer(server, grpcserver.NewAdminActivityTemplateServer(services.activityTemplate)) + activityv1.RegisterActivityTemplateRuntimeServiceServer(server, grpcserver.NewActivityTemplateRuntimeServer(services.activityTemplate)) activityv1.RegisterMessageInboxServiceServer(server, grpcserver.NewMessageServer(services.message)) activityv1.RegisterMessageActionConfirmServiceServer(server, grpcserver.NewActionConfirmServer(services.actionConfirm)) // cron 入口只做调度适配;具体状态机仍在各 activity service 内部。 // weekly-star 和 room-turnover 都依赖 wallet 发奖,所以这里必须把同一批已装配的 service 注入 cron server。 - activityv1.RegisterActivityCronServiceServer(server, grpcserver.NewCronServer(services.message, services.growth, services.achievement, services.weeklyStar, services.roomTurnoverReward, services.agencyOpening, services.cpWeeklyRank)) + activityv1.RegisterActivityCronServiceServer(server, grpcserver.NewCronServer(services.message, services.growth, services.achievement, services.weeklyStar, services.roomTurnoverReward, services.agencyOpening, services.cpWeeklyRank, services.activityTemplate)) activityv1.RegisterTaskServiceServer(server, grpcserver.NewTaskServer(services.task)) activityv1.RegisterAdminTaskServiceServer(server, grpcserver.NewAdminTaskServer(services.task)) activityv1.RegisterGrowthLevelServiceServer(server, grpcserver.NewGrowthLevelServer(services.growth)) @@ -36,7 +38,7 @@ func registerGRPCServers(server *grpc.Server, services *serviceBundle) { activityv1.RegisterAdminRoomTurnoverRewardServiceServer(server, grpcserver.NewAdminRoomTurnoverRewardServer(services.roomTurnoverReward)) // BroadcastServer 同时承载 BroadcastService 和 RoomEventConsumerService。 // gRPC 直连投递和 MQ 消费都必须经过相同的 room event fanout 顺序,否则本地验证会通过但线上 MQ 路径漏积分。 - broadcastServer := grpcserver.NewBroadcastServer(services.broadcast, services.growth, services.weeklyStar, services.task, services.roomTurnoverReward, services.agencyOpening) + broadcastServer := grpcserver.NewBroadcastServer(services.broadcast, services.growth, services.weeklyStar, services.task, services.roomTurnoverReward, services.agencyOpening, services.activityTemplate) activityv1.RegisterBroadcastServiceServer(server, broadcastServer) activityv1.RegisterRoomEventConsumerServiceServer(server, broadcastServer) activityv1.RegisterFirstRechargeRewardServiceServer(server, grpcserver.NewFirstRechargeRewardServer(services.firstRechargeReward)) diff --git a/services/activity-service/internal/app/mq.go b/services/activity-service/internal/app/mq.go index 9244712e..b0769ad4 100644 --- a/services/activity-service/internal/app/mq.go +++ b/services/activity-service/internal/app/mq.go @@ -27,6 +27,12 @@ func buildMQConsumers(cfg config.Config, services *serviceBundle) ([]*rocketmqx. return nil, err } mqConsumers = append(mqConsumers, consumer) + activityTemplateConsumer, err := newActivityTemplateRoomOutboxConsumer(cfg, services) + if err != nil { + shutdownConsumers(mqConsumers) + return nil, err + } + mqConsumers = append(mqConsumers, activityTemplateConsumer) } if cfg.RocketMQ.LuckyGiftOutbox.Enabled { consumer, err := newLuckyGiftOutboxConsumer(cfg, services) @@ -177,6 +183,34 @@ func newRoomOutboxConsumer(cfg config.Config, services *serviceBundle) (*rocketm return consumer, nil } +func newActivityTemplateRoomOutboxConsumer(cfg config.Config, services *serviceBundle) (*rocketmqx.Consumer, error) { + consumer, err := rocketmqx.NewConsumer(activityTemplateRoomOutboxConsumerConfig(cfg.RocketMQ)) + if err != nil { + return nil, err + } + tagExpression, err := roommq.LegacyCompatibleTagExpression(roommq.EventTypeRoomGiftSent) + if err != nil { + _ = consumer.Shutdown() + return nil, err + } + if err := consumer.Subscribe(cfg.RocketMQ.RoomOutbox.Topic, tagExpression, func(ctx context.Context, message rocketmqx.ConsumedMessage) error { + envelope, _, err := roommq.DecodeRoomOutboxMessage(message.Body) + if err != nil { + return err + } + if _, err := services.activityTemplate.HandleRoomEvent(appcode.WithContext(ctx, envelope.GetAppCode()), envelope); err != nil { + // Returning the error preserves RocketMQ retry/DLQ semantics on this dedicated consumer group without + // delaying unrelated broadcast/growth/task projections. + return fmt.Errorf("room outbox activity template projection: %w", err) + } + return nil + }); err != nil { + _ = consumer.Shutdown() + return nil, err + } + return consumer, nil +} + func activityRoomEventTypes() []string { // 六个投影共用同一 consumer group,因此 selector 必须取其事件集合并集。 // RoomGiftSent 驱动增长/任务/周星/流水,另外三个事件只驱动播报;其他房间 @@ -447,6 +481,14 @@ func roomOutboxConsumerConfig(cfg config.RocketMQConfig) rocketmqx.ConsumerConfi return consumerConfig } +func activityTemplateRoomOutboxConsumerConfig(cfg config.RocketMQConfig) rocketmqx.ConsumerConfig { + consumerConfig := rocketMQConsumerConfig(cfg, cfg.RoomOutbox.ActivityTemplateConsumerGroup, cfg.RoomOutbox.ConsumerMaxReconsumeTimes) + // Gift scoring serializes per queue to reduce rank/task row lock inversions; horizontal instances still + // distribute RocketMQ queues inside this dedicated group. + consumerConfig.ConsumeGoroutines = 1 + return consumerConfig +} + func luckyGiftOutboxConsumerConfig(cfg config.RocketMQConfig) rocketmqx.ConsumerConfig { // 顶部飘屏是实时副作用,新建或误改 group 时不能从 topic 最早位点重放历史大奖; // 首次上线必须先部署 consumer,再开启 lucky-gift producer,确保 latest offset 不丢上线窗口事实。 @@ -503,6 +545,17 @@ func messageActionProducerConfig(cfg config.RocketMQConfig) rocketmqx.ProducerCo } } +func activityTemplateProducerConfig(cfg config.RocketMQConfig) rocketmqx.ProducerConfig { + return rocketmqx.ProducerConfig{ + EndpointConfig: rocketmqx.EndpointConfig{ + NameServers: cfg.NameServers, NameServerDomain: cfg.NameServerDomain, AccessKey: cfg.AccessKey, + SecretKey: cfg.SecretKey, SecurityToken: cfg.SecurityToken, Namespace: cfg.Namespace, VIPChannel: cfg.VIPChannel, + }, + GroupName: cfg.ActivityTemplateOutbox.ProducerGroup, SendTimeout: cfg.ActivityTemplateOutbox.SendTimeout, + Retry: cfg.ActivityTemplateOutbox.Retry, + } +} + func redPacketWalletOutboxTopic(cfg config.WalletOutboxMQConfig) string { // 钱包实时 topic 显式配置后,红包 worker 只消费实时通道,避免继续被普通账务 topic 的高频消息拖慢。 if cfg.RealtimeTopic != "" { diff --git a/services/activity-service/internal/app/mq_test.go b/services/activity-service/internal/app/mq_test.go index 3aed24a7..3168c286 100644 --- a/services/activity-service/internal/app/mq_test.go +++ b/services/activity-service/internal/app/mq_test.go @@ -21,6 +21,19 @@ func TestRoomOutboxConsumerConfigSerializesCompositeProjection(t *testing.T) { } } +func TestActivityTemplateRoomConsumerUsesIndependentGiftProjectionGroup(t *testing.T) { + cfg := config.Default().RocketMQ + cfg.RoomOutbox.ConsumerGroup = "activity-room-composite-test" + cfg.RoomOutbox.ActivityTemplateConsumerGroup = "activity-template-gift-test" + consumerConfig := activityTemplateRoomOutboxConsumerConfig(cfg) + if consumerConfig.GroupName != cfg.RoomOutbox.ActivityTemplateConsumerGroup || consumerConfig.GroupName == cfg.RoomOutbox.ConsumerGroup { + t.Fatalf("activity template consumer must own an independent offset: %+v", consumerConfig) + } + if consumerConfig.ConsumeGoroutines != 1 { + t.Fatalf("activity template gift consumer goroutines = %d, want 1", consumerConfig.ConsumeGoroutines) + } +} + func TestLuckyGiftOutboxConsumerUsesIndependentRealtimeGroup(t *testing.T) { cfg := config.Default().RocketMQ cfg.LuckyGiftOutbox.ConsumerGroup = "activity-lucky-gift-test" diff --git a/services/activity-service/internal/app/services.go b/services/activity-service/internal/app/services.go index b9174e93..176578cd 100644 --- a/services/activity-service/internal/app/services.go +++ b/services/activity-service/internal/app/services.go @@ -11,6 +11,7 @@ import ( "hyapp/services/activity-service/internal/config" achievementservice "hyapp/services/activity-service/internal/service/achievement" activityservice "hyapp/services/activity-service/internal/service/activity" + activitytemplateservice "hyapp/services/activity-service/internal/service/activitytemplate" agencyopeningservice "hyapp/services/activity-service/internal/service/agencyopening" broadcastservice "hyapp/services/activity-service/internal/service/broadcast" cpweeklyrankservice "hyapp/services/activity-service/internal/service/cpweeklyrank" @@ -30,6 +31,7 @@ import ( type serviceBundle struct { activity *activityservice.Service + activityTemplate *activitytemplateservice.Service message *messageservice.Service actionConfirm *messageservice.ActionConfirmService task *taskservice.Service @@ -53,9 +55,12 @@ type serviceBundle struct { func buildServiceBundle(cfg config.Config, repository *mysqlstorage.Repository, clients externalClients, userLeaderboardStore *userleaderboard.Store) (*serviceBundle, error) { walletClient := walletv1.NewWalletServiceClient(clients.walletConn) roomClient := roomv1.NewRoomQueryServiceClient(clients.roomConn) + regionSource := activityclient.NewGRPCRegionSource(clients.userConn) activitySvc := activityservice.New(activityservice.Config{NodeID: cfg.NodeID}, repository) + activityTemplateSvc := activitytemplateservice.New(repository, walletClient, regionSource) messageSvc := messageservice.New(messageservice.Config{NodeID: cfg.NodeID}, repository, messageservice.WithTargetSource(activityclient.NewGRPCUserTargetSource(clients.userConn))) + activityTemplateSvc.BindNotice(messageSvc) actionConfirmSvc := messageservice.NewActionConfirm(messageservice.Config{NodeID: cfg.NodeID}, repository, activityclient.NewGRPCRoleInvitationClient(clients.userConn)) taskSvc := taskservice.New(repository, walletClient) registrationRewardSvc := registrationrewardservice.New(repository, walletClient) @@ -92,7 +97,7 @@ func buildServiceBundle(cfg config.Config, repository *mysqlstorage.Repository, EnsureGroupsOnStartup: cfg.Broadcast.EnsureGroupsOnStartup, EnsureGroupsInterval: cfg.Broadcast.EnsureGroupsInterval, GroupIDPrefix: cfg.TencentIM.GroupIDPrefix, - }, repository, broadcastPublisher, activityclient.NewGRPCRegionSource(clients.userConn)) + }, repository, broadcastPublisher, regionSource) userProfileSource := activityclient.NewGRPCUserProfileSource(clients.userConn) broadcastSvc.SetSenderProfileSource(userProfileSource) wheelSvc := wheelservice.New(repository, wheelservice.WithWallet(walletClient)) @@ -102,6 +107,7 @@ func buildServiceBundle(cfg config.Config, repository *mysqlstorage.Repository, return &serviceBundle{ activity: activitySvc, + activityTemplate: activityTemplateSvc, message: messageSvc, actionConfirm: actionConfirmSvc, task: taskSvc, diff --git a/services/activity-service/internal/config/config.go b/services/activity-service/internal/config/config.go index a8c598ee..12d8f8ce 100644 --- a/services/activity-service/internal/config/config.go +++ b/services/activity-service/internal/config/config.go @@ -42,6 +42,10 @@ type Config struct { UserLeaderboardWorker UserLeaderboardWorkerConfig `yaml:"user_leaderboard_worker"` // WheelRewardWorker 补偿抽奖事务已经确定、但同步钱包发奖未完成的 WheelRewardSettlement outbox。 WheelRewardWorker WheelRewardWorkerConfig `yaml:"wheel_reward_worker"` + // ActivityTemplateStatsWorker relays committed runtime facts to statistics-service through RocketMQ. + ActivityTemplateStatsWorker ActivityTemplateStatsWorkerConfig `yaml:"activity_template_stats_worker"` + // ActivityTemplateRuntime 固化迟到事件水位等运行策略;发布时会写入物化周期,后续改配置不重写历史版本。 + ActivityTemplateRuntime ActivityTemplateRuntimeConfig `yaml:"activity_template_runtime"` // TencentIM 是 activity-service 发送全局/区域播报群消息的 REST 配置。 TencentIM TencentIMConfig `yaml:"tencent_im"` // Broadcast 控制 IM 播报群 reconciler、outbox worker 和贵重礼物阈值。 @@ -133,6 +137,17 @@ type WheelRewardWorkerConfig struct { MaxRetry int `yaml:"max_retry"` } +type ActivityTemplateStatsWorkerConfig struct { + Enabled bool `yaml:"enabled"` + PollInterval time.Duration `yaml:"poll_interval"` + BatchSize int `yaml:"batch_size"` + LockTTL time.Duration `yaml:"lock_ttl"` +} + +type ActivityTemplateRuntimeConfig struct { + SettlementLateness time.Duration `yaml:"settlement_lateness"` +} + // TencentIMConfig 描述 activity-service 调用腾讯云 IM REST API 的配置。 type TencentIMConfig struct { Enabled bool `yaml:"enabled"` @@ -182,27 +197,29 @@ type BroadcastConfig struct { // RocketMQConfig 描述 activity-service 消费房间事实的 MQ 连接。 type RocketMQConfig struct { - Enabled bool `yaml:"enabled"` - NameServers []string `yaml:"name_servers"` - NameServerDomain string `yaml:"name_server_domain"` - AccessKey string `yaml:"access_key"` - SecretKey string `yaml:"secret_key"` - SecurityToken string `yaml:"security_token"` - Namespace string `yaml:"namespace"` - VIPChannel bool `yaml:"vip_channel"` - RoomOutbox RoomOutboxMQConfig `yaml:"room_outbox"` - LuckyGiftOutbox LuckyGiftOutboxMQConfig `yaml:"lucky_gift_outbox"` - WalletOutbox WalletOutboxMQConfig `yaml:"wallet_outbox"` - UserOutbox UserOutboxMQConfig `yaml:"user_outbox"` - MessageActionOutbox MessageActionOutboxMQConfig `yaml:"message_action_outbox"` + Enabled bool `yaml:"enabled"` + NameServers []string `yaml:"name_servers"` + NameServerDomain string `yaml:"name_server_domain"` + AccessKey string `yaml:"access_key"` + SecretKey string `yaml:"secret_key"` + SecurityToken string `yaml:"security_token"` + Namespace string `yaml:"namespace"` + VIPChannel bool `yaml:"vip_channel"` + RoomOutbox RoomOutboxMQConfig `yaml:"room_outbox"` + LuckyGiftOutbox LuckyGiftOutboxMQConfig `yaml:"lucky_gift_outbox"` + WalletOutbox WalletOutboxMQConfig `yaml:"wallet_outbox"` + UserOutbox UserOutboxMQConfig `yaml:"user_outbox"` + MessageActionOutbox MessageActionOutboxMQConfig `yaml:"message_action_outbox"` + ActivityTemplateOutbox ActivityTemplateOutboxMQConfig `yaml:"activity_template_outbox"` } // RoomOutboxMQConfig 控制 activity 对 room_outbox topic 的消费位点。 type RoomOutboxMQConfig struct { - Enabled bool `yaml:"enabled"` - Topic string `yaml:"topic"` - ConsumerGroup string `yaml:"consumer_group"` - ConsumerMaxReconsumeTimes int32 `yaml:"consumer_max_reconsume_times"` + Enabled bool `yaml:"enabled"` + Topic string `yaml:"topic"` + ConsumerGroup string `yaml:"consumer_group"` + ActivityTemplateConsumerGroup string `yaml:"activity_template_consumer_group"` + ConsumerMaxReconsumeTimes int32 `yaml:"consumer_max_reconsume_times"` } // LuckyGiftOutboxMQConfig 控制 activity 对幸运礼物 owner fact 的独立消费位点。 @@ -249,6 +266,14 @@ type MessageActionOutboxMQConfig struct { Retry int `yaml:"retry"` } +type ActivityTemplateOutboxMQConfig struct { + Enabled bool `yaml:"enabled"` + Topic string `yaml:"topic"` + ProducerGroup string `yaml:"producer_group"` + SendTimeout time.Duration `yaml:"send_timeout"` + Retry int `yaml:"retry"` +} + // Default 返回本地默认配置。 func Default() Config { return Config{ @@ -287,6 +312,10 @@ func Default() Config { LockTTL: 30 * time.Second, MaxRetry: 16, }, + ActivityTemplateStatsWorker: ActivityTemplateStatsWorkerConfig{ + Enabled: true, PollInterval: time.Second, BatchSize: 100, LockTTL: 30 * time.Second, + }, + ActivityTemplateRuntime: ActivityTemplateRuntimeConfig{SettlementLateness: 10 * time.Minute}, MessageActionConfirmWorker: MessageActionConfirmWorkerConfig{ Enabled: true, OutboxPollInterval: time.Second, @@ -335,10 +364,11 @@ func defaultRocketMQConfig() RocketMQConfig { return RocketMQConfig{ Enabled: false, RoomOutbox: RoomOutboxMQConfig{ - Enabled: false, - Topic: "hyapp_room_outbox", - ConsumerGroup: "hyapp-activity-room-outbox", - ConsumerMaxReconsumeTimes: 16, + Enabled: false, + Topic: "hyapp_room_outbox", + ConsumerGroup: "hyapp-activity-room-outbox", + ActivityTemplateConsumerGroup: "hyapp-activity-template-room-outbox", + ConsumerMaxReconsumeTimes: 16, }, LuckyGiftOutbox: LuckyGiftOutboxMQConfig{ Enabled: false, @@ -375,6 +405,10 @@ func defaultRocketMQConfig() RocketMQConfig { SendTimeout: 5 * time.Second, Retry: 2, }, + ActivityTemplateOutbox: ActivityTemplateOutboxMQConfig{ + Enabled: false, Topic: "hyapp_activity_outbox", ProducerGroup: "hyapp-activity-template-outbox", + SendTimeout: 5 * time.Second, Retry: 2, + }, } } @@ -484,6 +518,21 @@ func Load(path string) (Config, error) { if cfg.WheelRewardWorker.MaxRetry <= 0 { cfg.WheelRewardWorker.MaxRetry = 16 } + if cfg.ActivityTemplateStatsWorker.PollInterval <= 0 { + cfg.ActivityTemplateStatsWorker.PollInterval = time.Second + } + if cfg.ActivityTemplateStatsWorker.BatchSize <= 0 { + cfg.ActivityTemplateStatsWorker.BatchSize = 100 + } + if cfg.ActivityTemplateStatsWorker.LockTTL <= 0 { + cfg.ActivityTemplateStatsWorker.LockTTL = 30 * time.Second + } + if cfg.ActivityTemplateRuntime.SettlementLateness <= 0 { + cfg.ActivityTemplateRuntime.SettlementLateness = 10 * time.Minute + } + if cfg.ActivityTemplateRuntime.SettlementLateness > 30*time.Minute { + return Config{}, errors.New("activity_template_runtime.settlement_lateness must not exceed 30m") + } rocketMQ, err := normalizeRocketMQConfig(cfg.RocketMQ) if err != nil { return Config{}, err @@ -506,6 +555,9 @@ func Load(path string) (Config, error) { if cfg.MessageActionConfirmWorker.Enabled && (!cfg.RocketMQ.UserOutbox.Enabled || !cfg.RocketMQ.MessageActionOutbox.Enabled) { return Config{}, errors.New("message action confirm worker requires rocketmq.user_outbox.enabled and rocketmq.message_action_outbox.enabled") } + if cfg.ActivityTemplateStatsWorker.Enabled && !cfg.RocketMQ.ActivityTemplateOutbox.Enabled { + return Config{}, errors.New("activity template stats worker requires rocketmq.activity_template_outbox.enabled") + } return cfg, nil } @@ -540,6 +592,9 @@ func normalizeRocketMQConfig(cfg RocketMQConfig) (RocketMQConfig, error) { if cfg.RoomOutbox.ConsumerGroup = strings.TrimSpace(cfg.RoomOutbox.ConsumerGroup); cfg.RoomOutbox.ConsumerGroup == "" { cfg.RoomOutbox.ConsumerGroup = defaults.RoomOutbox.ConsumerGroup } + if cfg.RoomOutbox.ActivityTemplateConsumerGroup = strings.TrimSpace(cfg.RoomOutbox.ActivityTemplateConsumerGroup); cfg.RoomOutbox.ActivityTemplateConsumerGroup == "" { + cfg.RoomOutbox.ActivityTemplateConsumerGroup = defaults.RoomOutbox.ActivityTemplateConsumerGroup + } if cfg.RoomOutbox.ConsumerMaxReconsumeTimes <= 0 { cfg.RoomOutbox.ConsumerMaxReconsumeTimes = defaults.RoomOutbox.ConsumerMaxReconsumeTimes } @@ -610,7 +665,19 @@ func normalizeRocketMQConfig(cfg RocketMQConfig) (RocketMQConfig, error) { if cfg.MessageActionOutbox.Retry < 0 { cfg.MessageActionOutbox.Retry = defaults.MessageActionOutbox.Retry } - if cfg.RoomOutbox.Enabled || cfg.LuckyGiftOutbox.Enabled || cfg.WalletOutbox.Enabled || cfg.UserOutbox.Enabled || cfg.MessageActionOutbox.Enabled { + if cfg.ActivityTemplateOutbox.Topic = strings.TrimSpace(cfg.ActivityTemplateOutbox.Topic); cfg.ActivityTemplateOutbox.Topic == "" { + cfg.ActivityTemplateOutbox.Topic = defaults.ActivityTemplateOutbox.Topic + } + if cfg.ActivityTemplateOutbox.ProducerGroup = strings.TrimSpace(cfg.ActivityTemplateOutbox.ProducerGroup); cfg.ActivityTemplateOutbox.ProducerGroup == "" { + cfg.ActivityTemplateOutbox.ProducerGroup = defaults.ActivityTemplateOutbox.ProducerGroup + } + if cfg.ActivityTemplateOutbox.SendTimeout <= 0 { + cfg.ActivityTemplateOutbox.SendTimeout = defaults.ActivityTemplateOutbox.SendTimeout + } + if cfg.ActivityTemplateOutbox.Retry < 0 { + cfg.ActivityTemplateOutbox.Retry = defaults.ActivityTemplateOutbox.Retry + } + if cfg.RoomOutbox.Enabled || cfg.LuckyGiftOutbox.Enabled || cfg.WalletOutbox.Enabled || cfg.UserOutbox.Enabled || cfg.MessageActionOutbox.Enabled || cfg.ActivityTemplateOutbox.Enabled { cfg.Enabled = true } if cfg.Enabled { diff --git a/services/activity-service/internal/domain/activitytemplate/activity_template.go b/services/activity-service/internal/domain/activitytemplate/activity_template.go new file mode 100644 index 00000000..d3d35a26 --- /dev/null +++ b/services/activity-service/internal/domain/activitytemplate/activity_template.go @@ -0,0 +1,207 @@ +package activitytemplate + +const ( + // ActivityTypeGiftChallenge 是当前原型对应的礼物挑战赛;类型字段保留,后续模板类型可复用同一生命周期框架。 + ActivityTypeGiftChallenge = "gift_challenge" + + StatusDraft = "draft" + StatusPublished = "published" + StatusDisabled = "disabled" + StatusArchived = "archived" + + LifecycleDraft = "draft" + LifecycleScheduled = "scheduled" + LifecycleOngoing = "ongoing" + LifecycleEnded = "ended" + LifecycleDisabled = "disabled" + LifecycleArchived = "archived" + + TaskTypeDailyVisit = "daily_visit" + TaskTypeGiftCount = "gift_count" + TaskTypeGiftCoinAmount = "gift_coin_amount" + + BoardTypeDaily = "daily" + BoardTypeTotal = "total" + + SharedAssetLocale = "*" +) + +// Locale 是活动页的单语言文案。运行侧先匹配用户语言,再回退到英语,避免把后台内部名称暴露给客户端。 +type Locale struct { + Locale string `json:"locale"` + Title string `json:"title"` + Rules string `json:"rules"` +} + +// Gift 是参与任务和排行榜计分的礼物引用;礼物价格和上下架状态仍由礼物 owner 服务维护。 +type Gift struct { + GiftID string `json:"gift_id"` + SortOrder int32 `json:"sort_order"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + CoinPrice int64 `json:"coin_price"` + PriceVersion string `json:"price_version"` +} + +// RewardItem is the safe client-facing projection copied from a wallet-owned pinned resource-group +// snapshot. It intentionally excludes grant strategies, admin IDs and mutable catalog metadata. +type RewardItem struct { + ItemType string `json:"item_type"` + ResourceID int64 `json:"resource_id"` + ResourceType string `json:"resource_type"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + Quantity int64 `json:"quantity"` + DurationMS int64 `json:"duration_ms"` + WalletAssetType string `json:"wallet_asset_type"` + WalletAssetAmount int64 `json:"wallet_asset_amount"` + SortOrder int32 `json:"sort_order"` +} + +type RewardSnapshot struct { + SourceGroupID int64 `json:"source_group_id"` + SnapshotID string `json:"snapshot_id"` + VersionNo int64 `json:"version_no"` + SnapshotHash string `json:"snapshot_hash"` + Name string `json:"name"` + Items []RewardItem `json:"items"` +} + +// Task 是活动实例内的每日任务档位。奖励引用资源组,使复杂资产组合仍由 wallet-service 原子发放。 +type Task struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TargetValue int64 `json:"target_value"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshot RewardSnapshot `json:"reward_snapshot"` +} + +// RankReward 是一个不重叠的名次区间。区间使用闭区间,活动周期本身仍使用 [start_ms,end_ms)。 +type RankReward struct { + BoardType string `json:"board_type"` + RankFrom int32 `json:"rank_from"` + RankTo int32 `json:"rank_to"` + ResourceGroupID int64 `json:"resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshot RewardSnapshot `json:"reward_snapshot"` +} + +// Asset 是活动页素材清单;Locale="*" 是共享素材,具体语言素材覆盖共享项。 +type Asset struct { + AssetKey string `json:"asset_key"` + Locale string `json:"locale"` + URL string `json:"url"` + MediaType string `json:"media_type"` + SortOrder int32 `json:"sort_order"` +} + +// Template 是运营后台称作“活动模版”的可排期活动实例。 +// Revision 用于后台乐观锁,PublishedVersion 指向最近一次发布形成的不可变完整快照,两者不能混用。 +type Template struct { + AppCode string `json:"app_code"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + Name string `json:"name"` + ActivityType string `json:"activity_type"` + Status string `json:"status"` + LifecycleStatus string `json:"lifecycle_status"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + AllRegions bool `json:"all_regions"` + RegionIDs []int64 `json:"region_ids"` + Locales []Locale `json:"locales"` + Gifts []Gift `json:"gifts"` + Tasks []Task `json:"tasks"` + DailyLeaderboardSize int32 `json:"daily_leaderboard_size"` + TotalLeaderboardSize int32 `json:"total_leaderboard_size"` + RankRewards []RankReward `json:"rank_rewards"` + Assets []Asset `json:"assets"` + DisplayConfigJSON string `json:"display_config_json"` + Revision int64 `json:"revision"` + PublishedVersion int64 `json:"published_version"` + CreatedByAdminID int64 `json:"created_by_admin_id"` + UpdatedByAdminID int64 `json:"updated_by_admin_id"` + PublishedByAdminID int64 `json:"published_by_admin_id"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` + PublishedAtMS int64 `json:"published_at_ms"` + ArchivedAtMS int64 `json:"archived_at_ms"` +} + +// Summary 是列表专用轻量投影,只附带区域范围,不加载规则、任务、榜单奖励和素材大字段。 +type Summary struct { + AppCode string + TemplateID string + TemplateCode string + Name string + ActivityType string + Status string + LifecycleStatus string + StartMS int64 + EndMS int64 + AllRegions bool + RegionIDs []int64 + Revision int64 + PublishedVersion int64 + CreatedByAdminID int64 + UpdatedByAdminID int64 + CreatedAtMS int64 + UpdatedAtMS int64 +} + +// ListQuery 是后台列表筛选。Status 同时接受持久状态和 scheduled/ongoing/ended 生命周期状态。 +type ListQuery struct { + Keyword string + Status string + RegionID *int64 + AllRegions *bool + StartMS int64 + EndMS int64 + Page int32 + PageSize int32 + NowMS int64 +} + +// UpdateCommand 承载整份配置替换;子配置必须和主表在一个事务里提交,避免读到半份模板。 +type UpdateCommand struct { + Template Template + ExpectedRevision int64 + OperatorAdminID int64 +} + +// StatusCommand 是发布、停用和软归档的乐观锁命令。 +type StatusCommand struct { + TemplateID string + Status string + ExpectedRevision int64 + OperatorAdminID int64 + RewardSnapshots map[int64]RewardSnapshot +} + +// Version 是一次发布的不可变快照。Snapshot 让后台可以审阅历史版本,运行侧也能按版本稳定读取配置。 +type Version struct { + TemplateID string + VersionNo int64 + Snapshot Template + PublishedByAdminID int64 + PublishedAtMS int64 + RuntimeFromMS int64 + RuntimeToMS int64 +} + +// CloneCommand 明确复制源版本和目标业务编码;源版本为 0 时复制当前编辑态配置。 +type CloneCommand struct { + SourceTemplateID string + SourceVersion int64 + TemplateCode string + Name string + OperatorAdminID int64 +} + +// ValidationIssue 是可绑定到表单字段的稳定校验结果;Code 给前端做国际化,Message 便于后台直接展示。 +type ValidationIssue struct { + Field string + Code string + Message string +} diff --git a/services/activity-service/internal/domain/activitytemplate/runtime.go b/services/activity-service/internal/domain/activitytemplate/runtime.go new file mode 100644 index 00000000..edf11666 --- /dev/null +++ b/services/activity-service/internal/domain/activitytemplate/runtime.go @@ -0,0 +1,225 @@ +package activitytemplate + +const ( + TaskStatusInProgress = "in_progress" + TaskStatusCompleted = "completed" + TaskStatusClaimed = "claimed" + + ClaimStatusPending = "pending" + ClaimStatusRunning = "running" + ClaimStatusGranted = "granted" + ClaimStatusFailed = "failed" + ClaimStatusDead = "dead" + + PeriodStatusPending = "pending" + PeriodStatusSettling = "settling" + PeriodStatusRewarding = "rewarding" + PeriodStatusSettled = "settled" + PeriodStatusCancelled = "cancelled" + + EventStatusConsumed = "consumed" + EventStatusSkipped = "skipped" +) + +// Runtime 是一次发布形成的不可变运行版本及其真实启停窗口。 +// Template 来自 activity_template_versions.snapshot_json,不读取后台当前编辑态。 +type Runtime struct { + Template Template + VersionNo int64 + RuntimeFromMS int64 + RuntimeToMS int64 +} + +// GiftEvent 是 room-service 已提交并完成钱包扣费的送礼事实。 +type GiftEvent struct { + EventID string + UserID int64 + GiftID string + GiftCount int64 + CoinAmount int64 + RegionID int64 + OccurredAtMS int64 +} + +type EventResult struct { + EventID string + Status string + SkipReason string + TemplateID string + TemplateCode string + VersionNo int64 + TaskDay string +} + +// TaskProgress 固化任务目标和奖励资源组,后台后续发布新版本不会改变已产生的进度与领奖内容。 +type TaskProgress struct { + AppCode string + TemplateID string + TemplateCode string + VersionNo int64 + TaskDay string + UserID int64 + TaskKey string + TaskType string + TargetValue int64 + ProgressValue int64 + RewardResourceGroupID int64 + RewardSnapshot RewardSnapshot + SortOrder int32 + Status string + CompletedAtMS int64 + ClaimedAtMS int64 + UpdatedAtMS int64 + FirstRegionID int64 + EarningRegionID int64 + AttributionAtMS int64 +} + +type VisitCommand struct { + UserID int64 + RegionID int64 + TemplateCode string + CommandID string + VersionNo int64 +} + +type VisitResult struct { + Runtime Runtime + Tasks []TaskProgress + FirstVisit bool +} + +type ClaimCommand struct { + UserID int64 + RegionID int64 + TemplateCode string + VersionNo int64 + TaskDay string + TaskKey string + CommandID string +} + +type TaskClaim struct { + AppCode string + ClaimID string + CommandID string + TemplateID string + TemplateCode string + VersionNo int64 + TaskDay string + TaskKey string + UserID int64 + RewardResourceGroupID int64 + RewardSnapshot RewardSnapshot + WalletCommandID string + WalletGrantID string + Status string + FailureReason string + AttemptCount int32 + CreatedAtMS int64 + UpdatedAtMS int64 + GrantedAtMS int64 + EarningRegionID int64 + AttributionAtMS int64 +} + +type TaskClaimQuery struct { + TemplateID string + VersionNo int64 + TaskDay string + TaskKey string + UserID int64 + Status string + Page int32 + PageSize int32 +} + +type LeaderboardEntry struct { + RankNo int32 + UserID int64 + Score int64 + GiftCount int64 + CoinAmount int64 + FirstScoredAtMS int64 + Snapshot bool +} + +type RankPeriod struct { + AppCode string + TemplateID string + TemplateCode string + VersionNo int64 + BoardType string + PeriodKey string + StartMS int64 + EndMS int64 + SettleAfterMS int64 + LeaderboardSize int32 + Status string + SettledAtMS int64 +} + +type LeaderboardQuery struct { + TemplateID string + TemplateCode string + VersionNo int64 + RegionID int64 + UserID int64 + BoardType string + PeriodKey string + Page int32 + PageSize int32 + NowMS int64 +} + +type LeaderboardResult struct { + Runtime Runtime + Period RankPeriod + Entries []LeaderboardEntry + MyEntry LeaderboardEntry + MyFound bool + Total int64 +} + +type RewardJob struct { + AppCode string + RewardJobID string + TemplateID string + TemplateCode string + VersionNo int64 + BoardType string + PeriodKey string + RankNo int32 + UserID int64 + Score int64 + ResourceGroupID int64 + RewardSnapshot RewardSnapshot + WalletCommandID string + WalletGrantID string + Status string + FailureReason string + AttemptCount int32 + MaxAttempts int32 + NextRetryAtMS int64 + CreatedAtMS int64 + UpdatedAtMS int64 + GrantedAtMS int64 +} + +type RewardJobQuery struct { + TemplateID string + VersionNo int64 + BoardType string + PeriodKey string + Status string + Page int32 + PageSize int32 +} + +// StatsOutboxRecord 是投递到 statistics-service 的 owner 事实;业务事务只写本地 outbox,MQ 失败不回滚计分。 +type StatsOutboxRecord struct { + OutboxID string + EventType string + Payload []byte + RetryCount int32 +} diff --git a/services/activity-service/internal/service/activitytemplate/runtime.go b/services/activity-service/internal/service/activitytemplate/runtime.go new file mode 100644 index 00000000..9a93fecb --- /dev/null +++ b/services/activity-service/internal/service/activitytemplate/runtime.go @@ -0,0 +1,671 @@ +package activitytemplate + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "log/slog" + "net/url" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" + roomeventsv1 "hyapp.local/api/proto/events/room/v1" + walletv1 "hyapp.local/api/proto/wallet/v1" + "hyapp/pkg/activitymq" + "hyapp/pkg/appcode" + "hyapp/pkg/idgen" + "hyapp/pkg/logx" + "hyapp/pkg/rocketmqx" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" + messageservice "hyapp/services/activity-service/internal/service/message" +) + +const ( + activityTemplateTaskRewardReason = "activity template daily task reward" + activityTemplateRankRewardReason = "activity template leaderboard reward" + activityTemplateTaskGrantSource = "activity_template_task" + activityTemplateRankGrantSource = "activity_template_rank" +) + +// RuntimeRepository is intentionally separate from the configuration Repository so legacy unit-test fakes +// remain small. Production MySQL implements both and New binds them through a checked type assertion. +type RuntimeRepository interface { + FindCurrentActivityTemplateRuntime(ctx context.Context, templateCode string, regionID int64, atMS int64) (domain.Runtime, bool, error) + FindActivityTemplateRuntimeForPeriod(ctx context.Context, templateCode string, versionNo int64, regionID int64, boardType string, periodKey string, atMS int64) (domain.Runtime, bool, error) + FindActivityTemplateRuntimeForUserTask(ctx context.Context, templateCode string, versionNo int64, userID int64, taskDay string, taskKey string) (domain.Runtime, bool, error) + FindActivityTemplateRuntimeForExactLeaderboard(ctx context.Context, templateCode string, versionNo int64, boardType string, periodKey string, atMS int64) (domain.Runtime, bool, error) + GetActivityTemplateRuntimeVersion(ctx context.Context, templateID string, versionNo int64) (domain.Runtime, error) + ConsumeActivityTemplateGiftEvent(ctx context.Context, event domain.GiftEvent, nowMS int64) (domain.EventResult, error) + VisitActivityTemplate(ctx context.Context, command domain.VisitCommand, nowMS int64) (domain.VisitResult, error) + ListActivityTemplateTaskProgress(ctx context.Context, runtime domain.Runtime, userID int64, taskDay string) ([]domain.TaskProgress, error) + PrepareActivityTemplateTaskClaim(ctx context.Context, runtime domain.Runtime, command domain.ClaimCommand, nowMS int64) (domain.TaskClaim, error) + MarkActivityTemplateTaskClaimGranted(ctx context.Context, claimID string, walletGrantID string, nowMS int64) (domain.TaskClaim, error) + MarkActivityTemplateTaskClaimFailed(ctx context.Context, claimID string, reason string, nowMS int64) error + ListActivityTemplateRuntimeLeaderboard(ctx context.Context, runtime domain.Runtime, query domain.LeaderboardQuery) (domain.LeaderboardResult, error) + ClaimDueActivityTemplateRankPeriods(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RankPeriod, error) + PrepareActivityTemplateRankSettlement(ctx context.Context, period domain.RankPeriod, nowMS int64) ([]domain.RewardJob, error) + ClaimFinalizableActivityTemplateRankPeriods(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RankPeriod, error) + ClaimActivityTemplateRewardJobs(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RewardJob, error) + ExtendActivityTemplateRewardJobLease(ctx context.Context, rewardJobID string, workerID string, nowMS int64, lockTTL time.Duration) error + MarkActivityTemplateRewardJobGrantedWithLease(ctx context.Context, rewardJobID string, workerID string, walletGrantID string, nowMS int64) error + MarkActivityTemplateRewardJobFailedWithLease(ctx context.Context, rewardJobID string, workerID string, reason string, nowMS int64) error + FinishActivityTemplateRankPeriodIfComplete(ctx context.Context, period domain.RankPeriod, nowMS int64) (bool, error) + ListActivityTemplateRewardJobs(ctx context.Context, query domain.RewardJobQuery) ([]domain.RewardJob, int64, error) + ClaimActivityTemplateRewardJobForManualRetry(ctx context.Context, templateID string, rewardJobID string, workerID string, nowMS int64, lockTTL time.Duration) (domain.RewardJob, error) + ListActivityTemplateTaskClaims(ctx context.Context, query domain.TaskClaimQuery) ([]domain.TaskClaim, int64, error) + ClaimActivityTemplateTaskClaimForRetry(ctx context.Context, templateID string, claimID string, nowMS int64) (domain.TaskClaim, error) + ClaimActivityTemplateStatsOutbox(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int) ([]domain.StatsOutboxRecord, error) + MarkActivityTemplateStatsOutboxSent(ctx context.Context, outboxID string, nowMS int64) error + MarkActivityTemplateStatsOutboxFailed(ctx context.Context, outboxID string, reason string, nowMS int64) error +} + +type RuntimeWallet interface { + GrantPinnedResourceGroup(ctx context.Context, req *walletv1.GrantPinnedResourceGroupRequest, opts ...grpc.CallOption) (*walletv1.ResourceGrantResponse, error) +} + +type StatsPublisher interface { + SendSync(ctx context.Context, message rocketmqx.Message) error +} + +type NoticeService interface { + CreateActivityNotice(ctx context.Context, cmd messageservice.NoticeCommand) (messageservice.NoticeResult, error) +} + +// BindRuntime installs optional runtime dependencies without widening the stable configuration constructor. +// Production wiring treats a missing binding as Unavailable; configuration-only tests never call these methods. +func (s *Service) BindRuntime(repository RuntimeRepository, wallet RuntimeWallet) { + if s == nil { + return + } + s.runtime = repository + s.runtimeWallet = wallet +} + +func (s *Service) BindNotice(notices NoticeService) { + if s != nil { + s.notices = notices + } +} + +func (s *Service) GetCurrentRuntime(ctx context.Context, regionID int64, templateCode string) (domain.Runtime, bool, error) { + if err := s.requireRuntime(); err != nil { + return domain.Runtime{}, false, err + } + if regionID <= 0 { + return domain.Runtime{}, false, xerr.New(xerr.InvalidArgument, "region_id is required") + } + return s.runtime.FindCurrentActivityTemplateRuntime(ctx, strings.TrimSpace(templateCode), regionID, s.now().UTC().UnixMilli()) +} + +func (s *Service) Visit(ctx context.Context, command domain.VisitCommand) (domain.VisitResult, error) { + if err := s.requireRuntime(); err != nil { + return domain.VisitResult{}, err + } + command.TemplateCode = strings.TrimSpace(command.TemplateCode) + command.CommandID = strings.TrimSpace(command.CommandID) + if command.UserID <= 0 || command.RegionID <= 0 || command.VersionNo <= 0 || command.TemplateCode == "" || command.CommandID == "" || len(command.CommandID) > 128 { + return domain.VisitResult{}, xerr.New(xerr.InvalidArgument, "visit command is incomplete") + } + return s.runtime.VisitActivityTemplate(ctx, command, s.now().UTC().UnixMilli()) +} + +func (s *Service) ListRuntimeTasks(ctx context.Context, userID, regionID, versionNo int64, templateCode, taskDay string) (domain.Runtime, []domain.TaskProgress, int64, error) { + if err := s.requireRuntime(); err != nil { + return domain.Runtime{}, nil, 0, err + } + if userID <= 0 || versionNo < 0 || strings.TrimSpace(templateCode) == "" || (versionNo == 0 && regionID <= 0) { + return domain.Runtime{}, nil, 0, xerr.New(xerr.InvalidArgument, "task query is incomplete") + } + nowMS := s.now().UTC().UnixMilli() + var runtime domain.Runtime + var found bool + var err error + if versionNo > 0 { + if strings.TrimSpace(taskDay) == "" { + return domain.Runtime{}, nil, 0, xerr.New(xerr.InvalidArgument, "task_day is required for historical version") + } + runtime, found, err = s.runtime.FindActivityTemplateRuntimeForUserTask(ctx, strings.TrimSpace(templateCode), versionNo, userID, taskDay, "") + } else { + runtime, found, err = s.runtime.FindCurrentActivityTemplateRuntime(ctx, strings.TrimSpace(templateCode), regionID, nowMS) + } + if err != nil { + return domain.Runtime{}, nil, 0, err + } + if !found { + return domain.Runtime{}, nil, 0, xerr.New(xerr.NotFound, "active activity template not found") + } + if strings.TrimSpace(taskDay) == "" { + taskDay = utcDay(nowMS) + } + dayStart, err := parseUTCDay(taskDay) + if err != nil || dayStart >= runtime.Template.EndMS || dayStart+int64(24*time.Hour/time.Millisecond) <= runtime.RuntimeFromMS { + return domain.Runtime{}, nil, 0, xerr.New(xerr.InvalidArgument, "task_day is outside the activity runtime") + } + items, err := s.runtime.ListActivityTemplateTaskProgress(ctx, runtime, userID, taskDay) + if err != nil { + return domain.Runtime{}, nil, 0, err + } + nextRefresh := dayStart + int64(24*time.Hour/time.Millisecond) + if runtime.Template.EndMS < nextRefresh { + nextRefresh = runtime.Template.EndMS + } + return runtime, items, nextRefresh, nil +} + +func (s *Service) ClaimRuntimeTaskReward(ctx context.Context, command domain.ClaimCommand) (domain.TaskClaim, error) { + if err := s.requireRuntime(); err != nil { + return domain.TaskClaim{}, err + } + if s.runtimeWallet == nil { + return domain.TaskClaim{}, xerr.New(xerr.Unavailable, "wallet client is not configured") + } + command.TemplateCode = strings.TrimSpace(command.TemplateCode) + command.TaskDay = strings.TrimSpace(command.TaskDay) + command.TaskKey = strings.TrimSpace(command.TaskKey) + command.CommandID = strings.TrimSpace(command.CommandID) + if command.UserID <= 0 || command.TemplateCode == "" || command.VersionNo <= 0 || command.TaskKey == "" || command.CommandID == "" || len(command.CommandID) > 128 { + return domain.TaskClaim{}, xerr.New(xerr.InvalidArgument, "task claim command is incomplete") + } + nowMS := s.now().UTC().UnixMilli() + if command.TaskDay == "" { + command.TaskDay = utcDay(nowMS) + } + if _, err := parseUTCDay(command.TaskDay); err != nil { + return domain.TaskClaim{}, err + } + // version_no 来自任务列表的不可变版本。即使同一 template_code 在同一个 UTC 日重发,v1 的失败 + // claim 也不会被 latest-v2 吞掉;物化 period 仍允许活动结束后的幂等 wallet 补偿。 + runtime, found, err := s.runtime.FindActivityTemplateRuntimeForUserTask( + ctx, command.TemplateCode, command.VersionNo, command.UserID, command.TaskDay, command.TaskKey, + ) + if err != nil { + return domain.TaskClaim{}, err + } + if !found { + return domain.TaskClaim{}, xerr.New(xerr.NotFound, "activity template task period not found") + } + claim, err := s.runtime.PrepareActivityTemplateTaskClaim(ctx, runtime, command, nowMS) + if err != nil || claim.Status == domain.ClaimStatusGranted { + return claim, err + } + if claim.RewardSnapshot.SnapshotID == "" { + err := xerr.New(xerr.Conflict, "activity task reward snapshot is missing") + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + resp, err := s.runtimeWallet.GrantPinnedResourceGroup(ctx, &walletv1.GrantPinnedResourceGroupRequest{ + CommandId: claim.WalletCommandID, AppCode: appcode.FromContext(ctx), TargetUserId: claim.UserID, + SnapshotId: claim.RewardSnapshot.SnapshotID, Reason: activityTemplateTaskRewardReason, + OperatorUserId: claim.UserID, GrantSource: activityTemplateTaskGrantSource, + ExpectedSnapshotHash: claim.RewardSnapshot.SnapshotHash, + }) + if err != nil { + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + walletGrantID := strings.TrimSpace(resp.GetGrant().GetGrantId()) + if walletGrantID == "" { + err := xerr.New(xerr.Internal, "wallet returned an empty resource grant") + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + return s.runtime.MarkActivityTemplateTaskClaimGranted(ctx, claim.ClaimID, walletGrantID, s.now().UTC().UnixMilli()) +} + +func (s *Service) ListRuntimeLeaderboard(ctx context.Context, query domain.LeaderboardQuery) (domain.LeaderboardResult, error) { + if err := s.requireRuntime(); err != nil { + return domain.LeaderboardResult{}, err + } + query.TemplateCode = strings.TrimSpace(query.TemplateCode) + query.BoardType = strings.ToLower(strings.TrimSpace(query.BoardType)) + query.PeriodKey = strings.TrimSpace(query.PeriodKey) + if query.UserID <= 0 || query.VersionNo < 0 || query.TemplateCode == "" || (query.VersionNo == 0 && query.RegionID <= 0) || (query.BoardType != domain.BoardTypeDaily && query.BoardType != domain.BoardTypeTotal) { + return domain.LeaderboardResult{}, xerr.New(xerr.InvalidArgument, "leaderboard query is invalid") + } + query.NowMS = s.now().UTC().UnixMilli() + var runtime domain.Runtime + var found bool + var err error + // 显式 period_key 是可分享、可从获奖通知回跳的稳定榜单身份。先按物化 period 解析其不可变发布版本, + // 因此活动结束或同一模版中途重发后仍能读取冻结榜;未显式指定时继续只暴露当前运行版本。 + if query.VersionNo > 0 && query.PeriodKey == "" { + if query.BoardType == domain.BoardTypeTotal { + query.PeriodKey = "total" + } else { + query.PeriodKey = utcDay(query.NowMS) + } + } + if query.PeriodKey != "" && query.VersionNo > 0 { + runtime, found, err = s.runtime.FindActivityTemplateRuntimeForExactLeaderboard( + ctx, query.TemplateCode, query.VersionNo, query.BoardType, query.PeriodKey, query.NowMS, + ) + } else if query.PeriodKey != "" { + runtime, found, err = s.runtime.FindActivityTemplateRuntimeForPeriod( + ctx, query.TemplateCode, query.VersionNo, query.RegionID, query.BoardType, query.PeriodKey, query.NowMS, + ) + } else { + runtime, found, err = s.runtime.FindCurrentActivityTemplateRuntime(ctx, query.TemplateCode, query.RegionID, query.NowMS) + } + if err != nil { + return domain.LeaderboardResult{}, err + } + if !found { + return domain.LeaderboardResult{}, xerr.New(xerr.NotFound, "active activity template not found") + } + return s.runtime.ListActivityTemplateRuntimeLeaderboard(ctx, runtime, query) +} + +func (s *Service) AdminListRuntimeLeaderboard(ctx context.Context, query domain.LeaderboardQuery) (domain.LeaderboardResult, error) { + if err := s.requireRuntime(); err != nil { + return domain.LeaderboardResult{}, err + } + query.TemplateID = strings.TrimSpace(query.TemplateID) + query.BoardType = strings.ToLower(strings.TrimSpace(query.BoardType)) + if query.TemplateID == "" || query.VersionNo <= 0 || (query.BoardType != domain.BoardTypeDaily && query.BoardType != domain.BoardTypeTotal) { + return domain.LeaderboardResult{}, xerr.New(xerr.InvalidArgument, "admin leaderboard query is invalid") + } + query.NowMS = s.now().UTC().UnixMilli() + runtime, err := s.runtime.GetActivityTemplateRuntimeVersion(ctx, query.TemplateID, query.VersionNo) + if err != nil { + return domain.LeaderboardResult{}, err + } + return s.runtime.ListActivityTemplateRuntimeLeaderboard(ctx, runtime, query) +} + +func (s *Service) ListRewardJobs(ctx context.Context, query domain.RewardJobQuery) ([]domain.RewardJob, int64, error) { + if err := s.requireRuntime(); err != nil { + return nil, 0, err + } + query.TemplateID = strings.TrimSpace(query.TemplateID) + query.BoardType = strings.ToLower(strings.TrimSpace(query.BoardType)) + query.PeriodKey = strings.TrimSpace(query.PeriodKey) + query.Status = strings.ToLower(strings.TrimSpace(query.Status)) + if query.TemplateID == "" { + return nil, 0, xerr.New(xerr.InvalidArgument, "template_id is required") + } + if query.BoardType != "" && query.BoardType != domain.BoardTypeDaily && query.BoardType != domain.BoardTypeTotal { + return nil, 0, xerr.New(xerr.InvalidArgument, "board_type is invalid") + } + if query.Status != "" && query.Status != domain.ClaimStatusPending && query.Status != domain.ClaimStatusRunning && query.Status != domain.ClaimStatusGranted && query.Status != domain.ClaimStatusFailed && query.Status != domain.ClaimStatusDead { + return nil, 0, xerr.New(xerr.InvalidArgument, "reward status is invalid") + } + return s.runtime.ListActivityTemplateRewardJobs(ctx, query) +} + +func (s *Service) ListTaskClaims(ctx context.Context, query domain.TaskClaimQuery) ([]domain.TaskClaim, int64, error) { + if err := s.requireRuntime(); err != nil { + return nil, 0, err + } + query.TemplateID = strings.TrimSpace(query.TemplateID) + query.TaskDay = strings.TrimSpace(query.TaskDay) + query.TaskKey = strings.TrimSpace(query.TaskKey) + query.Status = strings.ToLower(strings.TrimSpace(query.Status)) + if query.TemplateID == "" || query.VersionNo < 0 || query.UserID < 0 { + return nil, 0, xerr.New(xerr.InvalidArgument, "task claim query is invalid") + } + if query.TaskDay != "" { + if _, err := parseUTCDay(query.TaskDay); err != nil { + return nil, 0, err + } + } + if query.Status != "" && query.Status != domain.ClaimStatusPending && query.Status != domain.ClaimStatusRunning && query.Status != domain.ClaimStatusGranted && query.Status != domain.ClaimStatusFailed { + return nil, 0, xerr.New(xerr.InvalidArgument, "task claim status is invalid") + } + return s.runtime.ListActivityTemplateTaskClaims(ctx, query) +} + +func (s *Service) RetryTaskClaim(ctx context.Context, templateID, claimID string, operatorAdminID int64) (domain.TaskClaim, error) { + if err := s.requireRuntime(); err != nil { + return domain.TaskClaim{}, err + } + if s.runtimeWallet == nil { + return domain.TaskClaim{}, xerr.New(xerr.Unavailable, "wallet client is not configured") + } + if strings.TrimSpace(templateID) == "" || strings.TrimSpace(claimID) == "" || operatorAdminID <= 0 { + return domain.TaskClaim{}, xerr.New(xerr.InvalidArgument, "task claim retry command is incomplete") + } + claim, err := s.runtime.ClaimActivityTemplateTaskClaimForRetry(ctx, strings.TrimSpace(templateID), strings.TrimSpace(claimID), s.now().UTC().UnixMilli()) + if err != nil { + return domain.TaskClaim{}, err + } + if claim.RewardSnapshot.SnapshotID == "" || !validSHA256Hex(claim.RewardSnapshot.SnapshotHash) { + err := xerr.New(xerr.Conflict, "activity task reward snapshot is missing") + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + resp, err := s.runtimeWallet.GrantPinnedResourceGroup(ctx, &walletv1.GrantPinnedResourceGroupRequest{ + CommandId: claim.WalletCommandID, AppCode: appcode.FromContext(ctx), TargetUserId: claim.UserID, + SnapshotId: claim.RewardSnapshot.SnapshotID, ExpectedSnapshotHash: claim.RewardSnapshot.SnapshotHash, + Reason: activityTemplateTaskRewardReason, OperatorUserId: claim.UserID, GrantSource: activityTemplateTaskGrantSource, + }) + if err != nil { + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + walletGrantID := strings.TrimSpace(resp.GetGrant().GetGrantId()) + if walletGrantID == "" { + err := xerr.New(xerr.Internal, "wallet returned an empty resource grant") + _ = s.runtime.MarkActivityTemplateTaskClaimFailed(ctx, claim.ClaimID, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return domain.TaskClaim{}, err + } + return s.runtime.MarkActivityTemplateTaskClaimGranted(ctx, claim.ClaimID, walletGrantID, s.now().UTC().UnixMilli()) +} + +// ProcessRuntimeSettlementBatch separates bounded period materialization from bounded job delivery. A large +// leaderboard can therefore never make one cron RPC perform unbounded wallet calls; every delivery is fenced by +// a per-invocation lease owner and remains replay-safe through the immutable wallet command. +func (s *Service) ProcessRuntimeSettlementBatch(ctx context.Context, runID, workerID string, batchSize int32, lockTTL time.Duration) (claimed, processed, success, failure int32, hasMore bool, err error) { + if err := s.requireRuntime(); err != nil { + return 0, 0, 0, 0, false, err + } + if s.runtimeWallet == nil { + return 0, 0, 0, 0, false, xerr.New(xerr.Unavailable, "wallet client is not configured") + } + if batchSize <= 0 { + batchSize = 20 + } + nowMS := s.now().UTC().UnixMilli() + workerID = strings.TrimSpace(workerID) + if workerID == "" { + workerID = "activity-template-settlement" + } + runID = strings.TrimSpace(runID) + if runID == "" { + runID = idgen.New("run") + } + leaseOwner := activityTemplateRewardLeaseOwner(workerID, runID) + periods, err := s.runtime.ClaimDueActivityTemplateRankPeriods(ctx, leaseOwner, nowMS, lockTTL, batchSize) + if err != nil { + return 0, 0, 0, 0, false, err + } + for _, period := range periods { + _, prepareErr := s.runtime.PrepareActivityTemplateRankSettlement(ctx, period, s.now().UTC().UnixMilli()) + if prepareErr != nil { + logx.Error(ctx, "activity_template_prepare_settlement_failed", prepareErr, slog.String("template_id", period.TemplateID), slog.String("period_key", period.PeriodKey), slog.String("run_id", runID)) + failure++ + continue + } + // Empty/no-reward boards settle here; boards with jobs are released from the period lock and + // finish after the independent job batch reaches all-granted. + if _, finishErr := s.runtime.FinishActivityTemplateRankPeriodIfComplete(ctx, period, s.now().UTC().UnixMilli()); finishErr != nil { + failure++ + } + } + + jobs, err := s.runtime.ClaimActivityTemplateRewardJobs(ctx, leaseOwner, s.now().UTC().UnixMilli(), lockTTL, batchSize) + if err != nil { + return 0, 0, 0, failure, len(periods) == int(batchSize), err + } + claimed = int32(len(jobs)) + processed = int32(len(jobs)) + var succeeded atomic.Int32 + var failed atomic.Int32 + workerCount := min(len(jobs), 8) + if workerCount > 0 { + queue := make(chan domain.RewardJob) + var workers sync.WaitGroup + workers.Add(workerCount) + for range workerCount { + go func() { + defer workers.Done() + for job := range queue { + if _, grantErr := s.grantRuntimeRewardJob(ctx, job, leaseOwner, lockTTL); grantErr != nil { + failed.Add(1) + continue + } + succeeded.Add(1) + } + }() + } + for _, job := range jobs { + queue <- job + } + close(queue) + workers.Wait() + } + success = succeeded.Load() + failure += failed.Load() + + // A single job batch can span periods. Finalize each identity once after every wallet worker has stopped, + // so a period is never marked settled while an in-process job still owns a lease. + periodsToFinish := make(map[string]domain.RankPeriod) + for _, job := range jobs { + key := job.TemplateID + "\x00" + strconv.FormatInt(job.VersionNo, 10) + "\x00" + job.BoardType + "\x00" + job.PeriodKey + periodsToFinish[key] = domain.RankPeriod{ + AppCode: job.AppCode, TemplateID: job.TemplateID, TemplateCode: job.TemplateCode, VersionNo: job.VersionNo, + BoardType: job.BoardType, PeriodKey: job.PeriodKey, + } + } + for _, period := range periodsToFinish { + if _, finishErr := s.runtime.FinishActivityTemplateRankPeriodIfComplete(ctx, period, s.now().UTC().UnixMilli()); finishErr != nil { + failure++ + } + } + + // Recover the narrow crash window after the last granted-job commit but before its period transition. The + // repository only returns `rewarding` periods with zero non-granted jobs, so failed/dead/backoff queues cannot + // consume this bound or keep cron in a has_more hot loop. + finalizable, finalizeClaimErr := s.runtime.ClaimFinalizableActivityTemplateRankPeriods( + ctx, leaseOwner, s.now().UTC().UnixMilli(), lockTTL, batchSize, + ) + if finalizeClaimErr != nil { + return claimed, processed, success, failure, len(periods) == int(batchSize) || len(jobs) == int(batchSize), finalizeClaimErr + } + for _, period := range finalizable { + if _, finishErr := s.runtime.FinishActivityTemplateRankPeriodIfComplete(ctx, period, s.now().UTC().UnixMilli()); finishErr != nil { + failure++ + } + } + hasMore = len(periods) == int(batchSize) || len(jobs) == int(batchSize) || len(finalizable) == int(batchSize) + return claimed, processed, success, failure, hasMore, nil +} + +func (s *Service) RetryRewardJob(ctx context.Context, templateID, rewardJobID string, operatorAdminID int64) (domain.RewardJob, error) { + if err := s.requireRuntime(); err != nil { + return domain.RewardJob{}, err + } + if s.runtimeWallet == nil { + return domain.RewardJob{}, xerr.New(xerr.Unavailable, "wallet client is not configured") + } + if strings.TrimSpace(templateID) == "" || strings.TrimSpace(rewardJobID) == "" || operatorAdminID <= 0 { + return domain.RewardJob{}, xerr.New(xerr.InvalidArgument, "reward retry command is incomplete") + } + nowMS := s.now().UTC().UnixMilli() + leaseOwner := activityTemplateRewardLeaseOwner("admin-retry-"+strconv.FormatInt(operatorAdminID, 10), idgen.New("request")+":"+rewardJobID) + const manualRetryLeaseTTL = time.Minute + job, err := s.runtime.ClaimActivityTemplateRewardJobForManualRetry( + ctx, strings.TrimSpace(templateID), strings.TrimSpace(rewardJobID), leaseOwner, nowMS, manualRetryLeaseTTL, + ) + if err != nil || job.Status == domain.ClaimStatusGranted { + return job, err + } + walletGrantID, err := s.grantRuntimeRewardJob(ctx, job, leaseOwner, manualRetryLeaseTTL) + if err != nil { + return domain.RewardJob{}, err + } + job.Status = domain.ClaimStatusGranted + job.WalletGrantID = walletGrantID + job.FailureReason = "" + job.GrantedAtMS = s.now().UTC().UnixMilli() + job.UpdatedAtMS = job.GrantedAtMS + return job, nil +} + +func (s *Service) grantRuntimeRewardJob(ctx context.Context, job domain.RewardJob, leaseOwner string, lockTTL time.Duration) (string, error) { + markFailed := func(cause error) error { + if markErr := s.runtime.MarkActivityTemplateRewardJobFailedWithLease(ctx, job.RewardJobID, leaseOwner, xerr.MessageOf(cause), s.now().UTC().UnixMilli()); markErr != nil { + logx.Error(ctx, "activity_template_reward_job_failure_fence_lost", markErr, + slog.String("reward_job_id", job.RewardJobID), slog.String("lease_owner", leaseOwner)) + } + return cause + } + if job.RewardSnapshot.SnapshotID == "" || !validSHA256Hex(job.RewardSnapshot.SnapshotHash) { + err := xerr.New(xerr.Conflict, "activity rank reward snapshot is missing") + return "", markFailed(err) + } + if err := s.runtime.ExtendActivityTemplateRewardJobLease(ctx, job.RewardJobID, leaseOwner, s.now().UTC().UnixMilli(), lockTTL); err != nil { + return "", err + } + resp, err := s.runtimeWallet.GrantPinnedResourceGroup(ctx, &walletv1.GrantPinnedResourceGroupRequest{ + CommandId: job.WalletCommandID, AppCode: appcode.FromContext(ctx), TargetUserId: job.UserID, + SnapshotId: job.RewardSnapshot.SnapshotID, Reason: activityTemplateRankRewardReason, + OperatorUserId: job.UserID, GrantSource: activityTemplateRankGrantSource, + ExpectedSnapshotHash: job.RewardSnapshot.SnapshotHash, + }) + if err != nil { + return "", markFailed(err) + } + walletGrantID := strings.TrimSpace(resp.GetGrant().GetGrantId()) + if walletGrantID == "" { + err := xerr.New(xerr.Internal, "wallet returned an empty resource grant") + return "", markFailed(err) + } + // The wallet call can outlive the original lease window. Re-fence before emitting the user notice; if + // another worker took over, it will replay the same wallet command and stable notice event instead. + if err := s.runtime.ExtendActivityTemplateRewardJobLease(ctx, job.RewardJobID, leaseOwner, s.now().UTC().UnixMilli(), lockTTL); err != nil { + return "", err + } + if s.notices != nil { + action := url.Values{} + action.Set("template_code", job.TemplateCode) + action.Set("version_no", strconv.FormatInt(job.VersionNo, 10)) + action.Set("board_type", job.BoardType) + action.Set("period_key", job.PeriodKey) + _, noticeErr := s.notices.CreateActivityNotice(ctx, messageservice.NoticeCommand{ + TargetUserID: job.UserID, Producer: "activity-template-runtime", + ProducerEventID: job.RewardJobID + ":granted", ProducerEventType: "ActivityTemplateRankRewardGranted", + AggregateType: "activity_template_reward_job", AggregateID: job.RewardJobID, + TemplateID: job.TemplateID, TemplateVersion: strconv.FormatInt(job.VersionNo, 10), + // Inbox storage currently requires title/summary text. Persist stable content keys rather than + // English prose; App clients localize the keys with the immutable metadata parameters below. + Title: "activity_template.rank_reward.title", Summary: "activity_template.rank_reward.summary", + ActionType: "activity_detail", + ActionParam: action.Encode(), SentAtMS: s.now().UTC().UnixMilli(), + Metadata: map[string]any{ + "content_key": "activity_template.rank_reward_granted", "template_code": job.TemplateCode, + "version_no": job.VersionNo, "board_type": job.BoardType, "period_key": job.PeriodKey, + "rank_no": job.RankNo, "reward_name": job.RewardSnapshot.Name, + "resource_group_id": job.ResourceGroupID, + }, + }) + if noticeErr != nil { + // Wallet command is stable. Marking failed makes the next cron/admin retry replay the same wallet + // grant (idempotent) and retry the inbox write instead of silently losing the winner notification. + return "", markFailed(noticeErr) + } + } + if err := s.runtime.MarkActivityTemplateRewardJobGrantedWithLease(ctx, job.RewardJobID, leaseOwner, walletGrantID, s.now().UTC().UnixMilli()); err != nil { + // 钱包与站内信均已幂等成功但本地状态落库失败时,立即释放结算周期并标为 failed;下一轮会用同一 + // wallet_command_id/producer_event_id 补偿,不会重复发奖或重复通知。 + _ = s.runtime.MarkActivityTemplateRewardJobFailedWithLease(ctx, job.RewardJobID, leaseOwner, xerr.MessageOf(err), s.now().UTC().UnixMilli()) + return "", err + } + return walletGrantID, nil +} + +func activityTemplateRewardLeaseOwner(workerID, invocationID string) string { + workerID = strings.TrimSpace(workerID) + invocationID = strings.TrimSpace(invocationID) + owner := workerID + ":" + invocationID + if len(owner) <= 128 { + return owner + } + // Preserve an operator-readable prefix while bounding the persisted fencing token. + digest := sha256.Sum256([]byte(owner)) + return "activity-template-reward-lease:" + hex.EncodeToString(digest[:]) +} + +// HandleRoomEvent accepts only wallet-committed real gift facts. coin_spent is the scoring source of truth; +// configured gift price is a display snapshot and is never multiplied in this path. +func (s *Service) HandleRoomEvent(ctx context.Context, envelope *roomeventsv1.EventEnvelope) (int32, error) { + if s == nil || s.runtime == nil || envelope == nil || envelope.GetEventType() != "RoomGiftSent" { + return 0, nil + } + var gift roomeventsv1.RoomGiftSent + if err := proto.Unmarshal(envelope.GetBody(), &gift); err != nil { + return 0, err + } + if gift.GetIsRobotGift() || gift.GetSyntheticLuckyGift() || gift.GetRealRoomRobotGift() { + return 0, nil + } + if strings.TrimSpace(envelope.GetEventId()) == "" || gift.GetSenderUserId() <= 0 || strings.TrimSpace(gift.GetGiftId()) == "" || gift.GetGiftCount() <= 0 || gift.GetCoinSpent() <= 0 || gift.GetRegionId() <= 0 || envelope.GetOccurredAtMs() <= 0 { + return 0, nil + } + result, err := s.runtime.ConsumeActivityTemplateGiftEvent(appcode.WithContext(ctx, envelope.GetAppCode()), domain.GiftEvent{ + EventID: strings.TrimSpace(envelope.GetEventId()), UserID: gift.GetSenderUserId(), GiftID: strings.TrimSpace(gift.GetGiftId()), + // region_id is the sender's profile region captured by room-service at wallet commit. visible_region_id + // describes the room audience and must never choose a user-targeted activity runtime. + GiftCount: int64(gift.GetGiftCount()), CoinAmount: gift.GetCoinSpent(), RegionID: gift.GetRegionId(), + OccurredAtMS: envelope.GetOccurredAtMs(), + }, s.now().UTC().UnixMilli()) + if err != nil { + return 0, err + } + // Normal misses (no active runtime / gift not configured) are expected routing outcomes. Closed rank + // watermarks are operationally different: a committed gift arrived too late for at least one projection, + // so surface both partial acceptance and full rejection with delay metadata for alerting. + if strings.Contains(result.SkipReason, "settlement_window_closed") || strings.Contains(result.SkipReason, "rank_period_closed") { + logx.Warn(ctx, "activity_template_gift_rank_projection_late", + slog.String("event_id", result.EventID), slog.String("template_id", result.TemplateID), + slog.Int64("version_no", result.VersionNo), slog.String("task_day", result.TaskDay), + slog.String("projection_outcome", result.SkipReason), slog.Int64("processing_delay_ms", max(int64(0), s.now().UTC().UnixMilli()-envelope.GetOccurredAtMs()))) + } + if result.Status == domain.EventStatusConsumed { + return 1, nil + } + return 0, nil +} + +// ProcessStatsOutboxBatch publishes owner facts to the statistics topic. Sent is marked only after broker ack; +// a crash after ack but before MarkSent is harmless because statistics_event_consumption deduplicates event_id. +func (s *Service) ProcessStatsOutboxBatch(ctx context.Context, publisher StatsPublisher, topic, workerID string, batchSize int, lockTTL time.Duration) (int, int, error) { + if err := s.requireRuntime(); err != nil { + return 0, 0, err + } + if publisher == nil || strings.TrimSpace(topic) == "" { + return 0, 0, xerr.New(xerr.Unavailable, "activity template stats publisher is not configured") + } + items, err := s.runtime.ClaimActivityTemplateStatsOutbox(ctx, workerID, s.now().UTC().UnixMilli(), lockTTL, batchSize) + if err != nil { + return 0, 0, err + } + success := 0 + for _, item := range items { + tag, tagErr := activitymq.EventTypeTag(item.EventType) + if tagErr == nil { + tagErr = publisher.SendSync(ctx, rocketmqx.Message{Topic: topic, Tag: tag, Keys: []string{item.OutboxID}, Body: item.Payload}) + } + if tagErr != nil { + _ = s.runtime.MarkActivityTemplateStatsOutboxFailed(ctx, item.OutboxID, tagErr.Error(), s.now().UTC().UnixMilli()) + continue + } + if err := s.runtime.MarkActivityTemplateStatsOutboxSent(ctx, item.OutboxID, s.now().UTC().UnixMilli()); err != nil { + return len(items), success, err + } + success++ + } + return len(items), success, nil +} + +func (s *Service) requireRuntime() error { + if s == nil || s.runtime == nil { + return xerr.New(xerr.Unavailable, "activity template runtime repository is not configured") + } + return nil +} + +func utcDay(ms int64) string { return time.UnixMilli(ms).UTC().Format("2006-01-02") } + +func parseUTCDay(value string) (int64, error) { + t, err := time.Parse("2006-01-02", strings.TrimSpace(value)) + if err != nil || t.Format("2006-01-02") != strings.TrimSpace(value) { + return 0, xerr.New(xerr.InvalidArgument, "task_day must be UTC YYYY-MM-DD") + } + return t.UnixMilli(), nil +} diff --git a/services/activity-service/internal/service/activitytemplate/runtime_test.go b/services/activity-service/internal/service/activitytemplate/runtime_test.go new file mode 100644 index 00000000..8466c816 --- /dev/null +++ b/services/activity-service/internal/service/activitytemplate/runtime_test.go @@ -0,0 +1,451 @@ +package activitytemplate + +import ( + "context" + "errors" + "strings" + "testing" + "time" + + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" + roomeventsv1 "hyapp.local/api/proto/events/room/v1" + walletv1 "hyapp.local/api/proto/wallet/v1" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" + messageservice "hyapp/services/activity-service/internal/service/message" +) + +type leaderboardRuntimeRepository struct { + RuntimeRepository + currentRuntime domain.Runtime + currentFound bool + periodRuntime domain.Runtime + periodFound bool + currentCalls int + periodCalls int + periodVersionNo int64 + leaderboardCall int + giftEvents []domain.GiftEvent +} + +func (f *leaderboardRuntimeRepository) FindCurrentActivityTemplateRuntime(context.Context, string, int64, int64) (domain.Runtime, bool, error) { + f.currentCalls++ + return f.currentRuntime, f.currentFound, nil +} + +func (f *leaderboardRuntimeRepository) ConsumeActivityTemplateGiftEvent(_ context.Context, event domain.GiftEvent, _ int64) (domain.EventResult, error) { + f.giftEvents = append(f.giftEvents, event) + return domain.EventResult{EventID: event.EventID, Status: domain.EventStatusConsumed}, nil +} + +func (f *leaderboardRuntimeRepository) FindActivityTemplateRuntimeForPeriod(_ context.Context, _ string, versionNo int64, _ int64, _ string, _ string, _ int64) (domain.Runtime, bool, error) { + f.periodCalls++ + f.periodVersionNo = versionNo + return f.periodRuntime, f.periodFound, nil +} + +func (f *leaderboardRuntimeRepository) FindActivityTemplateRuntimeForExactLeaderboard(_ context.Context, _ string, versionNo int64, _ string, _ string, _ int64) (domain.Runtime, bool, error) { + f.periodCalls++ + f.periodVersionNo = versionNo + return f.periodRuntime, f.periodFound, nil +} + +func (f *leaderboardRuntimeRepository) ListActivityTemplateRuntimeLeaderboard(_ context.Context, runtime domain.Runtime, query domain.LeaderboardQuery) (domain.LeaderboardResult, error) { + f.leaderboardCall++ + return domain.LeaderboardResult{ + Runtime: runtime, + Period: domain.RankPeriod{ + TemplateID: runtime.Template.TemplateID, TemplateCode: runtime.Template.TemplateCode, + VersionNo: runtime.VersionNo, BoardType: query.BoardType, PeriodKey: query.PeriodKey, + }, + Entries: []domain.LeaderboardEntry{}, + }, nil +} + +func TestExactLeaderboardAllowsNonParticipantCrossRegionViewerAfterActivityEnded(t *testing.T) { + now := time.Date(2026, 7, 20, 0, 0, 0, 0, time.UTC) + ended := domain.Runtime{ + Template: domain.Template{TemplateID: "acttpl_1", TemplateCode: "summer_gifts", EndMS: now.Add(-time.Hour).UnixMilli()}, + VersionNo: 4, RuntimeFromMS: now.Add(-7 * 24 * time.Hour).UnixMilli(), RuntimeToMS: now.Add(-time.Hour).UnixMilli(), + } + repository := &leaderboardRuntimeRepository{periodRuntime: ended, periodFound: true} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, nil) + svc.now = func() time.Time { return now } + + got, err := svc.ListRuntimeLeaderboard(context.Background(), domain.LeaderboardQuery{ + // RegionID is deliberately zero: the gateway does not resolve the viewer's mutable current region + // for exact historical links, and repository resolution does not require participation. + TemplateCode: "summer_gifts", VersionNo: 4, UserID: 70001, RegionID: 0, BoardType: domain.BoardTypeTotal, + PeriodKey: "total", Page: 1, PageSize: 20, + }) + if err != nil { + t.Fatalf("ListRuntimeLeaderboard() error = %v", err) + } + if got.Runtime.VersionNo != 4 || repository.periodVersionNo != 4 || repository.periodCalls != 1 || repository.currentCalls != 0 || repository.leaderboardCall != 1 { + t.Fatalf("historical leaderboard resolution = %+v; repository=%+v", got.Runtime, repository) + } +} + +func TestListRuntimeLeaderboardWithoutPeriodRemainsCurrentOnly(t *testing.T) { + repository := &leaderboardRuntimeRepository{} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, nil) + + _, err := svc.ListRuntimeLeaderboard(context.Background(), domain.LeaderboardQuery{ + TemplateCode: "summer_gifts", UserID: 70001, RegionID: 8, BoardType: domain.BoardTypeTotal, + }) + if !xerr.IsCode(err, xerr.NotFound) { + t.Fatalf("ListRuntimeLeaderboard() error = %v, want not found", err) + } + if repository.currentCalls != 1 || repository.periodCalls != 0 { + t.Fatalf("unexpected lookup calls: current=%d period=%d", repository.currentCalls, repository.periodCalls) + } +} + +func TestHandleRoomEventExcludesEveryRobotGiftClassAndUsesCoinSpent(t *testing.T) { + repository := &leaderboardRuntimeRepository{} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, nil) + now := time.Date(2026, 7, 14, 9, 0, 0, 0, time.UTC) + svc.now = func() time.Time { return now } + + tests := []struct { + name string + edit func(*roomeventsv1.RoomGiftSent) + want int32 + }{ + {name: "is robot gift", edit: func(item *roomeventsv1.RoomGiftSent) { item.IsRobotGift = true }}, + {name: "synthetic lucky gift", edit: func(item *roomeventsv1.RoomGiftSent) { item.SyntheticLuckyGift = true }}, + {name: "real room robot gift", edit: func(item *roomeventsv1.RoomGiftSent) { item.RealRoomRobotGift = true }}, + {name: "real user gift", edit: func(*roomeventsv1.RoomGiftSent) {}, want: 1}, + } + for index, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + before := len(repository.giftEvents) + gift := &roomeventsv1.RoomGiftSent{ + SenderUserId: 90001, GiftId: "rose", GiftCount: 3, GiftValue: 999_999, + CoinSpent: 750, RegionId: 12, VisibleRegionId: 99, + } + tt.edit(gift) + body, err := proto.Marshal(gift) + if err != nil { + t.Fatalf("marshal gift: %v", err) + } + consumed, err := svc.HandleRoomEvent(context.Background(), &roomeventsv1.EventEnvelope{ + EventId: "evt-" + tt.name, EventType: "RoomGiftSent", AppCode: "hyapp", + OccurredAtMs: now.Add(time.Duration(index) * time.Millisecond).UnixMilli(), Body: body, + }) + if err != nil || consumed != tt.want { + t.Fatalf("HandleRoomEvent() = (%d, %v), want (%d, nil)", consumed, err, tt.want) + } + if tt.want == 0 && len(repository.giftEvents) != before { + t.Fatalf("robot gift reached score repository: %+v", repository.giftEvents[before:]) + } + }) + } + if len(repository.giftEvents) != 1 || repository.giftEvents[0].CoinAmount != 750 || repository.giftEvents[0].GiftCount != 3 || repository.giftEvents[0].RegionID != 12 { + t.Fatalf("real gift score fact = %+v; coin_spent must be source of truth", repository.giftEvents) + } +} + +type retryRewardRepository struct { + RuntimeRepository + job domain.RewardJob + taskRuntime domain.Runtime + taskClaim domain.TaskClaim + claimCalls int + taskClaimCalls int + taskVersionNo int64 + markedGranted []string + markedFailed []string + taskGranted []string + taskFailed []string + walletGrantIDs []string + leaseOwners []string +} + +func (f *retryRewardRepository) FindCurrentActivityTemplateRuntime(context.Context, string, int64, int64) (domain.Runtime, bool, error) { + return domain.Runtime{}, false, nil +} + +func (f *retryRewardRepository) FindActivityTemplateRuntimeForUserTask(_ context.Context, _ string, versionNo int64, _ int64, _ string, _ string) (domain.Runtime, bool, error) { + f.taskVersionNo = versionNo + return f.taskRuntime, f.taskRuntime.VersionNo > 0, nil +} + +func (f *retryRewardRepository) PrepareActivityTemplateTaskClaim(context.Context, domain.Runtime, domain.ClaimCommand, int64) (domain.TaskClaim, error) { + f.taskClaimCalls++ + claim := f.taskClaim + claim.Status = domain.ClaimStatusRunning + claim.AttemptCount = int32(f.taskClaimCalls) + return claim, nil +} + +func (f *retryRewardRepository) MarkActivityTemplateTaskClaimGranted(_ context.Context, claimID, walletGrantID string, nowMS int64) (domain.TaskClaim, error) { + f.taskGranted = append(f.taskGranted, claimID) + claim := f.taskClaim + claim.Status = domain.ClaimStatusGranted + claim.WalletGrantID = walletGrantID + claim.GrantedAtMS = nowMS + return claim, nil +} + +func (f *retryRewardRepository) MarkActivityTemplateTaskClaimFailed(_ context.Context, claimID, _ string, _ int64) error { + f.taskFailed = append(f.taskFailed, claimID) + return nil +} + +func (f *retryRewardRepository) ClaimActivityTemplateRewardJobForManualRetry(_ context.Context, _, _ string, workerID string, _ int64, _ time.Duration) (domain.RewardJob, error) { + f.claimCalls++ + f.leaseOwners = append(f.leaseOwners, workerID) + job := f.job + job.Status = domain.ClaimStatusRunning + job.AttemptCount = int32(f.claimCalls) + return job, nil +} + +func (f *retryRewardRepository) ExtendActivityTemplateRewardJobLease(_ context.Context, _, workerID string, _ int64, _ time.Duration) error { + f.leaseOwners = append(f.leaseOwners, workerID) + return nil +} + +func (f *retryRewardRepository) MarkActivityTemplateRewardJobGrantedWithLease(_ context.Context, jobID, workerID, walletGrantID string, _ int64) error { + f.markedGranted = append(f.markedGranted, jobID) + f.leaseOwners = append(f.leaseOwners, workerID) + f.walletGrantIDs = append(f.walletGrantIDs, walletGrantID) + return nil +} + +func (f *retryRewardRepository) MarkActivityTemplateRewardJobFailedWithLease(_ context.Context, jobID, workerID, _ string, _ int64) error { + f.markedFailed = append(f.markedFailed, jobID) + f.leaseOwners = append(f.leaseOwners, workerID) + return nil +} + +type sequenceRuntimeWallet struct { + requests []*walletv1.GrantPinnedResourceGroupRequest + errors []error +} + +func (f *sequenceRuntimeWallet) GrantPinnedResourceGroup(_ context.Context, req *walletv1.GrantPinnedResourceGroupRequest, _ ...grpc.CallOption) (*walletv1.ResourceGrantResponse, error) { + f.requests = append(f.requests, req) + index := len(f.requests) - 1 + if index < len(f.errors) && f.errors[index] != nil { + return nil, f.errors[index] + } + return &walletv1.ResourceGrantResponse{Grant: &walletv1.ResourceGrant{GrantId: "wallet-grant-1"}}, nil +} + +type captureRuntimeNotice struct { + commands []messageservice.NoticeCommand +} + +type settlementLeaseRepository struct { + RuntimeRepository + periods []domain.RankPeriod + finalizable []domain.RankPeriod + jobs []domain.RewardJob + periodOwner string + jobOwner string + leaseOwners []string + prepared []string + finished []string + granted []string + failed []string +} + +func (f *settlementLeaseRepository) ClaimDueActivityTemplateRankPeriods(_ context.Context, workerID string, _ int64, _ time.Duration, _ int32) ([]domain.RankPeriod, error) { + f.periodOwner = workerID + return append([]domain.RankPeriod(nil), f.periods...), nil +} + +func (f *settlementLeaseRepository) PrepareActivityTemplateRankSettlement(_ context.Context, period domain.RankPeriod, _ int64) ([]domain.RewardJob, error) { + f.prepared = append(f.prepared, period.BoardType+":"+period.PeriodKey) + return []domain.RewardJob{}, nil +} + +func (f *settlementLeaseRepository) ClaimFinalizableActivityTemplateRankPeriods(_ context.Context, _ string, _ int64, _ time.Duration, _ int32) ([]domain.RankPeriod, error) { + return append([]domain.RankPeriod(nil), f.finalizable...), nil +} + +func (f *settlementLeaseRepository) FinishActivityTemplateRankPeriodIfComplete(_ context.Context, period domain.RankPeriod, _ int64) (bool, error) { + f.finished = append(f.finished, period.BoardType+":"+period.PeriodKey) + return true, nil +} + +func (f *settlementLeaseRepository) ClaimActivityTemplateRewardJobs(_ context.Context, workerID string, _ int64, _ time.Duration, _ int32) ([]domain.RewardJob, error) { + f.jobOwner = workerID + return append([]domain.RewardJob(nil), f.jobs...), nil +} + +func (f *settlementLeaseRepository) ExtendActivityTemplateRewardJobLease(_ context.Context, _ string, workerID string, _ int64, _ time.Duration) error { + f.leaseOwners = append(f.leaseOwners, workerID) + return nil +} + +func (f *settlementLeaseRepository) MarkActivityTemplateRewardJobGrantedWithLease(_ context.Context, jobID, workerID, _ string, _ int64) error { + f.leaseOwners = append(f.leaseOwners, workerID) + f.granted = append(f.granted, jobID) + return nil +} + +func (f *settlementLeaseRepository) MarkActivityTemplateRewardJobFailedWithLease(_ context.Context, jobID, workerID, _ string, _ int64) error { + f.leaseOwners = append(f.leaseOwners, workerID) + f.failed = append(f.failed, jobID) + return nil +} + +func TestSettlementSeparatesPeriodMaterializationFromBoundedLeasedJobDelivery(t *testing.T) { + periodDaily := domain.RankPeriod{AppCode: "hyapp", TemplateID: "tpl-1", TemplateCode: "summer", VersionNo: 3, BoardType: domain.BoardTypeDaily, PeriodKey: "2026-07-14"} + periodTotal := domain.RankPeriod{AppCode: "hyapp", TemplateID: "tpl-1", TemplateCode: "summer", VersionNo: 3, BoardType: domain.BoardTypeTotal, PeriodKey: "total"} + job := domain.RewardJob{ + AppCode: "hyapp", RewardJobID: "job-1", TemplateID: "tpl-1", TemplateCode: "summer", VersionNo: 3, + BoardType: domain.BoardTypeDaily, PeriodKey: "2026-07-14", UserID: 1001, ResourceGroupID: 81, + WalletCommandID: "wallet-stable", RewardSnapshot: domain.RewardSnapshot{SnapshotID: "rgs-1", SnapshotHash: strings.Repeat("d", 64)}, + } + repository := &settlementLeaseRepository{periods: []domain.RankPeriod{periodDaily, periodTotal}, jobs: []domain.RewardJob{job}} + wallet := &sequenceRuntimeWallet{} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, wallet) + ctx := appcode.WithContext(context.Background(), "hyapp") + + claimed, processed, success, failure, hasMore, err := svc.ProcessRuntimeSettlementBatch(ctx, "run-77", "node-a", 2, 30*time.Second) + if err != nil || claimed != 1 || processed != 1 || success != 1 || failure != 0 || !hasMore { + t.Fatalf("settlement counters = (%d,%d,%d,%d,%v,%v)", claimed, processed, success, failure, hasMore, err) + } + if repository.periodOwner != "node-a:run-77" || repository.jobOwner != repository.periodOwner || len(repository.prepared) != 2 || + len(repository.granted) != 1 || len(repository.failed) != 0 || len(wallet.requests) != 1 { + t.Fatalf("bounded settlement state mismatch: repository=%+v wallet=%+v", repository, wallet.requests) + } + for _, owner := range repository.leaseOwners { + if owner != repository.jobOwner { + t.Fatalf("job completion escaped lease owner: owners=%v job_owner=%q", repository.leaseOwners, repository.jobOwner) + } + } + if len(repository.finished) != 3 { // two post-materialization checks plus one post-job finalization + t.Fatalf("period finalization checks = %v", repository.finished) + } + if activityTemplateRewardLeaseOwner("node-a", "old-run") == activityTemplateRewardLeaseOwner("node-a", "new-run") { + t.Fatal("settlement invocations on one node must have distinct fencing owners") + } +} + +func TestSettlementHasMoreIgnoresFiftyBlockedPeriodsAndDoesNotStarvePending(t *testing.T) { + // Repository discovery represents the production SQL result after fifty older settling periods with + // dead/backoff jobs were filtered out: only the later pending period is actionable. + pending := domain.RankPeriod{ + AppCode: "hyapp", TemplateID: "pending-after-50-blocked", TemplateCode: "summer", VersionNo: 3, + BoardType: domain.BoardTypeTotal, PeriodKey: "total", + } + repository := &settlementLeaseRepository{periods: []domain.RankPeriod{pending}} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, &sequenceRuntimeWallet{}) + ctx := appcode.WithContext(context.Background(), "hyapp") + + claimed, processed, success, failure, hasMore, err := svc.ProcessRuntimeSettlementBatch( + ctx, "run-no-hot-loop", "node-a", 50, time.Minute, + ) + if err != nil || claimed != 0 || processed != 0 || success != 0 || failure != 0 { + t.Fatalf("settlement counters = (%d,%d,%d,%d,%v): %v", claimed, processed, success, failure, hasMore, err) + } + if hasMore { + t.Fatal("blocked settling periods must not keep has_more true after the sole pending period is processed") + } + if len(repository.prepared) != 1 || repository.prepared[0] != "total:total" { + t.Fatalf("later pending period was starved: prepared=%v", repository.prepared) + } +} + +func (f *captureRuntimeNotice) CreateActivityNotice(_ context.Context, cmd messageservice.NoticeCommand) (messageservice.NoticeResult, error) { + f.commands = append(f.commands, cmd) + return messageservice.NoticeResult{Created: true}, nil +} + +func TestRetryRewardJobReplaysStableWalletCommandAndCreatesIdempotentWinnerNotice(t *testing.T) { + job := domain.RewardJob{ + RewardJobID: "reward-job-1", TemplateID: "acttpl_1", TemplateCode: "summer", VersionNo: 3, + BoardType: domain.BoardTypeTotal, PeriodKey: "total", RankNo: 2, UserID: 88001, ResourceGroupID: 77, + WalletCommandID: "activity-template-rank:stable-command", + RewardSnapshot: domain.RewardSnapshot{SnapshotID: "rgs_rank", SnapshotHash: strings.Repeat("a", 64), Name: "Champion reward"}, + } + repository := &retryRewardRepository{job: job} + wallet := &sequenceRuntimeWallet{errors: []error{errors.New("wallet timeout"), nil}} + notices := &captureRuntimeNotice{} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, wallet) + svc.BindNotice(notices) + ctx := appcode.WithContext(context.Background(), "hyapp") + + if _, err := svc.RetryRewardJob(ctx, job.TemplateID, job.RewardJobID, 90001); err == nil { + t.Fatal("first retry must expose wallet failure") + } + got, err := svc.RetryRewardJob(ctx, job.TemplateID, job.RewardJobID, 90001) + if err != nil { + t.Fatalf("second RetryRewardJob() error = %v", err) + } + if len(wallet.requests) != 2 || wallet.requests[0].GetCommandId() != job.WalletCommandID || wallet.requests[1].GetCommandId() != job.WalletCommandID { + t.Fatalf("wallet commands are not stable: %+v", wallet.requests) + } + if got.Status != domain.ClaimStatusGranted || got.WalletGrantID != "wallet-grant-1" || len(repository.markedFailed) != 1 || len(repository.markedGranted) != 1 { + t.Fatalf("retry result=%+v repository failed=%v granted=%v", got, repository.markedFailed, repository.markedGranted) + } + if len(repository.leaseOwners) != 7 || repository.leaseOwners[0] == "" || + repository.leaseOwners[0] != repository.leaseOwners[1] || repository.leaseOwners[1] != repository.leaseOwners[2] || + repository.leaseOwners[3] == repository.leaseOwners[0] || repository.leaseOwners[3] != repository.leaseOwners[4] || + repository.leaseOwners[4] != repository.leaseOwners[5] || repository.leaseOwners[5] != repository.leaseOwners[6] { + t.Fatalf("manual retry lease fencing mismatch: %+v", repository.leaseOwners) + } + if len(notices.commands) != 1 || notices.commands[0].ProducerEventID != job.RewardJobID+":granted" || + notices.commands[0].ActionType != "activity_detail" || notices.commands[0].ActionParam != "board_type=total&period_key=total&template_code=summer&version_no=3" { + t.Fatalf("winner notice is not stable/readable: %+v", notices.commands) + } + notice := notices.commands[0] + if notice.Title != "activity_template.rank_reward.title" || notice.Summary != "activity_template.rank_reward.summary" || + strings.Contains(notice.Title, "Daily leaderboard") || notice.Metadata["content_key"] != "activity_template.rank_reward_granted" || + notice.Metadata["template_code"] != "summer" || notice.Metadata["board_type"] != domain.BoardTypeTotal || + notice.Metadata["period_key"] != "total" || notice.Metadata["reward_name"] != "Champion reward" { + t.Fatalf("winner notice must use localization keys and immutable metadata: %+v", notice) + } +} + +func TestTaskClaimWalletFailureRemainsRetryableAfterActivityEnds(t *testing.T) { + taskDay := "2026-07-14" + endedAt := time.Date(2026, 7, 14, 23, 59, 0, 0, time.UTC) + runtime := domain.Runtime{ + Template: domain.Template{TemplateID: "acttpl_1", TemplateCode: "summer", EndMS: endedAt.UnixMilli()}, + VersionNo: 3, RuntimeFromMS: endedAt.Add(-24 * time.Hour).UnixMilli(), RuntimeToMS: endedAt.UnixMilli(), + } + claim := domain.TaskClaim{ + ClaimID: "task-claim-1", TemplateID: runtime.Template.TemplateID, TemplateCode: runtime.Template.TemplateCode, + VersionNo: runtime.VersionNo, TaskDay: taskDay, TaskKey: "gift-10", UserID: 77001, + RewardResourceGroupID: 88, WalletCommandID: "activity-template-task:stable-command", + RewardSnapshot: domain.RewardSnapshot{SnapshotID: "rgs_task", SnapshotHash: strings.Repeat("b", 64)}, + } + repository := &retryRewardRepository{taskRuntime: runtime, taskClaim: claim} + wallet := &sequenceRuntimeWallet{errors: []error{errors.New("wallet timeout"), nil}} + svc := New(&fakeRepository{}, nil, nil) + svc.BindRuntime(repository, wallet) + svc.now = func() time.Time { return endedAt.Add(2 * time.Hour) } + command := domain.ClaimCommand{ + UserID: claim.UserID, RegionID: 6, TemplateCode: claim.TemplateCode, VersionNo: claim.VersionNo, TaskDay: taskDay, + TaskKey: claim.TaskKey, CommandID: "client-command-1", + } + ctx := appcode.WithContext(context.Background(), "hyapp") + + if _, err := svc.ClaimRuntimeTaskReward(ctx, command); err == nil { + t.Fatal("first claim must expose wallet failure") + } + got, err := svc.ClaimRuntimeTaskReward(ctx, command) + if err != nil { + t.Fatalf("retry after activity end error = %v", err) + } + if repository.taskVersionNo != claim.VersionNo || repository.taskClaimCalls != 2 || len(repository.taskFailed) != 1 || len(repository.taskGranted) != 1 || got.Status != domain.ClaimStatusGranted { + t.Fatalf("task compensation result=%+v repository=%+v", got, repository) + } + if len(wallet.requests) != 2 || wallet.requests[0].GetCommandId() != claim.WalletCommandID || wallet.requests[1].GetCommandId() != claim.WalletCommandID { + t.Fatalf("task wallet command changed across retries: %+v", wallet.requests) + } +} diff --git a/services/activity-service/internal/service/activitytemplate/service.go b/services/activity-service/internal/service/activitytemplate/service.go new file mode 100644 index 00000000..698de1ab --- /dev/null +++ b/services/activity-service/internal/service/activitytemplate/service.go @@ -0,0 +1,1047 @@ +package activitytemplate + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "net/url" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/grpc" + walletv1 "hyapp.local/api/proto/wallet/v1" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +const ( + defaultLeaderboardSize = int32(100) + maxActivityDurationMS = int64((366 * 24 * time.Hour) / time.Millisecond) + maxDisplayConfigBytes = 64 * 1024 + maxRankRewardRanges = 100 +) + +var ( + templateCodePattern = regexp.MustCompile(`^[a-z][a-z0-9_-]{2,63}$`) + taskKeyPattern = regexp.MustCompile(`^[a-z][a-z0-9_-]{1,63}$`) + localePattern = regexp.MustCompile(`^[a-z]{2,3}(?:-[a-z0-9]{2,8})*$`) + assetKeyPattern = regexp.MustCompile(`^[a-z][a-z0-9_.-]{1,63}$`) +) + +// Repository 是活动模版聚合的持久化边界。完整子配置、版本快照和状态必须由 activity-service 同库事务维护。 +type Repository interface { + ListActivityTemplates(ctx context.Context, query domain.ListQuery) ([]domain.Summary, int64, error) + GetActivityTemplate(ctx context.Context, templateID string) (domain.Template, error) + CreateActivityTemplate(ctx context.Context, template domain.Template, operatorAdminID int64, nowMS int64) (domain.Template, error) + UpdateActivityTemplate(ctx context.Context, command domain.UpdateCommand, nowMS int64) (domain.Template, error) + SetActivityTemplateStatus(ctx context.Context, command domain.StatusCommand, nowMS int64) (domain.Template, error) + ListActivityTemplateVersions(ctx context.Context, templateID string, page int32, pageSize int32) ([]domain.Version, int64, error) + GetActivityTemplateVersion(ctx context.Context, templateID string, versionNo int64) (domain.Version, error) +} + +// Service 拥有活动模版校验、乐观锁、发布状态机和克隆语义;HTTP/gRPC 层只做协议适配。 +type Service struct { + repository Repository + catalog CatalogClient + regions RegionSource + runtime RuntimeRepository + runtimeWallet RuntimeWallet + rewardSnapshots RewardSnapshotWallet + notices NoticeService + now func() time.Time +} + +// CatalogClient 是发布时确认礼物和奖励资源组仍由 owner service 激活的最小契约。 +// 后台提交的名称、价格和 ID 都只是候选输入,不能代替 wallet-service 当前事实。 +type CatalogClient interface { + ListGiftConfigs(ctx context.Context, req *walletv1.ListGiftConfigsRequest, opts ...grpc.CallOption) (*walletv1.ListGiftConfigsResponse, error) + GetResourceGroup(ctx context.Context, req *walletv1.GetResourceGroupRequest, opts ...grpc.CallOption) (*walletv1.GetResourceGroupResponse, error) +} + +type RewardSnapshotWallet interface { + PinResourceGroupSnapshot(ctx context.Context, req *walletv1.PinResourceGroupSnapshotRequest, opts ...grpc.CallOption) (*walletv1.PinResourceGroupSnapshotResponse, error) +} + +// RegionSource 复用 user-service 区域主数据适配器,发布时拒绝已停用或不存在的定向区域。 +type RegionSource interface { + ListActiveRegionIDs(ctx context.Context) ([]int64, error) +} + +func New(repository Repository, catalog CatalogClient, regions RegionSource) *Service { + service := &Service{repository: repository, catalog: catalog, regions: regions, now: time.Now} + // Production MySQL/wallet clients implement the runtime surfaces. Type assertions keep configuration-only + // fakes source-compatible while still failing closed when a runtime RPC is invoked without real dependencies. + service.runtime, _ = repository.(RuntimeRepository) + service.runtimeWallet, _ = catalog.(RuntimeWallet) + service.rewardSnapshots, _ = catalog.(RewardSnapshotWallet) + return service +} + +func (s *Service) List(ctx context.Context, query domain.ListQuery) ([]domain.Summary, int64, error) { + if err := s.requireRepository(); err != nil { + return nil, 0, err + } + query.Keyword = strings.TrimSpace(query.Keyword) + query.Status = normalizeStatus(query.Status) + query.NowMS = s.now().UTC().UnixMilli() + if !validListStatus(query.Status) { + return nil, 0, xerr.New(xerr.InvalidArgument, "status filter is invalid") + } + if query.StartMS > 0 && query.EndMS > 0 && query.EndMS <= query.StartMS { + return nil, 0, xerr.New(xerr.InvalidArgument, "time range must use [start_ms,end_ms)") + } + if query.StartMS < 0 || query.EndMS < 0 { + return nil, 0, xerr.New(xerr.InvalidArgument, "start_ms and end_ms must not be negative") + } + if query.RegionID != nil && *query.RegionID <= 0 { + return nil, 0, xerr.New(xerr.InvalidArgument, "region_id must be positive") + } + items, total, err := s.repository.ListActivityTemplates(ctx, query) + if err != nil { + return nil, 0, err + } + for index := range items { + items[index].LifecycleStatus = lifecycleStatus(items[index].Status, items[index].StartMS, items[index].EndMS, query.NowMS) + } + return items, total, nil +} + +func (s *Service) Get(ctx context.Context, templateID string) (domain.Template, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, err + } + templateID = strings.TrimSpace(templateID) + if templateID == "" { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "template_id is required") + } + item, err := s.repository.GetActivityTemplate(ctx, templateID) + if err != nil { + return domain.Template{}, err + } + item.LifecycleStatus = lifecycleStatus(item.Status, item.StartMS, item.EndMS, s.now().UTC().UnixMilli()) + return item, nil +} + +func (s *Service) Create(ctx context.Context, template domain.Template, operatorAdminID int64) (domain.Template, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, err + } + if operatorAdminID <= 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "operator_admin_id is required") + } + template = normalizeTemplate(template) + // 新记录只能先落草稿。发布会额外执行完整校验、区间冲突检查和版本快照,不允许 create 绕过发布状态机。 + template.Status = domain.StatusDraft + template.TemplateID = "" + template.Revision = 0 + template.PublishedVersion = 0 + nowMS := s.now().UTC().UnixMilli() + if issues := validateTemplate(template, false, nowMS); len(issues) > 0 { + return domain.Template{}, issueError(issues[0]) + } + stored, err := s.repository.CreateActivityTemplate(ctx, template, operatorAdminID, nowMS) + if err != nil { + return domain.Template{}, err + } + stored.LifecycleStatus = lifecycleStatus(stored.Status, stored.StartMS, stored.EndMS, nowMS) + return stored, nil +} + +func (s *Service) Update(ctx context.Context, command domain.UpdateCommand) (domain.Template, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, err + } + command.Template = normalizeTemplate(command.Template) + command.Template.TemplateID = strings.TrimSpace(command.Template.TemplateID) + if command.Template.TemplateID == "" { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "template_id is required") + } + if command.OperatorAdminID <= 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "operator_admin_id is required") + } + if command.ExpectedRevision <= 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "expected_revision is required") + } + current, err := s.repository.GetActivityTemplate(ctx, command.Template.TemplateID) + if err != nil { + return domain.Template{}, err + } + if current.Revision != command.ExpectedRevision { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + // template_code 是 App deep link、运行版本和统计维度的长期业务身份;创建后改码会让已发布历史 + // 与当前编辑态分裂。需要新编码时必须 clone 成新模版,由新 ID 重新走发布流程。 + if command.Template.TemplateCode != current.TemplateCode { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template_code is immutable; clone the template to use a new code") + } + if current.Status != domain.StatusDraft && current.Status != domain.StatusDisabled { + // 已发布配置必须先停用再编辑;这样 published_version 始终对应运行侧实际使用的不可变快照。 + return domain.Template{}, xerr.New(xerr.Conflict, "published activity template must be disabled before editing") + } + command.Template.Status = current.Status + nowMS := s.now().UTC().UnixMilli() + if issues := validateTemplate(command.Template, false, nowMS); len(issues) > 0 { + return domain.Template{}, issueError(issues[0]) + } + stored, err := s.repository.UpdateActivityTemplate(ctx, command, nowMS) + if err != nil { + return domain.Template{}, err + } + stored.LifecycleStatus = lifecycleStatus(stored.Status, stored.StartMS, stored.EndMS, nowMS) + return stored, nil +} + +func (s *Service) SetStatus(ctx context.Context, command domain.StatusCommand) (domain.Template, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, err + } + command.TemplateID = strings.TrimSpace(command.TemplateID) + command.Status = normalizeStatus(command.Status) + if command.TemplateID == "" || command.OperatorAdminID <= 0 || command.ExpectedRevision <= 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "template_id, operator_admin_id and expected_revision are required") + } + if command.Status != domain.StatusPublished && command.Status != domain.StatusDisabled { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "status must be published or disabled") + } + current, err := s.repository.GetActivityTemplate(ctx, command.TemplateID) + if err != nil { + return domain.Template{}, err + } + if current.Revision != command.ExpectedRevision { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + if current.Status == command.Status { + current.LifecycleStatus = lifecycleStatus(current.Status, current.StartMS, current.EndMS, s.now().UTC().UnixMilli()) + return current, nil + } + nowMS := s.now().UTC().UnixMilli() + switch command.Status { + case domain.StatusPublished: + if current.Status != domain.StatusDraft && current.Status != domain.StatusDisabled { + return domain.Template{}, xerr.New(xerr.Conflict, "only draft or disabled activity template can be published") + } + if issues := validateTemplate(normalizeTemplate(current), true, nowMS); len(issues) > 0 { + return domain.Template{}, issueError(issues[0]) + } + referenceIssues, err := s.validateReferences(ctx, current) + if err != nil { + return domain.Template{}, err + } + if len(referenceIssues) > 0 { + return domain.Template{}, issueError(referenceIssues[0]) + } + if current.EndMS <= nowMS { + return domain.Template{}, xerr.New(xerr.Conflict, "ended activity template cannot be published") + } + rewardSnapshots, err := s.pinRewardSnapshots(ctx, current, current.PublishedVersion+1, command.OperatorAdminID) + if err != nil { + return domain.Template{}, err + } + command.RewardSnapshots = rewardSnapshots + case domain.StatusDisabled: + if current.Status != domain.StatusPublished { + return domain.Template{}, xerr.New(xerr.Conflict, "only published activity template can be disabled") + } + } + stored, err := s.repository.SetActivityTemplateStatus(ctx, command, nowMS) + if err != nil { + return domain.Template{}, err + } + stored.LifecycleStatus = lifecycleStatus(stored.Status, stored.StartMS, stored.EndMS, nowMS) + return stored, nil +} + +func (s *Service) pinRewardSnapshots(ctx context.Context, item domain.Template, nextVersion int64, operatorAdminID int64) (map[int64]domain.RewardSnapshot, error) { + groupIDs := make(map[int64]struct{}) + for _, task := range item.Tasks { + if task.RewardResourceGroupID > 0 { + groupIDs[task.RewardResourceGroupID] = struct{}{} + } + } + for _, reward := range item.RankRewards { + if reward.ResourceGroupID > 0 { + groupIDs[reward.ResourceGroupID] = struct{}{} + } + } + if len(groupIDs) == 0 { + return map[int64]domain.RewardSnapshot{}, nil + } + if s.rewardSnapshots == nil { + return nil, xerr.New(xerr.Unavailable, "wallet reward snapshot client is not configured") + } + ordered := make([]int64, 0, len(groupIDs)) + for groupID := range groupIDs { + ordered = append(ordered, groupID) + } + sort.Slice(ordered, func(left, right int) bool { return ordered[left] < ordered[right] }) + result := make(map[int64]domain.RewardSnapshot, len(ordered)) + for _, groupID := range ordered { + groupResp, err := s.catalog.GetResourceGroup(ctx, &walletv1.GetResourceGroupRequest{ + RequestId: "activity-template-pin-source:" + item.TemplateID + ":" + strconv.FormatInt(groupID, 10), + AppCode: appcode.FromContext(ctx), GroupId: groupID, + }) + if err != nil { + return nil, err + } + sourceUpdatedAtMS := groupResp.GetGroup().GetUpdatedAtMs() + sourceContentHash := strings.ToLower(strings.TrimSpace(groupResp.GetSourceContentHash())) + if groupResp.GetGroup() == nil || sourceUpdatedAtMS <= 0 || !validSHA256Hex(sourceContentHash) { + return nil, xerr.New(xerr.Conflict, "resource group source version is missing") + } + // Revision distinguishes a new edit after a failed cross-service publish attempt. Retrying the same + // revision reuses identical bytes; editing first produces a new pin even though published_version has + // not advanced yet. + pinIdentity := "activity-template:" + item.TemplateID + ":revision:" + strconv.FormatInt(item.Revision, 10) + + ":v" + strconv.FormatInt(nextVersion, 10) + ":group:" + strconv.FormatInt(groupID, 10) + + ":source:" + sourceContentHash + pinSum := sha256.Sum256([]byte(pinIdentity)) + pinKey := "activity-template-pin:" + hex.EncodeToString(pinSum[:]) + resp, err := s.rewardSnapshots.PinResourceGroupSnapshot(ctx, &walletv1.PinResourceGroupSnapshotRequest{ + RequestId: pinKey, AppCode: appcode.FromContext(ctx), GroupId: groupID, + PinKey: pinKey, OperatorUserId: operatorAdminID, ExpectedGroupUpdatedAtMs: sourceUpdatedAtMS, + ExpectedSourceContentHash: sourceContentHash, + RequiredRegionIds: append([]int64(nil), item.RegionIDs...), + RequiredAllRegions: item.AllRegions, + }) + if err != nil { + return nil, err + } + snapshot := rewardSnapshotFromWallet(resp.GetSnapshot()) + if snapshot.SnapshotID == "" || snapshot.SourceGroupID != groupID || len(snapshot.Items) == 0 || + resp.GetSnapshot().GetSourceGroupUpdatedAtMs() != sourceUpdatedAtMS || + resp.GetSnapshot().GetSourceContentHash() != sourceContentHash || snapshot.SnapshotHash != sourceContentHash { + return nil, xerr.New(xerr.Internal, "wallet returned an incomplete resource group snapshot") + } + result[groupID] = snapshot + } + return result, nil +} + +func validSHA256Hex(value string) bool { + if len(value) != sha256.Size*2 { + return false + } + decoded, err := hex.DecodeString(value) + return err == nil && len(decoded) == sha256.Size +} + +func rewardSnapshotFromWallet(item *walletv1.ResourceGroupSnapshot) domain.RewardSnapshot { + if item == nil || item.GetGroup() == nil { + return domain.RewardSnapshot{} + } + out := domain.RewardSnapshot{ + SourceGroupID: item.GetSourceGroupId(), SnapshotID: item.GetSnapshotId(), VersionNo: item.GetVersionNo(), + SnapshotHash: item.GetSnapshotHash(), Name: item.GetGroup().GetName(), Items: []domain.RewardItem{}, + } + for _, value := range item.GetGroup().GetItems() { + reward := domain.RewardItem{ + ItemType: value.GetItemType(), ResourceID: value.GetResourceId(), Quantity: value.GetQuantity(), + DurationMS: value.GetDurationMs(), WalletAssetType: value.GetWalletAssetType(), + WalletAssetAmount: value.GetWalletAssetAmount(), SortOrder: value.GetSortOrder(), + } + if value.GetResource() != nil { + reward.ResourceType = value.GetResource().GetResourceType() + reward.Name = value.GetResource().GetName() + reward.IconURL = value.GetResource().GetPreviewUrl() + if reward.IconURL == "" { + reward.IconURL = value.GetResource().GetAssetUrl() + } + } else if reward.WalletAssetType != "" { + reward.Name = strings.ToUpper(reward.WalletAssetType) + } + out.Items = append(out.Items, reward) + } + return out +} + +func (s *Service) Delete(ctx context.Context, command domain.StatusCommand) (domain.Template, bool, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, false, err + } + command.TemplateID = strings.TrimSpace(command.TemplateID) + command.Status = domain.StatusArchived + if command.TemplateID == "" || command.OperatorAdminID <= 0 || command.ExpectedRevision <= 0 { + return domain.Template{}, false, xerr.New(xerr.InvalidArgument, "template_id, operator_admin_id and expected_revision are required") + } + current, err := s.repository.GetActivityTemplate(ctx, command.TemplateID) + if err != nil { + return domain.Template{}, false, err + } + if current.Revision != command.ExpectedRevision { + return domain.Template{}, false, xerr.New(xerr.Conflict, "activity template revision changed") + } + if current.Status == domain.StatusArchived { + current.LifecycleStatus = domain.LifecycleArchived + return current, false, nil + } + nowMS := s.now().UTC().UnixMilli() + if current.Status == domain.StatusPublished && lifecycleStatus(current.Status, current.StartMS, current.EndMS, nowMS) != domain.LifecycleEnded { + // 正在生效或尚未开始的活动必须先停用,避免 DELETE 瞬间让客户端运行配置消失。 + return domain.Template{}, false, xerr.New(xerr.Conflict, "scheduled or ongoing activity template must be disabled before archive") + } + stored, err := s.repository.SetActivityTemplateStatus(ctx, command, nowMS) + if err != nil { + return domain.Template{}, false, err + } + stored.LifecycleStatus = domain.LifecycleArchived + return stored, true, nil +} + +func (s *Service) ListVersions(ctx context.Context, templateID string, page int32, pageSize int32) ([]domain.Version, int64, error) { + if err := s.requireRepository(); err != nil { + return nil, 0, err + } + templateID = strings.TrimSpace(templateID) + if templateID == "" { + return nil, 0, xerr.New(xerr.InvalidArgument, "template_id is required") + } + items, total, err := s.repository.ListActivityTemplateVersions(ctx, templateID, page, pageSize) + if err != nil { + return nil, 0, err + } + nowMS := s.now().UTC().UnixMilli() + for index := range items { + items[index].Snapshot.LifecycleStatus = RuntimeLifecycleStatus( + items[index].Snapshot, items[index].RuntimeFromMS, items[index].RuntimeToMS, nowMS, + ) + } + return items, total, nil +} + +func (s *Service) Clone(ctx context.Context, command domain.CloneCommand) (domain.Template, error) { + if err := s.requireRepository(); err != nil { + return domain.Template{}, err + } + command.SourceTemplateID = strings.TrimSpace(command.SourceTemplateID) + command.TemplateCode = strings.ToLower(strings.TrimSpace(command.TemplateCode)) + command.Name = strings.TrimSpace(command.Name) + if command.SourceTemplateID == "" || command.OperatorAdminID <= 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "source_template_id and operator_admin_id are required") + } + if command.SourceVersion < 0 { + return domain.Template{}, xerr.New(xerr.InvalidArgument, "source_version must not be negative") + } + var source domain.Template + if command.SourceVersion > 0 { + version, err := s.repository.GetActivityTemplateVersion(ctx, command.SourceTemplateID, command.SourceVersion) + if err != nil { + return domain.Template{}, err + } + source = version.Snapshot + } else { + var err error + source, err = s.repository.GetActivityTemplate(ctx, command.SourceTemplateID) + if err != nil { + return domain.Template{}, err + } + } + // 克隆只复用内容,不复制排期和运行身份;清空时间能防止旧活动日期被误发布。 + source.TemplateID = "" + source.TemplateCode = command.TemplateCode + source.Name = command.Name + source.Status = domain.StatusDraft + source.StartMS = 0 + source.EndMS = 0 + source.Revision = 0 + source.PublishedVersion = 0 + source.CreatedByAdminID = 0 + source.UpdatedByAdminID = 0 + source.PublishedByAdminID = 0 + source.CreatedAtMS = 0 + source.UpdatedAtMS = 0 + source.PublishedAtMS = 0 + source.ArchivedAtMS = 0 + return s.Create(ctx, source, command.OperatorAdminID) +} + +// Validate 返回完整字段问题集合,供编辑页一次性标出错误;写接口仍只返回首个错误以保持现有 gRPC 错误模型。 +func (s *Service) Validate(ctx context.Context, template domain.Template, forPublish bool) ([]domain.ValidationIssue, error) { + template = normalizeTemplate(template) + issues := validateTemplate(template, forPublish, s.now().UTC().UnixMilli()) + if !forPublish || len(issues) > 0 { + return issues, nil + } + referenceIssues, err := s.validateReferences(ctx, template) + if err != nil { + return nil, err + } + return append(issues, referenceIssues...), nil +} + +func (s *Service) requireRepository() error { + if s == nil || s.repository == nil { + return xerr.New(xerr.Unavailable, "activity template repository is not configured") + } + return nil +} + +func (s *Service) validateReferences(ctx context.Context, item domain.Template) ([]domain.ValidationIssue, error) { + if s == nil || s.catalog == nil { + return nil, xerr.New(xerr.Unavailable, "wallet catalog client is not configured") + } + appCode := appcode.FromContext(ctx) + requestPrefix := "activity-template-validate:" + item.TemplateID + ":" + strings.TrimSpace(item.TemplateCode) + issues := make([]domain.ValidationIssue, 0) + if !item.AllRegions { + if s.regions == nil { + return nil, xerr.New(xerr.Unavailable, "region catalog client is not configured") + } + activeRegionIDs, err := s.regions.ListActiveRegionIDs(ctx) + if err != nil { + return nil, err + } + activeRegions := make(map[int64]struct{}, len(activeRegionIDs)) + for _, regionID := range activeRegionIDs { + activeRegions[regionID] = struct{}{} + } + for _, regionID := range item.RegionIDs { + if _, active := activeRegions[regionID]; !active { + issues = append(issues, domain.ValidationIssue{Field: "region_ids", Code: "region_not_active", Message: "region " + strconv.FormatInt(regionID, 10) + " does not exist or is not active"}) + } + } + } + for _, snapshot := range item.Gifts { + resp, err := s.catalog.ListGiftConfigs(ctx, &walletv1.ListGiftConfigsRequest{ + RequestId: requestPrefix + ":gift:" + snapshot.GiftID, + AppCode: appCode, + Keyword: snapshot.GiftID, + Status: "active", + Page: 1, + PageSize: 500, + }) + if err != nil { + return nil, err + } + var current *walletv1.GiftConfig + for _, candidate := range resp.GetGifts() { + if candidate.GetGiftId() == snapshot.GiftID { + current = candidate + break + } + } + if current == nil || current.GetResource() == nil || current.GetResource().GetStatus() != "active" { + issues = append(issues, domain.ValidationIssue{Field: "gifts.gift_id", Code: "gift_not_active", Message: "gift " + snapshot.GiftID + " does not exist or is not active"}) + continue + } + // 礼物选择器优先展示 preview_url;未配置预览图时才回退资源原图。发布快照必须使用同一规则, + // 否则预览图与原图不同的正常礼物会被误判为旧快照。 + ownerIconURL := current.GetResource().GetPreviewUrl() + if ownerIconURL == "" { + ownerIconURL = current.GetResource().GetAssetUrl() + } + // 发布快照必须与 owner 当前价格版本一致;只验证不自动改写,避免管理员在未察觉价格变化时发布旧展示值。 + if snapshot.Name != current.GetName() || snapshot.IconURL != ownerIconURL || snapshot.CoinPrice != current.GetCoinPrice() || snapshot.PriceVersion != current.GetPriceVersion() { + issues = append(issues, domain.ValidationIssue{Field: "gifts", Code: "gift_snapshot_stale", Message: "gift " + snapshot.GiftID + " snapshot is stale; reselect the gift before publishing"}) + } + // 礼物有效期必须覆盖完整活动区间。只检查“当前可用”会让未来活动在开场前或进行中失去计分礼物。 + if (current.GetEffectiveFromMs() > 0 && current.GetEffectiveFromMs() > item.StartMS) || + (current.GetEffectiveToMs() > 0 && current.GetEffectiveToMs() < item.EndMS) { + issues = append(issues, domain.ValidationIssue{Field: "gifts", Code: "gift_period_mismatch", Message: "gift " + snapshot.GiftID + " effective period does not cover the activity period"}) + } + if !giftSupportsActivityScope(current.GetRegionIds(), item.AllRegions, item.RegionIDs) { + issues = append(issues, domain.ValidationIssue{Field: "gifts", Code: "gift_region_mismatch", Message: "gift " + snapshot.GiftID + " is not active for every activity region"}) + } + } + + groupIDs := map[int64]struct{}{} + for _, task := range item.Tasks { + if task.RewardResourceGroupID > 0 { + groupIDs[task.RewardResourceGroupID] = struct{}{} + } + } + for _, reward := range item.RankRewards { + if reward.ResourceGroupID > 0 { + groupIDs[reward.ResourceGroupID] = struct{}{} + } + } + for groupID := range groupIDs { + resp, err := s.catalog.GetResourceGroup(ctx, &walletv1.GetResourceGroupRequest{ + RequestId: requestPrefix + ":resource-group:" + strconv.FormatInt(groupID, 10), + AppCode: appCode, + GroupId: groupID, + }) + if err != nil { + if xerr.IsCode(err, xerr.NotFound) { + issues = append(issues, domain.ValidationIssue{Field: "resource_group_id", Code: "resource_group_not_found", Message: "resource group does not exist"}) + continue + } + return nil, err + } + group := resp.GetGroup() + if group == nil || group.GetStatus() != "active" || len(group.GetItems()) == 0 || !validSHA256Hex(strings.ToLower(strings.TrimSpace(resp.GetSourceContentHash()))) { + issues = append(issues, domain.ValidationIssue{Field: "resource_group_id", Code: "resource_group_not_active", Message: "resource group must be active and contain at least one item"}) + continue + } + for _, groupItem := range group.GetItems() { + if groupItem.GetItemType() == "wallet_asset" { + if strings.ToUpper(groupItem.GetWalletAssetType()) != "COIN" || groupItem.GetWalletAssetAmount() <= 0 || groupItem.GetResourceId() != 0 || groupItem.GetQuantity() != 1 || groupItem.GetDurationMs() != 0 { + issues = append(issues, domain.ValidationIssue{Field: "resource_group_id", Code: "resource_group_item_invalid", Message: "resource group contains an invalid wallet asset item"}) + } + continue + } + resource := groupItem.GetResource() + if resource == nil || resource.GetStatus() != "active" || !resource.GetGrantable() || resource.GetResourceType() == "coin" || resource.GetResourceType() == "vip_trial_card" || + groupItem.GetResourceId() <= 0 || groupItem.GetQuantity() <= 0 || groupItem.GetDurationMs() < 0 { + issues = append(issues, domain.ValidationIssue{Field: "resource_group_id", Code: "resource_group_item_invalid", Message: "resource group contains an inactive or unsupported resource"}) + } + } + } + return deduplicateIssues(issues), nil +} + +func giftSupportsActivityScope(giftRegionIDs []int64, allRegions bool, activityRegionIDs []int64) bool { + available := make(map[int64]struct{}, len(giftRegionIDs)) + for _, regionID := range giftRegionIDs { + available[regionID] = struct{}{} + } + if _, global := available[0]; global { + return true + } + if allRegions { + return false + } + for _, regionID := range activityRegionIDs { + if _, ok := available[regionID]; !ok { + return false + } + } + return true +} + +func normalizeTemplate(item domain.Template) domain.Template { + item.TemplateID = strings.TrimSpace(item.TemplateID) + item.TemplateCode = strings.ToLower(strings.TrimSpace(item.TemplateCode)) + item.Name = strings.TrimSpace(item.Name) + item.ActivityType = strings.ToLower(strings.TrimSpace(item.ActivityType)) + if item.ActivityType == "" { + item.ActivityType = domain.ActivityTypeGiftChallenge + } + item.Status = normalizeStatus(item.Status) + if item.Status == "" { + item.Status = domain.StatusDraft + } + if item.DailyLeaderboardSize == 0 { + item.DailyLeaderboardSize = defaultLeaderboardSize + } + if item.TotalLeaderboardSize == 0 { + item.TotalLeaderboardSize = defaultLeaderboardSize + } + item.DisplayConfigJSON = strings.TrimSpace(item.DisplayConfigJSON) + if item.DisplayConfigJSON == "" { + item.DisplayConfigJSON = "{}" + } + + regions := append([]int64(nil), item.RegionIDs...) + sort.Slice(regions, func(i, j int) bool { return regions[i] < regions[j] }) + item.RegionIDs = regions + for index := range item.Locales { + item.Locales[index].Locale = normalizeLocale(item.Locales[index].Locale) + item.Locales[index].Title = strings.TrimSpace(item.Locales[index].Title) + item.Locales[index].Rules = strings.TrimSpace(item.Locales[index].Rules) + } + sort.SliceStable(item.Locales, func(i, j int) bool { return item.Locales[i].Locale < item.Locales[j].Locale }) + for index := range item.Gifts { + item.Gifts[index].GiftID = strings.TrimSpace(item.Gifts[index].GiftID) + item.Gifts[index].Name = strings.TrimSpace(item.Gifts[index].Name) + item.Gifts[index].IconURL = strings.TrimSpace(item.Gifts[index].IconURL) + item.Gifts[index].PriceVersion = strings.TrimSpace(item.Gifts[index].PriceVersion) + } + sort.SliceStable(item.Gifts, func(i, j int) bool { + if item.Gifts[i].SortOrder == item.Gifts[j].SortOrder { + return item.Gifts[i].GiftID < item.Gifts[j].GiftID + } + return item.Gifts[i].SortOrder < item.Gifts[j].SortOrder + }) + for index := range item.Tasks { + item.Tasks[index].TaskKey = strings.ToLower(strings.TrimSpace(item.Tasks[index].TaskKey)) + item.Tasks[index].TaskType = strings.ToLower(strings.TrimSpace(item.Tasks[index].TaskType)) + } + sort.SliceStable(item.Tasks, func(i, j int) bool { + if item.Tasks[i].SortOrder == item.Tasks[j].SortOrder { + return item.Tasks[i].TaskKey < item.Tasks[j].TaskKey + } + return item.Tasks[i].SortOrder < item.Tasks[j].SortOrder + }) + for index := range item.RankRewards { + item.RankRewards[index].BoardType = strings.ToLower(strings.TrimSpace(item.RankRewards[index].BoardType)) + } + sort.SliceStable(item.RankRewards, func(i, j int) bool { + if item.RankRewards[i].BoardType != item.RankRewards[j].BoardType { + return item.RankRewards[i].BoardType < item.RankRewards[j].BoardType + } + if item.RankRewards[i].RankFrom != item.RankRewards[j].RankFrom { + return item.RankRewards[i].RankFrom < item.RankRewards[j].RankFrom + } + return item.RankRewards[i].RankTo < item.RankRewards[j].RankTo + }) + for index := range item.Assets { + item.Assets[index].AssetKey = strings.ToLower(strings.TrimSpace(item.Assets[index].AssetKey)) + item.Assets[index].Locale = normalizeLocale(item.Assets[index].Locale) + if item.Assets[index].Locale == "" { + item.Assets[index].Locale = domain.SharedAssetLocale + } + item.Assets[index].URL = strings.TrimSpace(item.Assets[index].URL) + item.Assets[index].MediaType = strings.ToLower(strings.TrimSpace(item.Assets[index].MediaType)) + } + sort.SliceStable(item.Assets, func(i, j int) bool { + if item.Assets[i].AssetKey != item.Assets[j].AssetKey { + return item.Assets[i].AssetKey < item.Assets[j].AssetKey + } + if item.Assets[i].Locale != item.Assets[j].Locale { + return item.Assets[i].Locale < item.Assets[j].Locale + } + return item.Assets[i].SortOrder < item.Assets[j].SortOrder + }) + return item +} + +func validateTemplate(item domain.Template, forPublish bool, nowMS int64) []domain.ValidationIssue { + issues := make([]domain.ValidationIssue, 0) + add := func(field string, code string, message string) { + issues = append(issues, domain.ValidationIssue{Field: field, Code: code, Message: message}) + } + if !templateCodePattern.MatchString(item.TemplateCode) { + add("template_code", "invalid_format", "template_code must be 3-64 lowercase letters, numbers, underscore or hyphen") + } + if utf8.RuneCountInString(item.Name) == 0 || utf8.RuneCountInString(item.Name) > 128 { + add("name", "invalid_length", "name is required and must not exceed 128 characters") + } + if item.ActivityType != domain.ActivityTypeGiftChallenge { + add("activity_type", "unsupported", "activity_type is not supported") + } + if item.Status != domain.StatusDraft && item.Status != domain.StatusDisabled && item.Status != domain.StatusPublished { + add("status", "invalid", "status is invalid") + } + if item.StartMS != 0 || item.EndMS != 0 || forPublish { + if item.StartMS <= 0 || item.EndMS <= item.StartMS { + add("time_range", "invalid_range", "activity period must use [start_ms,end_ms)") + } else if item.EndMS-item.StartMS > maxActivityDurationMS { + add("time_range", "duration_too_long", "activity period must not exceed 366 days") + } + } + if forPublish && item.EndMS <= nowMS { + add("end_ms", "already_ended", "activity end_ms must be later than current UTC time") + } + + seenRegions := map[int64]struct{}{} + for index, regionID := range item.RegionIDs { + if regionID <= 0 { + add("region_ids", "invalid_region", "region_ids must contain positive IDs") + } + if _, exists := seenRegions[regionID]; exists { + add("region_ids", "duplicate_region", "region_ids must not contain duplicates") + } + seenRegions[regionID] = struct{}{} + _ = index + } + if item.AllRegions && len(item.RegionIDs) > 0 { + add("region_ids", "scope_conflict", "all_regions cannot be combined with region_ids") + } + if forPublish && !item.AllRegions && len(item.RegionIDs) == 0 { + add("region_ids", "required", "at least one region is required when all_regions is false") + } + if len(item.RegionIDs) > 100 { + add("region_ids", "too_many", "region_ids must not exceed 100") + } + + seenLocales := map[string]struct{}{} + hasEnglish := false + for _, locale := range item.Locales { + if len(locale.Locale) > 24 || !localePattern.MatchString(locale.Locale) { + add("locales", "invalid_locale", "locale must be a lowercase BCP-47 language tag") + } + if _, exists := seenLocales[locale.Locale]; exists { + add("locales", "duplicate_locale", "locale must be unique") + } + seenLocales[locale.Locale] = struct{}{} + if locale.Locale == "en" { + hasEnglish = true + } + if utf8.RuneCountInString(locale.Title) > 160 { + add("locales.title", "too_long", "localized title must not exceed 160 characters") + } + if len(locale.Rules) > 32*1024 { + add("locales.rules", "too_long", "localized rules must not exceed 32KB") + } + if forPublish && (locale.Title == "" || locale.Rules == "") { + add("locales", "content_required", "localized title and rules are required for publish") + } + } + if forPublish && !hasEnglish { + add("locales", "english_required", "English title and rules are required for publish") + } + if len(item.Locales) > 20 { + add("locales", "too_many", "locales must not exceed 20") + } + + seenGifts := map[string]struct{}{} + for _, gift := range item.Gifts { + if gift.GiftID == "" { + add("gifts.gift_id", "required", "gift_id is required") + } else if len(gift.GiftID) > 96 { + add("gifts.gift_id", "too_long", "gift_id must not exceed 96 bytes") + } + if _, exists := seenGifts[gift.GiftID]; exists { + add("gifts", "duplicate_gift", "gift_id must be unique") + } + seenGifts[gift.GiftID] = struct{}{} + if gift.CoinPrice < 0 { + add("gifts.coin_price", "invalid", "coin_price must not be negative") + } + if utf8.RuneCountInString(gift.Name) > 128 || len(gift.IconURL) > 512 || len(gift.PriceVersion) > 64 { + add("gifts", "snapshot_too_long", "gift snapshot exceeds storage limits") + } + if gift.SortOrder < 0 { + add("gifts.sort_order", "invalid", "sort_order must not be negative") + } + if forPublish { + if gift.Name == "" || gift.IconURL == "" || gift.CoinPrice <= 0 || gift.PriceVersion == "" { + add("gifts", "snapshot_required", "published gifts require name, icon_url, positive coin_price and price_version snapshots") + } else if !validHTTPURL(gift.IconURL) { + add("gifts.icon_url", "invalid_url", "gift icon_url must be an absolute http or https URL") + } + } + } + if len(item.Gifts) > 20 { + add("gifts", "too_many", "gifts must not exceed 20") + } else if forPublish && len(item.Gifts) == 0 { + add("gifts", "required", "published activity requires at least one gift") + } + + seenTasks := map[string]struct{}{} + dailyVisitTaskCount := 0 + for _, task := range item.Tasks { + if !taskKeyPattern.MatchString(task.TaskKey) { + add("tasks.task_key", "invalid_format", "task_key format is invalid") + } + if _, exists := seenTasks[task.TaskKey]; exists { + add("tasks", "duplicate_task", "task_key must be unique") + } + seenTasks[task.TaskKey] = struct{}{} + if !validTaskType(task.TaskType) { + add("tasks.task_type", "unsupported", "task_type is not supported") + } + if task.TargetValue <= 0 { + add("tasks.target_value", "invalid", "target_value must be positive") + } + if task.TaskType == domain.TaskTypeDailyVisit && task.TargetValue != 1 { + add("tasks.target_value", "daily_visit_target", "daily_visit target_value must equal 1") + } + if task.TaskType == domain.TaskTypeDailyVisit { + dailyVisitTaskCount++ + } + if task.SortOrder < 0 { + add("tasks.sort_order", "invalid", "sort_order must not be negative") + } + if forPublish && task.RewardResourceGroupID <= 0 { + add("tasks.reward_resource_group_id", "required", "task reward resource group is required for publish") + } + } + // daily_visit 的事实粒度固定为“用户 + 模版版本 + UTC 自然日”一次。允许配置多档会让同一次访问 + // 同时生成多份入场奖励,既违背原型的单档语义,也容易被运营误配,因此 owner 层必须强制唯一。 + if dailyVisitTaskCount > 1 { + add("tasks", "duplicate_daily_visit", "daily_visit task must not appear more than once") + } + if len(item.Tasks) > 30 { + add("tasks", "too_many", "tasks must not exceed 30") + } else if forPublish && len(item.Tasks) == 0 { + add("tasks", "required", "published activity requires at least one task") + } + + if item.DailyLeaderboardSize < 3 || item.DailyLeaderboardSize > 1000 { + add("daily_leaderboard_size", "out_of_range", "daily_leaderboard_size must be between 3 and 1000") + } + if item.TotalLeaderboardSize < 3 || item.TotalLeaderboardSize > 1000 { + add("total_leaderboard_size", "out_of_range", "total_leaderboard_size must be between 3 and 1000") + } + for _, boardType := range []string{domain.BoardTypeDaily, domain.BoardTypeTotal} { + boardRewards := make([]domain.RankReward, 0) + for _, reward := range item.RankRewards { + if reward.BoardType == boardType { + boardRewards = append(boardRewards, reward) + } + } + sort.Slice(boardRewards, func(i, j int) bool { return boardRewards[i].RankFrom < boardRewards[j].RankFrom }) + if forPublish && len(boardRewards) == 0 { + add("rank_rewards", "board_required", boardType+" leaderboard reward is required for publish") + } + previousTo := int32(0) + for _, reward := range boardRewards { + limit := item.DailyLeaderboardSize + if boardType == domain.BoardTypeTotal { + limit = item.TotalLeaderboardSize + } + if reward.RankFrom <= 0 || reward.RankTo < reward.RankFrom || reward.RankTo > limit { + add("rank_rewards", "invalid_range", "rank reward range is outside leaderboard size") + } + if previousTo > 0 && reward.RankFrom <= previousTo { + add("rank_rewards", "overlap", "rank reward ranges must not overlap") + } + if forPublish && reward.ResourceGroupID <= 0 { + add("rank_rewards.resource_group_id", "required", "rank reward resource group is required for publish") + } + previousTo = reward.RankTo + } + } + for _, reward := range item.RankRewards { + if reward.BoardType != domain.BoardTypeDaily && reward.BoardType != domain.BoardTypeTotal { + add("rank_rewards.board_type", "unsupported", "board_type must be daily or total") + } + if reward.SortOrder < 0 { + add("rank_rewards.sort_order", "invalid", "sort_order must not be negative") + } + } + if len(item.RankRewards) > maxRankRewardRanges { + add("rank_rewards", "too_many", "rank reward ranges must not exceed 100") + } + + seenAssets := map[string]struct{}{} + for _, asset := range item.Assets { + if !assetKeyPattern.MatchString(asset.AssetKey) { + add("assets.asset_key", "invalid_format", "asset_key format is invalid") + } + if asset.Locale != domain.SharedAssetLocale && (len(asset.Locale) > 24 || !localePattern.MatchString(asset.Locale)) { + add("assets.locale", "invalid_locale", "asset locale must be * or a lowercase BCP-47 tag") + } + key := asset.AssetKey + "\x00" + asset.Locale + if _, exists := seenAssets[key]; exists { + add("assets", "duplicate_asset", "asset_key and locale combination must be unique") + } + seenAssets[key] = struct{}{} + if asset.URL == "" || len(asset.URL) > 1024 || !validHTTPURL(asset.URL) { + add("assets.url", "invalid_url", "asset URL must be an absolute http or https URL") + } + if !validMediaType(asset.MediaType) { + add("assets.media_type", "unsupported", "media_type must be image, webp, svga or pag") + } + if asset.SortOrder < 0 { + add("assets.sort_order", "invalid", "sort_order must not be negative") + } + } + if len(item.Assets) > 100 { + add("assets", "too_many", "assets must not exceed 100") + } + if len(item.DisplayConfigJSON) > maxDisplayConfigBytes { + add("display_config_json", "too_large", "display_config_json must not exceed 64KB") + } else { + var display map[string]any + if err := json.Unmarshal([]byte(item.DisplayConfigJSON), &display); err != nil || display == nil { + add("display_config_json", "invalid_json", "display_config_json must be a JSON object") + } + } + return deduplicateIssues(issues) +} + +func lifecycleStatus(status string, startMS int64, endMS int64, nowMS int64) string { + switch status { + case domain.StatusDraft: + return domain.LifecycleDraft + case domain.StatusDisabled: + return domain.LifecycleDisabled + case domain.StatusArchived: + return domain.LifecycleArchived + case domain.StatusPublished: + // 边界与全局规则一致:[start_ms,end_ms),开始毫秒立即 ongoing,结束毫秒立即 ended。 + if nowMS < startMS { + return domain.LifecycleScheduled + } + if nowMS >= endMS { + return domain.LifecycleEnded + } + return domain.LifecycleOngoing + default: + return status + } +} + +// RuntimeLifecycleStatus derives presentation state from an immutable version's actual runtime window. +// A mid-flight disable remains disabled even after a newer version is published; planned start/end alone +// would otherwise make both v1 and v2 appear ongoing for the same wall-clock instant. +func RuntimeLifecycleStatus(item domain.Template, runtimeFromMS int64, runtimeToMS int64, nowMS int64) string { + switch item.Status { + case domain.StatusDraft: + return domain.LifecycleDraft + case domain.StatusArchived: + return domain.LifecycleArchived + } + if runtimeFromMS <= 0 { + // Compatibility for versions created before runtime windows were materialized. New publishes always + // join a positive runtime_from_ms, but old data must still produce a useful planned lifecycle. + runtimeFromMS = item.StartMS + } + if runtimeToMS > 0 && runtimeToMS < item.EndMS && nowMS >= runtimeToMS { + return domain.LifecycleDisabled + } + if nowMS < runtimeFromMS { + return domain.LifecycleScheduled + } + if nowMS >= item.EndMS || (runtimeToMS > 0 && nowMS >= runtimeToMS) { + return domain.LifecycleEnded + } + return domain.LifecycleOngoing +} + +func normalizeStatus(value string) string { + return strings.ToLower(strings.TrimSpace(value)) +} + +func normalizeLocale(value string) string { + return strings.ToLower(strings.ReplaceAll(strings.TrimSpace(value), "_", "-")) +} + +func validTaskType(value string) bool { + switch value { + case domain.TaskTypeDailyVisit, domain.TaskTypeGiftCount, domain.TaskTypeGiftCoinAmount: + return true + default: + return false + } +} + +func validMediaType(value string) bool { + switch value { + case "image", "webp", "svga", "pag": + return true + default: + return false + } +} + +func validListStatus(value string) bool { + switch value { + case "", domain.StatusDraft, domain.StatusPublished, domain.StatusDisabled, domain.StatusArchived, + domain.LifecycleScheduled, domain.LifecycleOngoing, domain.LifecycleEnded, "active": + return true + default: + return false + } +} + +func validHTTPURL(value string) bool { + parsed, err := url.ParseRequestURI(value) + return err == nil && parsed.Host != "" && (parsed.Scheme == "http" || parsed.Scheme == "https") +} + +func issueError(issue domain.ValidationIssue) error { + return xerr.New(xerr.InvalidArgument, issue.Field+": "+issue.Message) +} + +func deduplicateIssues(items []domain.ValidationIssue) []domain.ValidationIssue { + seen := map[string]struct{}{} + out := make([]domain.ValidationIssue, 0, len(items)) + for _, item := range items { + key := item.Field + "\x00" + item.Code + "\x00" + item.Message + if _, exists := seen[key]; exists { + continue + } + seen[key] = struct{}{} + out = append(out, item) + } + return out +} diff --git a/services/activity-service/internal/service/activitytemplate/service_test.go b/services/activity-service/internal/service/activitytemplate/service_test.go new file mode 100644 index 00000000..91897473 --- /dev/null +++ b/services/activity-service/internal/service/activitytemplate/service_test.go @@ -0,0 +1,524 @@ +package activitytemplate + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "testing" + "time" + + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" + walletv1 "hyapp.local/api/proto/wallet/v1" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +type fakeRepository struct { + current domain.Template + versions map[int64]domain.Version + listedVersions []domain.Version + updateCalls int + statusCalls int + createCalls int +} + +func (f *fakeRepository) ListActivityTemplates(context.Context, domain.ListQuery) ([]domain.Summary, int64, error) { + return nil, 0, nil +} + +func (f *fakeRepository) GetActivityTemplate(_ context.Context, templateID string) (domain.Template, error) { + if f.current.TemplateID != templateID { + return domain.Template{}, xerr.New(xerr.NotFound, "activity template not found") + } + return f.current, nil +} + +func (f *fakeRepository) CreateActivityTemplate(_ context.Context, item domain.Template, operatorAdminID int64, nowMS int64) (domain.Template, error) { + f.createCalls++ + item.TemplateID = "acttpl_created" + item.Status = domain.StatusDraft + item.Revision = 1 + item.CreatedByAdminID = operatorAdminID + item.UpdatedByAdminID = operatorAdminID + item.CreatedAtMS = nowMS + item.UpdatedAtMS = nowMS + f.current = item + return item, nil +} + +func (f *fakeRepository) UpdateActivityTemplate(_ context.Context, command domain.UpdateCommand, nowMS int64) (domain.Template, error) { + f.updateCalls++ + item := command.Template + item.Revision = command.ExpectedRevision + 1 + item.UpdatedByAdminID = command.OperatorAdminID + item.UpdatedAtMS = nowMS + f.current = item + return item, nil +} + +func (f *fakeRepository) SetActivityTemplateStatus(_ context.Context, command domain.StatusCommand, nowMS int64) (domain.Template, error) { + f.statusCalls++ + item := f.current + item.Status = command.Status + item.Revision++ + item.UpdatedByAdminID = command.OperatorAdminID + item.UpdatedAtMS = nowMS + if command.Status == domain.StatusPublished { + item.PublishedVersion++ + item.PublishedByAdminID = command.OperatorAdminID + item.PublishedAtMS = nowMS + } + f.current = item + return item, nil +} + +func (f *fakeRepository) ListActivityTemplateVersions(context.Context, string, int32, int32) ([]domain.Version, int64, error) { + return append([]domain.Version(nil), f.listedVersions...), int64(len(f.listedVersions)), nil +} + +func (f *fakeRepository) GetActivityTemplateVersion(_ context.Context, templateID string, versionNo int64) (domain.Version, error) { + item, ok := f.versions[versionNo] + if !ok || item.TemplateID != templateID { + return domain.Version{}, xerr.New(xerr.NotFound, "activity template version not found") + } + return item, nil +} + +type fakeCatalog struct { + gift *walletv1.GiftConfig + groups map[int64]*walletv1.ResourceGroup + lastGift *walletv1.ListGiftConfigsRequest + pins []*walletv1.PinResourceGroupSnapshotRequest +} + +type fakeRegionSource struct { + regionIDs []int64 + err error +} + +func (f fakeRegionSource) ListActiveRegionIDs(context.Context) ([]int64, error) { + return append([]int64(nil), f.regionIDs...), f.err +} + +func (f *fakeCatalog) ListGiftConfigs(_ context.Context, req *walletv1.ListGiftConfigsRequest, _ ...grpc.CallOption) (*walletv1.ListGiftConfigsResponse, error) { + f.lastGift = req + if f.gift == nil || f.gift.GetGiftId() != req.GetKeyword() { + return &walletv1.ListGiftConfigsResponse{}, nil + } + return &walletv1.ListGiftConfigsResponse{Gifts: []*walletv1.GiftConfig{f.gift}, Total: 1}, nil +} + +func (f *fakeCatalog) GetResourceGroup(_ context.Context, req *walletv1.GetResourceGroupRequest, _ ...grpc.CallOption) (*walletv1.GetResourceGroupResponse, error) { + group := f.groups[req.GetGroupId()] + if group == nil { + return nil, xerr.New(xerr.NotFound, "resource group not found") + } + return &walletv1.GetResourceGroupResponse{Group: group, SourceContentHash: fakeResourceGroupHash(group)}, nil +} + +func (f *fakeCatalog) PinResourceGroupSnapshot(_ context.Context, req *walletv1.PinResourceGroupSnapshotRequest, _ ...grpc.CallOption) (*walletv1.PinResourceGroupSnapshotResponse, error) { + f.pins = append(f.pins, req) + group := f.groups[req.GetGroupId()] + if group == nil { + return nil, xerr.New(xerr.NotFound, "resource group not found") + } + hash := fakeResourceGroupHash(group) + if req.GetExpectedSourceContentHash() != hash || req.GetExpectedGroupUpdatedAtMs() != group.GetUpdatedAtMs() { + return nil, xerr.New(xerr.Conflict, "resource group content changed") + } + return &walletv1.PinResourceGroupSnapshotResponse{Snapshot: &walletv1.ResourceGroupSnapshot{ + AppCode: req.GetAppCode(), SnapshotId: "rgs_" + hash[:24], PinKey: req.GetPinKey(), SourceGroupId: group.GetGroupId(), + VersionNo: 1, SnapshotHash: hash, Group: group, CreatedByUserId: req.GetOperatorUserId(), CreatedAtMs: 1, + SourceGroupUpdatedAtMs: group.GetUpdatedAtMs(), SourceContentHash: hash, + }}, nil +} + +func fakeResourceGroupHash(group *walletv1.ResourceGroup) string { + body, _ := proto.MarshalOptions{Deterministic: true}.Marshal(group) + sum := sha256.Sum256(body) + return hex.EncodeToString(sum[:]) +} + +func TestLifecycleStatusUsesUTCLeftClosedRightOpenBoundary(t *testing.T) { + const startMS = int64(10_000) + const endMS = int64(20_000) + tests := []struct { + name string + now int64 + want string + }{ + {name: "before start", now: startMS - 1, want: domain.LifecycleScheduled}, + {name: "at start", now: startMS, want: domain.LifecycleOngoing}, + {name: "before end", now: endMS - 1, want: domain.LifecycleOngoing}, + {name: "at end", now: endMS, want: domain.LifecycleEnded}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := lifecycleStatus(domain.StatusPublished, startMS, endMS, tt.now); got != tt.want { + t.Fatalf("lifecycleStatus() = %q, want %q", got, tt.want) + } + }) + } +} + +func TestListVersionsUsesActualRuntimeWindowAfterDisableAndRepublish(t *testing.T) { + const ( + startMS = int64(100) + endMS = int64(1_000) + nowMS = int64(700) + ) + snapshot := domain.Template{ + TemplateID: "acttpl_republished", TemplateCode: "summer", Status: domain.StatusPublished, + StartMS: startMS, EndMS: endMS, + } + repository := &fakeRepository{listedVersions: []domain.Version{ + {TemplateID: snapshot.TemplateID, VersionNo: 2, Snapshot: snapshot, RuntimeFromMS: 600}, + {TemplateID: snapshot.TemplateID, VersionNo: 1, Snapshot: snapshot, RuntimeFromMS: startMS, RuntimeToMS: 500}, + }} + svc := New(repository, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + versions, total, err := svc.ListVersions(context.Background(), snapshot.TemplateID, 1, 20) + if err != nil { + t.Fatalf("ListVersions() error = %v", err) + } + if total != 2 || len(versions) != 2 { + t.Fatalf("ListVersions() total/items = %d/%d", total, len(versions)) + } + if versions[0].VersionNo != 2 || versions[0].Snapshot.LifecycleStatus != domain.LifecycleOngoing || versions[0].RuntimeFromMS != 600 || versions[0].RuntimeToMS != 0 { + t.Fatalf("republished v2 lifecycle/window = %+v", versions[0]) + } + if versions[1].VersionNo != 1 || versions[1].Snapshot.LifecycleStatus != domain.LifecycleDisabled || versions[1].RuntimeFromMS != startMS || versions[1].RuntimeToMS != 500 { + t.Fatalf("disabled v1 lifecycle/window = %+v", versions[1]) + } +} + +func TestRuntimeLifecycleStatusUsesActualWindowBoundaries(t *testing.T) { + item := domain.Template{Status: domain.StatusPublished, StartMS: 100, EndMS: 1_000} + tests := []struct { + name string + runtimeFromMS int64 + runtimeToMS int64 + nowMS int64 + want string + }{ + {name: "scheduled", runtimeFromMS: 200, nowMS: 199, want: domain.LifecycleScheduled}, + {name: "ongoing at runtime start", runtimeFromMS: 200, nowMS: 200, want: domain.LifecycleOngoing}, + {name: "disabled at exclusive runtime end", runtimeFromMS: 200, runtimeToMS: 500, nowMS: 500, want: domain.LifecycleDisabled}, + {name: "disabled remains historical state", runtimeFromMS: 200, runtimeToMS: 500, nowMS: 1_500, want: domain.LifecycleDisabled}, + {name: "naturally ended", runtimeFromMS: 200, nowMS: 1_000, want: domain.LifecycleEnded}, + {name: "disable after planned end stays ended", runtimeFromMS: 200, runtimeToMS: 1_200, nowMS: 1_200, want: domain.LifecycleEnded}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := RuntimeLifecycleStatus(item, tt.runtimeFromMS, tt.runtimeToMS, tt.nowMS); got != tt.want { + t.Fatalf("RuntimeLifecycleStatus() = %q, want %q", got, tt.want) + } + }) + } +} + +func TestListRejectsNegativeTimeFilter(t *testing.T) { + svc := New(&fakeRepository{}, nil, nil) + _, _, err := svc.List(context.Background(), domain.ListQuery{StartMS: -1}) + if !xerr.IsCode(err, xerr.InvalidArgument) { + t.Fatalf("List() error = %v, want invalid argument", err) + } +} + +func TestValidatePublishRejectsOverlappingRankRangesAndNonObjectDisplayConfig(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + item.RankRewards = append(item.RankRewards, domain.RankReward{ + BoardType: domain.BoardTypeDaily, RankFrom: 3, RankTo: 5, ResourceGroupID: 102, SortOrder: 2, + }) + item.DisplayConfigJSON = "null" + svc := New(&fakeRepository{}, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + issues, err := svc.Validate(context.Background(), item, true) + if err != nil { + t.Fatalf("Validate() error = %v", err) + } + if !hasIssue(issues, "rank_rewards", "overlap") { + t.Fatalf("expected rank overlap issue, got %+v", issues) + } + if !hasIssue(issues, "display_config_json", "invalid_json") { + t.Fatalf("expected JSON object issue, got %+v", issues) + } +} + +func TestValidateRejectsMultipleDailyVisitTasks(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + item.Tasks = append(item.Tasks, domain.Task{ + TaskKey: "daily_visit_bonus", TaskType: domain.TaskTypeDailyVisit, + TargetValue: 1, RewardResourceGroupID: 101, SortOrder: 2, + }) + svc := New(&fakeRepository{}, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + issues, err := svc.Validate(context.Background(), item, false) + if err != nil { + t.Fatalf("Validate() error = %v", err) + } + if !hasIssue(issues, "tasks", "duplicate_daily_visit") { + t.Fatalf("expected duplicate daily_visit issue, got %+v", issues) + } +} + +func TestSetStatusPublishesOnlyAfterOwnerReferencesValidate(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + repository := &fakeRepository{current: item} + catalog := publishableCatalog(item) + svc := New(repository, catalog, fakeRegionSource{regionIDs: []int64{1}}) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + ctx := appcode.WithContext(context.Background(), "hyapp") + + got, err := svc.SetStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, + ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }) + if err != nil { + t.Fatalf("SetStatus() error = %v", err) + } + if got.Status != domain.StatusPublished || got.PublishedVersion != 1 || got.Revision != item.Revision+1 { + t.Fatalf("published template metadata = %+v", got) + } + if repository.statusCalls != 1 { + t.Fatalf("status repository calls = %d, want 1", repository.statusCalls) + } + if catalog.lastGift == nil || catalog.lastGift.GetStatus() != "active" || catalog.lastGift.GetActiveOnly() { + t.Fatalf("gift lookup must load active owner config without current-time-only filtering: %+v", catalog.lastGift) + } + if len(catalog.pins) != 3 { + t.Fatalf("publish pin calls = %d, want 3", len(catalog.pins)) + } + for _, pin := range catalog.pins { + if pin.GetRequiredAllRegions() || len(pin.GetRequiredRegionIds()) != 1 || pin.GetRequiredRegionIds()[0] != 1 { + t.Fatalf("targeted activity pin omitted required region coverage: %+v", pin) + } + } +} + +func TestSetStatusAllRegionsRequiresGlobalRewardGiftCoverageAtWalletPin(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + item.AllRegions = true + item.RegionIDs = nil + repository := &fakeRepository{current: item} + catalog := publishableCatalog(item) + svc := New(repository, catalog, fakeRegionSource{regionIDs: []int64{1, 2}}) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + if _, err := svc.SetStatus(appcode.WithContext(context.Background(), "hyapp"), domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, + ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }); err != nil { + t.Fatalf("publish all-regions template: %v", err) + } + if len(catalog.pins) != 3 { + t.Fatalf("all-regions publish pin calls = %d, want 3", len(catalog.pins)) + } + for _, pin := range catalog.pins { + if !pin.GetRequiredAllRegions() || len(pin.GetRequiredRegionIds()) != 0 { + t.Fatalf("all-regions activity must require global reward gift coverage: %+v", pin) + } + } +} + +func TestValidatePublishRejectsGiftThatExpiresDuringActivity(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + catalog := publishableCatalog(item) + catalog.gift.EffectiveToMs = item.EndMS - 1 + svc := New(&fakeRepository{}, catalog, fakeRegionSource{regionIDs: []int64{1}}) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + issues, err := svc.Validate(context.Background(), item, true) + if err != nil { + t.Fatalf("Validate() error = %v", err) + } + if !hasIssue(issues, "gifts", "gift_period_mismatch") { + t.Fatalf("expected gift period issue, got %+v", issues) + } +} + +func TestValidatePublishRejectsInactiveTargetRegion(t *testing.T) { + nowMS := int64(1_800_000_000_000) + item := publishableTemplate(nowMS) + svc := New(&fakeRepository{}, publishableCatalog(item), fakeRegionSource{regionIDs: []int64{2}}) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + issues, err := svc.Validate(context.Background(), item, true) + if err != nil { + t.Fatalf("Validate() error = %v", err) + } + if !hasIssue(issues, "region_ids", "region_not_active") { + t.Fatalf("expected inactive region issue, got %+v", issues) + } +} + +func TestUpdateRejectsStaleRevisionBeforeWriting(t *testing.T) { + nowMS := int64(1_800_000_000_000) + current := publishableTemplate(nowMS) + current.Status = domain.StatusDisabled + repository := &fakeRepository{current: current} + svc := New(repository, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + _, err := svc.Update(context.Background(), domain.UpdateCommand{ + Template: current, ExpectedRevision: current.Revision - 1, OperatorAdminID: 90001, + }) + if !xerr.IsCode(err, xerr.Conflict) { + t.Fatalf("Update() error = %v, want conflict", err) + } + if repository.updateCalls != 0 { + t.Fatalf("stale update wrote repository %d times", repository.updateCalls) + } +} + +func TestUpdateRejectsTemplateCodeChangeAfterCreate(t *testing.T) { + nowMS := int64(1_800_000_000_000) + current := publishableTemplate(nowMS) + current.Status = domain.StatusDisabled + repository := &fakeRepository{current: current} + svc := New(repository, nil, nil) + changed := current + changed.TemplateCode = "replacement_code" + + _, err := svc.Update(context.Background(), domain.UpdateCommand{ + Template: changed, ExpectedRevision: current.Revision, OperatorAdminID: 90001, + }) + if !xerr.IsCode(err, xerr.Conflict) || repository.updateCalls != 0 { + t.Fatalf("code mutation error=%v update_calls=%d", err, repository.updateCalls) + } +} + +func TestDeleteRequiresScheduledOrOngoingPublishedTemplateToBeDisabledFirst(t *testing.T) { + nowMS := int64(1_800_000_000_000) + current := publishableTemplate(nowMS) + current.Status = domain.StatusPublished + repository := &fakeRepository{current: current} + svc := New(repository, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + _, _, err := svc.Delete(context.Background(), domain.StatusCommand{ + TemplateID: current.TemplateID, ExpectedRevision: current.Revision, OperatorAdminID: 90001, + }) + if !xerr.IsCode(err, xerr.Conflict) { + t.Fatalf("Delete() error = %v, want conflict", err) + } + if repository.statusCalls != 0 { + t.Fatalf("scheduled template was archived %d times", repository.statusCalls) + } +} + +func TestDeleteAllowsEndedPublishedTemplateToArchive(t *testing.T) { + nowMS := int64(1_800_000_000_000) + current := publishableTemplate(nowMS) + current.Status = domain.StatusPublished + current.StartMS = nowMS - 2_000 + current.EndMS = nowMS - 1_000 + repository := &fakeRepository{current: current} + svc := New(repository, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + got, archived, err := svc.Delete(context.Background(), domain.StatusCommand{ + TemplateID: current.TemplateID, ExpectedRevision: current.Revision, OperatorAdminID: 90001, + }) + if err != nil { + t.Fatalf("Delete() error = %v", err) + } + if !archived || got.Status != domain.StatusArchived || got.LifecycleStatus != domain.LifecycleArchived { + t.Fatalf("Delete() = archived:%v template:%+v", archived, got) + } +} + +func TestClonePreservesConfigurationButClearsRuntimeIdentityAndSchedule(t *testing.T) { + nowMS := int64(1_800_000_000_000) + source := publishableTemplate(nowMS) + source.Status = domain.StatusDisabled + source.PublishedVersion = 3 + source.PublishedAtMS = nowMS - 10_000 + repository := &fakeRepository{current: source} + svc := New(repository, nil, nil) + svc.now = func() time.Time { return time.UnixMilli(nowMS) } + + got, err := svc.Clone(context.Background(), domain.CloneCommand{ + SourceTemplateID: source.TemplateID, TemplateCode: "gift_challenge_copy", Name: "Gift Challenge Copy", OperatorAdminID: 90002, + }) + if err != nil { + t.Fatalf("Clone() error = %v", err) + } + if got.TemplateID == source.TemplateID || got.TemplateCode != "gift_challenge_copy" || got.Status != domain.StatusDraft { + t.Fatalf("clone identity/status = %+v", got) + } + if got.StartMS != 0 || got.EndMS != 0 || got.PublishedVersion != 0 || got.PublishedAtMS != 0 { + t.Fatalf("clone leaked runtime metadata = %+v", got) + } + if len(got.RegionIDs) != 1 || got.RegionIDs[0] != source.RegionIDs[0] || + len(got.Tasks) != 1 || got.Tasks[0].RewardResourceGroupID != source.Tasks[0].RewardResourceGroupID || + len(got.RankRewards) != len(source.RankRewards) { + t.Fatalf("clone did not preserve configuration: %+v", got) + } +} + +func publishableTemplate(nowMS int64) domain.Template { + return domain.Template{ + TemplateID: "acttpl_source", TemplateCode: "gift_challenge_2026", Name: "Gift Challenge 2026", + ActivityType: domain.ActivityTypeGiftChallenge, Status: domain.StatusDraft, Revision: 7, + StartMS: nowMS + 60_000, EndMS: nowMS + int64((7*24*time.Hour)/time.Millisecond), + AllRegions: false, RegionIDs: []int64{1}, + Locales: []domain.Locale{{Locale: "en", Title: "Gift Challenge", Rules: "Send gifts and complete tasks."}}, + Gifts: []domain.Gift{{ + GiftID: "gift_rose", SortOrder: 1, Name: "Rose", IconURL: "https://cdn.example.com/gifts/rose.png", CoinPrice: 100, PriceVersion: "v3", + }}, + Tasks: []domain.Task{{ + TaskKey: "daily_visit", TaskType: domain.TaskTypeDailyVisit, TargetValue: 1, RewardResourceGroupID: 101, SortOrder: 1, + }}, + DailyLeaderboardSize: 100, + TotalLeaderboardSize: 100, + RankRewards: []domain.RankReward{ + {BoardType: domain.BoardTypeDaily, RankFrom: 1, RankTo: 3, ResourceGroupID: 102, SortOrder: 1}, + {BoardType: domain.BoardTypeTotal, RankFrom: 1, RankTo: 3, ResourceGroupID: 103, SortOrder: 1}, + }, + DisplayConfigJSON: `{}`, + } +} + +func publishableCatalog(item domain.Template) *fakeCatalog { + groups := make(map[int64]*walletv1.ResourceGroup) + for _, groupID := range []int64{101, 102, 103} { + groups[groupID] = &walletv1.ResourceGroup{ + GroupId: groupID, Status: "active", Name: "Reward", UpdatedAtMs: 1_800_000_000_001, + Items: []*walletv1.ResourceGroupItem{{ + GroupId: groupID, ResourceId: groupID + 1000, Quantity: 1, ItemType: "resource", + Resource: &walletv1.Resource{ResourceId: groupID + 1000, ResourceType: "badge", Name: "Badge", Status: "active", Grantable: true, GrantStrategy: "new_entitlement"}, + }}, + } + } + return &fakeCatalog{ + gift: &walletv1.GiftConfig{ + GiftId: item.Gifts[0].GiftID, Status: "active", Name: item.Gifts[0].Name, + CoinPrice: item.Gifts[0].CoinPrice, PriceVersion: item.Gifts[0].PriceVersion, + RegionIds: []int64{0}, + Resource: &walletv1.Resource{ + Status: "active", PreviewUrl: item.Gifts[0].IconURL, AssetUrl: "https://cdn.example.com/gifts/rose-animation.svga", + }, + }, + groups: groups, + } +} + +func hasIssue(issues []domain.ValidationIssue, field string, code string) bool { + for _, issue := range issues { + if issue.Field == field && issue.Code == code { + return true + } + } + return false +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_repository.go b/services/activity-service/internal/storage/mysql/activity_template_repository.go new file mode 100644 index 00000000..87e4c0c0 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_repository.go @@ -0,0 +1,787 @@ +package mysql + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "strings" + + mysqlDriver "github.com/go-sql-driver/mysql" + "hyapp/pkg/appcode" + "hyapp/pkg/idgen" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +const activityTemplateSelect = ` + SELECT app_code, template_id, template_code, name, activity_type, status, start_ms, end_ms, all_regions, + daily_leaderboard_size, total_leaderboard_size, CAST(display_config_json AS CHAR), revision, published_version, + created_by_admin_id, updated_by_admin_id, published_by_admin_id, created_at_ms, updated_at_ms, + published_at_ms, archived_at_ms + FROM activity_templates` + +type activityTemplateQuerier interface { + QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) + QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row +} + +type activityTemplateScanner interface { + Scan(dest ...any) error +} + +// ListActivityTemplates 查询轻量列表投影,只额外附加区域 ID;大段规则、任务和素材只在详情接口读取。 +func (r *Repository) ListActivityTemplates(ctx context.Context, query domain.ListQuery) ([]domain.Summary, int64, error) { + if r == nil || r.db == nil { + return nil, 0, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + where, args := activityTemplateListWhere(ctx, query) + var total int64 + if err := r.db.QueryRowContext(ctx, `SELECT COUNT(*) FROM activity_templates t `+where, args...).Scan(&total); err != nil { + return nil, 0, err + } + pageSize := normalizePageSize(query.PageSize) + page := query.Page + if page <= 0 { + page = 1 + } + rows, err := r.db.QueryContext(ctx, ` + SELECT t.app_code, t.template_id, t.template_code, t.name, t.activity_type, t.status, t.start_ms, t.end_ms, + t.all_regions, t.revision, t.published_version, t.created_by_admin_id, t.updated_by_admin_id, + t.created_at_ms, t.updated_at_ms + FROM activity_templates t `+where+` + ORDER BY t.updated_at_ms DESC, t.template_id DESC + LIMIT ? OFFSET ?`, append(args, int(pageSize), int((page-1)*pageSize))...) + if err != nil { + return nil, 0, err + } + defer rows.Close() + items := make([]domain.Summary, 0) + for rows.Next() { + var item domain.Summary + if err := rows.Scan( + &item.AppCode, &item.TemplateID, &item.TemplateCode, &item.Name, &item.ActivityType, &item.Status, + &item.StartMS, &item.EndMS, &item.AllRegions, &item.Revision, &item.PublishedVersion, + &item.CreatedByAdminID, &item.UpdatedByAdminID, &item.CreatedAtMS, &item.UpdatedAtMS, + ); err != nil { + return nil, 0, err + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + return nil, 0, err + } + if err := attachActivityTemplateSummaryRegions(ctx, r.db, items); err != nil { + return nil, 0, err + } + return items, total, nil +} + +func (r *Repository) GetActivityTemplate(ctx context.Context, templateID string) (domain.Template, error) { + if r == nil || r.db == nil { + return domain.Template{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + return getActivityTemplateAggregate(ctx, r.db, appcode.FromContext(ctx), strings.TrimSpace(templateID), false) +} + +func (r *Repository) CreateActivityTemplate(ctx context.Context, item domain.Template, operatorAdminID int64, nowMS int64) (domain.Template, error) { + if r == nil || r.db == nil { + return domain.Template{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.Template{}, err + } + defer tx.Rollback() + item.AppCode = appcode.FromContext(ctx) + item.TemplateID = idgen.New("acttpl") + item.Status = domain.StatusDraft + item.Revision = 1 + item.PublishedVersion = 0 + item.CreatedByAdminID = operatorAdminID + item.UpdatedByAdminID = operatorAdminID + item.PublishedByAdminID = 0 + item.CreatedAtMS = nowMS + item.UpdatedAtMS = nowMS + item.PublishedAtMS = 0 + item.ArchivedAtMS = 0 + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_templates ( + app_code, template_id, template_code, name, activity_type, status, start_ms, end_ms, all_regions, + daily_leaderboard_size, total_leaderboard_size, display_config_json, revision, published_version, + created_by_admin_id, updated_by_admin_id, published_by_admin_id, created_at_ms, updated_at_ms, published_at_ms, archived_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CAST(? AS JSON), ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, item.TemplateCode, item.Name, item.ActivityType, item.Status, item.StartMS, item.EndMS, item.AllRegions, + item.DailyLeaderboardSize, item.TotalLeaderboardSize, item.DisplayConfigJSON, item.Revision, item.PublishedVersion, + item.CreatedByAdminID, item.UpdatedByAdminID, item.PublishedByAdminID, item.CreatedAtMS, item.UpdatedAtMS, item.PublishedAtMS, item.ArchivedAtMS, + ); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + if err := replaceActivityTemplateChildren(ctx, tx, item, nowMS); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + if err := tx.Commit(); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + return r.GetActivityTemplate(ctx, item.TemplateID) +} + +func (r *Repository) UpdateActivityTemplate(ctx context.Context, command domain.UpdateCommand, nowMS int64) (domain.Template, error) { + if r == nil || r.db == nil { + return domain.Template{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.Template{}, err + } + defer tx.Rollback() + appCode := appcode.FromContext(ctx) + current, err := getActivityTemplateAggregate(ctx, tx, appCode, command.Template.TemplateID, true) + if err != nil { + return domain.Template{}, err + } + if current.Revision != command.ExpectedRevision { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + // Repository 再做一次身份防线,避免未来新增调用方绕过 service 直接改写 deep-link/runtime code。 + if command.Template.TemplateCode != current.TemplateCode { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template_code is immutable") + } + if current.Status == domain.StatusArchived { + return domain.Template{}, xerr.New(xerr.Conflict, "archived activity template is read-only") + } + item := command.Template + item.AppCode = appCode + item.TemplateID = current.TemplateID + item.Status = current.Status + item.Revision = current.Revision + 1 + item.PublishedVersion = current.PublishedVersion + item.CreatedByAdminID = current.CreatedByAdminID + item.CreatedAtMS = current.CreatedAtMS + item.UpdatedByAdminID = command.OperatorAdminID + item.UpdatedAtMS = nowMS + item.PublishedByAdminID = current.PublishedByAdminID + item.PublishedAtMS = current.PublishedAtMS + item.ArchivedAtMS = current.ArchivedAtMS + result, err := tx.ExecContext(ctx, ` + UPDATE activity_templates + SET name = ?, activity_type = ?, start_ms = ?, end_ms = ?, all_regions = ?, + daily_leaderboard_size = ?, total_leaderboard_size = ?, display_config_json = CAST(? AS JSON), + revision = ?, updated_by_admin_id = ?, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND revision = ?`, + item.Name, item.ActivityType, item.StartMS, item.EndMS, item.AllRegions, + item.DailyLeaderboardSize, item.TotalLeaderboardSize, item.DisplayConfigJSON, + item.Revision, item.UpdatedByAdminID, item.UpdatedAtMS, + appCode, item.TemplateID, command.ExpectedRevision) + if err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + affected, _ := result.RowsAffected() + if affected != 1 { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + if err := replaceActivityTemplateChildren(ctx, tx, item, nowMS); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + if err := tx.Commit(); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + return r.GetActivityTemplate(ctx, item.TemplateID) +} + +func (r *Repository) SetActivityTemplateStatus(ctx context.Context, command domain.StatusCommand, nowMS int64) (domain.Template, error) { + if r == nil || r.db == nil { + return domain.Template{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.Template{}, err + } + defer tx.Rollback() + appCode := appcode.FromContext(ctx) + if command.Status == domain.StatusPublished { + // 同一 App 的发布事务先争用一条稳定互斥行,再读取当前草稿与已发布区间。 + // 否则两个互不相同的草稿可以在各自事务快照中都看不到对方,造成区域排期写偏差。 + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_publish_locks (app_code, updated_at_ms) + VALUES (?, ?) + ON DUPLICATE KEY UPDATE updated_at_ms = ?`, appCode, nowMS, nowMS); err != nil { + return domain.Template{}, err + } + } + current, err := getActivityTemplateAggregate(ctx, tx, appCode, command.TemplateID, true) + if err != nil { + return domain.Template{}, err + } + if current.Revision != command.ExpectedRevision { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + if current.Status == domain.StatusArchived { + return domain.Template{}, xerr.New(xerr.Conflict, "archived activity template is read-only") + } + if command.Status == domain.StatusPublished { + // 发布冲突检查与状态写入必须在同一个事务内。all_regions 与任何区域活动冲突; + // 定向活动只在区域集合有交集且 UTC [start_ms,end_ms) 相交时冲突。 + if err := ensureNoPublishedActivityTemplateOverlap(ctx, tx, current); err != nil { + return domain.Template{}, err + } + } + nextRevision := current.Revision + 1 + nextPublishedVersion := current.PublishedVersion + nextPublishedBy := current.PublishedByAdminID + nextPublishedAt := current.PublishedAtMS + nextArchivedAt := current.ArchivedAtMS + if command.Status == domain.StatusPublished { + nextPublishedVersion++ + nextPublishedBy = command.OperatorAdminID + nextPublishedAt = nowMS + } + if command.Status == domain.StatusArchived { + nextArchivedAt = nowMS + } + result, err := tx.ExecContext(ctx, ` + UPDATE activity_templates + SET status = ?, revision = ?, published_version = ?, updated_by_admin_id = ?, updated_at_ms = ?, + published_by_admin_id = ?, published_at_ms = ?, archived_at_ms = ? + WHERE app_code = ? AND template_id = ? AND revision = ?`, + command.Status, nextRevision, nextPublishedVersion, command.OperatorAdminID, nowMS, + nextPublishedBy, nextPublishedAt, nextArchivedAt, + appCode, current.TemplateID, command.ExpectedRevision) + if err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + affected, _ := result.RowsAffected() + if affected != 1 { + return domain.Template{}, xerr.New(xerr.Conflict, "activity template revision changed") + } + if command.Status == domain.StatusPublished { + published, err := getActivityTemplateAggregate(ctx, tx, appCode, current.TemplateID, false) + if err != nil { + return domain.Template{}, err + } + // wallet-owner snapshot IDs are produced immediately before this transaction and keyed by the next + // published version. Only these trusted refs are embedded; mutable edit tables continue storing group IDs. + for index := range published.Tasks { + if published.Tasks[index].RewardResourceGroupID <= 0 { + continue + } + snapshot, ok := command.RewardSnapshots[published.Tasks[index].RewardResourceGroupID] + if !ok || snapshot.SnapshotID == "" { + return domain.Template{}, xerr.New(xerr.Conflict, "activity task reward snapshot is missing") + } + published.Tasks[index].RewardSnapshot = snapshot + } + for index := range published.RankRewards { + snapshot, ok := command.RewardSnapshots[published.RankRewards[index].ResourceGroupID] + if !ok || snapshot.SnapshotID == "" { + return domain.Template{}, xerr.New(xerr.Conflict, "activity rank reward snapshot is missing") + } + published.RankRewards[index].RewardSnapshot = snapshot + } + published.LifecycleStatus = "" + snapshotJSON, err := json.Marshal(published) + if err != nil { + return domain.Template{}, err + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_versions ( + app_code, template_id, version_no, snapshot_json, published_by_admin_id, published_at_ms + ) VALUES (?, ?, ?, CAST(? AS JSON), ?, ?)`, + appCode, current.TemplateID, nextPublishedVersion, string(snapshotJSON), command.OperatorAdminID, nowMS); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + // 运行侧只绑定刚写入的不可变快照;这里和状态/版本在同一事务建启用窗口及 UTC 结算周期, + // 避免发布已成功但 MQ 消费或 cron 永远找不到运行版本的半发布状态。 + if err := insertActivityTemplateRuntimeVersion(ctx, tx, published, nextPublishedVersion, nowMS, r.activityTemplateSettlementLatenessMS()); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + } else if command.Status == domain.StatusDisabled { + // 停用只关闭当前发布版本的真实事件窗口,并把未来周期取消、进行中的周期截断为立即可结算。 + // 已冻结快照和历史发奖任务不删除,后续重试仍按原 published_version 审计。 + if err := closeActivityTemplateRuntimeVersion(ctx, tx, current.TemplateID, current.PublishedVersion, nowMS, r.activityTemplateSettlementLatenessMS()); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + } + if err := tx.Commit(); err != nil { + return domain.Template{}, activityTemplateWriteError(err) + } + return r.GetActivityTemplate(ctx, current.TemplateID) +} + +func (r *Repository) ListActivityTemplateVersions(ctx context.Context, templateID string, page int32, pageSize int32) ([]domain.Version, int64, error) { + if r == nil || r.db == nil { + return nil, 0, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + appCode := appcode.FromContext(ctx) + if _, err := getActivityTemplateBase(ctx, r.db, appCode, templateID, false); err != nil { + return nil, 0, err + } + var total int64 + if err := r.db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM activity_template_versions WHERE app_code = ? AND template_id = ?`, + appCode, templateID).Scan(&total); err != nil { + return nil, 0, err + } + pageSize = normalizePageSize(pageSize) + if page <= 0 { + page = 1 + } + rows, err := r.db.QueryContext(ctx, ` + SELECT v.version_no, CAST(v.snapshot_json AS CHAR), v.published_by_admin_id, v.published_at_ms, + COALESCE(rv.runtime_from_ms, 0), COALESCE(rv.runtime_to_ms, 0) + FROM activity_template_versions v + LEFT JOIN activity_template_runtime_versions rv + ON rv.app_code = v.app_code AND rv.template_id = v.template_id AND rv.version_no = v.version_no + WHERE v.app_code = ? AND v.template_id = ? + ORDER BY v.version_no DESC + LIMIT ? OFFSET ?`, appCode, templateID, int(pageSize), int((page-1)*pageSize)) + if err != nil { + return nil, 0, err + } + defer rows.Close() + items := make([]domain.Version, 0) + for rows.Next() { + var item domain.Version + var snapshotJSON string + item.TemplateID = templateID + if err := rows.Scan( + &item.VersionNo, &snapshotJSON, &item.PublishedByAdminID, &item.PublishedAtMS, + &item.RuntimeFromMS, &item.RuntimeToMS, + ); err != nil { + return nil, 0, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Snapshot); err != nil { + return nil, 0, fmt.Errorf("decode activity template version %d: %w", item.VersionNo, err) + } + items = append(items, item) + } + return items, total, rows.Err() +} + +func (r *Repository) GetActivityTemplateVersion(ctx context.Context, templateID string, versionNo int64) (domain.Version, error) { + if r == nil || r.db == nil { + return domain.Version{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + var item domain.Version + var snapshotJSON string + item.TemplateID = strings.TrimSpace(templateID) + err := r.db.QueryRowContext(ctx, ` + SELECT v.version_no, CAST(v.snapshot_json AS CHAR), v.published_by_admin_id, v.published_at_ms, + COALESCE(rv.runtime_from_ms, 0), COALESCE(rv.runtime_to_ms, 0) + FROM activity_template_versions v + LEFT JOIN activity_template_runtime_versions rv + ON rv.app_code = v.app_code AND rv.template_id = v.template_id AND rv.version_no = v.version_no + WHERE v.app_code = ? AND v.template_id = ? AND v.version_no = ?`, + appcode.FromContext(ctx), item.TemplateID, versionNo).Scan( + &item.VersionNo, &snapshotJSON, &item.PublishedByAdminID, &item.PublishedAtMS, + &item.RuntimeFromMS, &item.RuntimeToMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.Version{}, xerr.New(xerr.NotFound, "activity template version not found") + } + if err != nil { + return domain.Version{}, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Snapshot); err != nil { + return domain.Version{}, fmt.Errorf("decode activity template version %d: %w", item.VersionNo, err) + } + return item, nil +} + +func activityTemplateListWhere(ctx context.Context, query domain.ListQuery) (string, []any) { + parts := []string{"t.app_code = ?"} + args := []any{appcode.FromContext(ctx)} + if query.Status == "" { + parts = append(parts, "t.status <> ?") + args = append(args, domain.StatusArchived) + } else { + switch query.Status { + case domain.LifecycleScheduled: + parts = append(parts, "t.status = ? AND t.start_ms > ?") + args = append(args, domain.StatusPublished, query.NowMS) + case domain.LifecycleOngoing, "active": + parts = append(parts, "t.status = ? AND t.start_ms <= ? AND t.end_ms > ?") + args = append(args, domain.StatusPublished, query.NowMS, query.NowMS) + case domain.LifecycleEnded: + parts = append(parts, "t.status = ? AND t.end_ms <= ?") + args = append(args, domain.StatusPublished, query.NowMS) + default: + parts = append(parts, "t.status = ?") + args = append(args, query.Status) + } + } + if query.Keyword != "" { + parts = append(parts, "(t.template_id LIKE ? OR t.template_code LIKE ? OR t.name LIKE ?)") + keyword := "%" + query.Keyword + "%" + args = append(args, keyword, keyword, keyword) + } + if query.StartMS > 0 || query.EndMS > 0 { + // 未排期草稿的 start_ms/end_ms 均为 0,不属于任何时间区间;尤其只有 end_ms 时不能把它们误算为相交。 + parts = append(parts, "t.start_ms > 0 AND t.end_ms > t.start_ms") + } + if query.StartMS > 0 { + // 区间筛选使用相交语义,不要求活动开始时间落在查询区间内。 + parts = append(parts, "t.end_ms > ?") + args = append(args, query.StartMS) + } + if query.EndMS > 0 { + parts = append(parts, "t.start_ms < ?") + args = append(args, query.EndMS) + } + if query.AllRegions != nil { + parts = append(parts, "t.all_regions = ?") + args = append(args, *query.AllRegions) + } + if query.RegionID != nil { + if query.AllRegions != nil && !*query.AllRegions { + parts = append(parts, "EXISTS (SELECT 1 FROM activity_template_regions tr WHERE tr.app_code = t.app_code AND tr.template_id = t.template_id AND tr.region_id = ?)") + } else { + // 未显式限定 all_regions 时,区域筛选返回所有对该区域生效的活动,包括全区活动。 + parts = append(parts, "(t.all_regions = TRUE OR EXISTS (SELECT 1 FROM activity_template_regions tr WHERE tr.app_code = t.app_code AND tr.template_id = t.template_id AND tr.region_id = ?))") + } + args = append(args, *query.RegionID) + } + return "WHERE " + strings.Join(parts, " AND "), args +} + +func getActivityTemplateAggregate(ctx context.Context, q activityTemplateQuerier, appCode string, templateID string, forUpdate bool) (domain.Template, error) { + item, err := getActivityTemplateBase(ctx, q, appCode, templateID, forUpdate) + if err != nil { + return domain.Template{}, err + } + if err := attachActivityTemplateChildren(ctx, q, &item); err != nil { + return domain.Template{}, err + } + return item, nil +} + +func getActivityTemplateBase(ctx context.Context, q activityTemplateQuerier, appCode string, templateID string, forUpdate bool) (domain.Template, error) { + query := activityTemplateSelect + ` WHERE app_code = ? AND template_id = ?` + if forUpdate { + query += ` FOR UPDATE` + } + item, err := scanActivityTemplate(q.QueryRowContext(ctx, query, appCode, strings.TrimSpace(templateID))) + if errors.Is(err, sql.ErrNoRows) { + return domain.Template{}, xerr.New(xerr.NotFound, "activity template not found") + } + return item, err +} + +func scanActivityTemplate(scanner activityTemplateScanner) (domain.Template, error) { + var item domain.Template + err := scanner.Scan( + &item.AppCode, &item.TemplateID, &item.TemplateCode, &item.Name, &item.ActivityType, &item.Status, + &item.StartMS, &item.EndMS, &item.AllRegions, &item.DailyLeaderboardSize, &item.TotalLeaderboardSize, + &item.DisplayConfigJSON, &item.Revision, &item.PublishedVersion, + &item.CreatedByAdminID, &item.UpdatedByAdminID, &item.PublishedByAdminID, + &item.CreatedAtMS, &item.UpdatedAtMS, &item.PublishedAtMS, &item.ArchivedAtMS, + ) + return item, err +} + +func attachActivityTemplateChildren(ctx context.Context, q activityTemplateQuerier, item *domain.Template) error { + item.RegionIDs = []int64{} + item.Locales = []domain.Locale{} + item.Gifts = []domain.Gift{} + item.Tasks = []domain.Task{} + item.RankRewards = []domain.RankReward{} + item.Assets = []domain.Asset{} + rows, err := q.QueryContext(ctx, `SELECT region_id FROM activity_template_regions WHERE app_code = ? AND template_id = ? ORDER BY region_id`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var regionID int64 + if err := rows.Scan(®ionID); err != nil { + rows.Close() + return err + } + item.RegionIDs = append(item.RegionIDs, regionID) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + rows, err = q.QueryContext(ctx, `SELECT locale, title, rules FROM activity_template_locales WHERE app_code = ? AND template_id = ? ORDER BY locale`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var locale domain.Locale + if err := rows.Scan(&locale.Locale, &locale.Title, &locale.Rules); err != nil { + rows.Close() + return err + } + item.Locales = append(item.Locales, locale) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + rows, err = q.QueryContext(ctx, ` + SELECT gift_id, sort_order, name, icon_url, coin_price, price_version + FROM activity_template_gifts WHERE app_code = ? AND template_id = ? ORDER BY sort_order, gift_id`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var gift domain.Gift + if err := rows.Scan(&gift.GiftID, &gift.SortOrder, &gift.Name, &gift.IconURL, &gift.CoinPrice, &gift.PriceVersion); err != nil { + rows.Close() + return err + } + item.Gifts = append(item.Gifts, gift) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + rows, err = q.QueryContext(ctx, ` + SELECT task_key, task_type, target_value, reward_resource_group_id, sort_order + FROM activity_template_tasks WHERE app_code = ? AND template_id = ? ORDER BY sort_order, task_key`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var task domain.Task + if err := rows.Scan(&task.TaskKey, &task.TaskType, &task.TargetValue, &task.RewardResourceGroupID, &task.SortOrder); err != nil { + rows.Close() + return err + } + item.Tasks = append(item.Tasks, task) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + rows, err = q.QueryContext(ctx, ` + SELECT board_type, rank_from, rank_to, resource_group_id, sort_order + FROM activity_template_rank_rewards WHERE app_code = ? AND template_id = ? ORDER BY board_type, rank_from, rank_to`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var reward domain.RankReward + if err := rows.Scan(&reward.BoardType, &reward.RankFrom, &reward.RankTo, &reward.ResourceGroupID, &reward.SortOrder); err != nil { + rows.Close() + return err + } + item.RankRewards = append(item.RankRewards, reward) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + rows, err = q.QueryContext(ctx, ` + SELECT asset_key, locale, url, media_type, sort_order + FROM activity_template_assets WHERE app_code = ? AND template_id = ? ORDER BY asset_key, locale, sort_order`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + for rows.Next() { + var asset domain.Asset + if err := rows.Scan(&asset.AssetKey, &asset.Locale, &asset.URL, &asset.MediaType, &asset.SortOrder); err != nil { + rows.Close() + return err + } + item.Assets = append(item.Assets, asset) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + return nil +} + +func replaceActivityTemplateChildren(ctx context.Context, tx *sql.Tx, item domain.Template, nowMS int64) error { + for _, table := range []string{ + "activity_template_regions", + "activity_template_locales", + "activity_template_gifts", + "activity_template_tasks", + "activity_template_rank_rewards", + "activity_template_assets", + } { + if _, err := tx.ExecContext(ctx, `DELETE FROM `+table+` WHERE app_code = ? AND template_id = ?`, item.AppCode, item.TemplateID); err != nil { + return err + } + } + for _, regionID := range item.RegionIDs { + if _, err := tx.ExecContext(ctx, `INSERT INTO activity_template_regions (app_code, template_id, region_id, created_at_ms) VALUES (?, ?, ?, ?)`, item.AppCode, item.TemplateID, regionID, nowMS); err != nil { + return err + } + } + for _, locale := range item.Locales { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_locales (app_code, template_id, locale, title, rules, created_at_ms, updated_at_ms) + VALUES (?, ?, ?, ?, ?, ?, ?)`, item.AppCode, item.TemplateID, locale.Locale, locale.Title, locale.Rules, nowMS, nowMS); err != nil { + return err + } + } + for _, gift := range item.Gifts { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_gifts (app_code, template_id, gift_id, sort_order, name, icon_url, coin_price, price_version, created_at_ms, updated_at_ms) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, gift.GiftID, gift.SortOrder, gift.Name, gift.IconURL, gift.CoinPrice, gift.PriceVersion, nowMS, nowMS); err != nil { + return err + } + } + for _, task := range item.Tasks { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_tasks (app_code, template_id, task_key, task_type, target_value, reward_resource_group_id, sort_order, created_at_ms, updated_at_ms) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, task.TaskKey, task.TaskType, task.TargetValue, task.RewardResourceGroupID, task.SortOrder, nowMS, nowMS); err != nil { + return err + } + } + for _, reward := range item.RankRewards { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_rank_rewards (app_code, template_id, board_type, rank_from, rank_to, resource_group_id, sort_order, created_at_ms, updated_at_ms) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, reward.BoardType, reward.RankFrom, reward.RankTo, reward.ResourceGroupID, reward.SortOrder, nowMS, nowMS); err != nil { + return err + } + } + for _, asset := range item.Assets { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_assets (app_code, template_id, asset_key, locale, url, media_type, sort_order, created_at_ms, updated_at_ms) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, asset.AssetKey, asset.Locale, asset.URL, asset.MediaType, asset.SortOrder, nowMS, nowMS); err != nil { + return err + } + } + return nil +} + +func ensureNoPublishedActivityTemplateOverlap(ctx context.Context, tx *sql.Tx, item domain.Template) error { + rows, err := tx.QueryContext(ctx, activityTemplateSelect+` + WHERE app_code = ? AND template_id <> ? AND status = ? AND start_ms < ? AND end_ms > ? + ORDER BY start_ms, template_id + FOR UPDATE`, item.AppCode, item.TemplateID, domain.StatusPublished, item.EndMS, item.StartMS) + if err != nil { + return err + } + candidates := make([]domain.Template, 0) + for rows.Next() { + candidate, err := scanActivityTemplate(rows) + if err != nil { + rows.Close() + return err + } + candidates = append(candidates, candidate) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + for index := range candidates { + if err := attachActivityTemplateRegions(ctx, tx, &candidates[index]); err != nil { + return err + } + if activityTemplateScopesOverlap(item, candidates[index]) { + return xerr.New(xerr.Conflict, "published activity template overlaps another activity in the same region scope") + } + } + return nil +} + +func activityTemplateScopesOverlap(left domain.Template, right domain.Template) bool { + if left.AllRegions || right.AllRegions { + return true + } + seen := make(map[int64]struct{}, len(left.RegionIDs)) + for _, regionID := range left.RegionIDs { + seen[regionID] = struct{}{} + } + for _, regionID := range right.RegionIDs { + if _, exists := seen[regionID]; exists { + return true + } + } + return false +} + +func attachActivityTemplateRegions(ctx context.Context, q activityTemplateQuerier, item *domain.Template) error { + rows, err := q.QueryContext(ctx, `SELECT region_id FROM activity_template_regions WHERE app_code = ? AND template_id = ? ORDER BY region_id`, item.AppCode, item.TemplateID) + if err != nil { + return err + } + defer rows.Close() + item.RegionIDs = []int64{} + for rows.Next() { + var regionID int64 + if err := rows.Scan(®ionID); err != nil { + return err + } + item.RegionIDs = append(item.RegionIDs, regionID) + } + return rows.Err() +} + +func attachActivityTemplateSummaryRegions(ctx context.Context, q activityTemplateQuerier, items []domain.Summary) error { + if len(items) == 0 { + return nil + } + placeholders := make([]string, 0, len(items)) + args := make([]any, 0, len(items)+1) + args = append(args, items[0].AppCode) + indexes := make(map[string]int, len(items)) + for index := range items { + items[index].RegionIDs = []int64{} + placeholders = append(placeholders, "?") + args = append(args, items[index].TemplateID) + indexes[items[index].TemplateID] = index + } + rows, err := q.QueryContext(ctx, ` + SELECT template_id, region_id + FROM activity_template_regions + WHERE app_code = ? AND template_id IN (`+strings.Join(placeholders, ",")+`) + ORDER BY template_id, region_id`, args...) + if err != nil { + return err + } + defer rows.Close() + for rows.Next() { + var templateID string + var regionID int64 + if err := rows.Scan(&templateID, ®ionID); err != nil { + return err + } + if index, exists := indexes[templateID]; exists { + items[index].RegionIDs = append(items[index].RegionIDs, regionID) + } + } + return rows.Err() +} + +func activityTemplateWriteError(err error) error { + if err == nil { + return nil + } + var mysqlErr *mysqlDriver.MySQLError + if errors.As(err, &mysqlErr) && mysqlErr.Number == 1062 { + return xerr.New(xerr.Conflict, "activity template code or child key already exists") + } + return err +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_repository_test.go b/services/activity-service/internal/storage/mysql/activity_template_repository_test.go new file mode 100644 index 00000000..bbe0b9d9 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_repository_test.go @@ -0,0 +1,480 @@ +package mysql + +import ( + "context" + "fmt" + "strings" + "testing" + "time" + + "hyapp/internal/testutil/mysqlschema" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +func TestActivityTemplateListKeywordSearchesIDCodeAndName(t *testing.T) { + ctx := appcode.WithContext(context.Background(), "hyapp") + where, args := activityTemplateListWhere(ctx, domain.ListQuery{Keyword: "acttpl_123"}) + for _, field := range []string{"t.template_id LIKE ?", "t.template_code LIKE ?", "t.name LIKE ?"} { + if !strings.Contains(where, field) { + t.Fatalf("keyword where clause missing %s: %s", field, where) + } + } + if len(args) != 5 { + t.Fatalf("keyword args = %v, want app_code, default archived exclusion and three LIKE args", args) + } + for index := 2; index < len(args); index++ { + if args[index] != "%acttpl_123%" { + t.Fatalf("keyword arg %d = %v", index, args[index]) + } + } +} + +func TestPrepareActivityTemplateRankSettlementSeparatesMaterializationFromExpiredJobRecovery(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_reward_recovery_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + ctx := appcode.WithContext(context.Background(), "hyapp") + + item := createRepositoryTemplate(t, ctx, repository, "reward_crash_recovery", false, []int64{1}, 1_000, 2_000) + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }, 100) + if err != nil { + t.Fatalf("publish template: %v", err) + } + period := domain.RankPeriod{ + AppCode: "hyapp", TemplateID: item.TemplateID, TemplateCode: item.TemplateCode, VersionNo: item.PublishedVersion, + BoardType: domain.BoardTypeDaily, PeriodKey: time.UnixMilli(1_000).UTC().Format("2006-01-02"), + } + if _, err := repository.db.ExecContext(ctx, ` + INSERT INTO activity_template_rank_snapshots ( + app_code, template_id, template_code, version_no, board_type, period_key, rank_no, + user_id, score, gift_count, coin_amount, first_scored_at_ms, snapshot_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, 1, 70001, 500, 5, 500, 1100, 2100)`, + period.AppCode, period.TemplateID, period.TemplateCode, period.VersionNo, period.BoardType, period.PeriodKey); err != nil { + t.Fatalf("insert frozen rank: %v", err) + } + if _, err := repository.db.ExecContext(ctx, ` + INSERT INTO activity_template_reward_jobs ( + app_code, reward_job_id, template_id, template_code, version_no, board_type, period_key, + rank_no, user_id, score, resource_group_id, wallet_command_id, status, attempt_count, + created_at_ms, updated_at_ms + ) VALUES (?, 'rewardjob_crashed', ?, ?, ?, ?, ?, 1, 70001, 500, 99, + 'activity-template-rank:crashed', ?, 1, 2100, 2100)`, + period.AppCode, period.TemplateID, period.TemplateCode, period.VersionNo, period.BoardType, period.PeriodKey, + domain.ClaimStatusRunning); err != nil { + t.Fatalf("insert crashed running job: %v", err) + } + periods, err := repository.ClaimDueActivityTemplateRankPeriods(ctx, "materializer", 200_000, time.Minute, 10) + if err != nil { + t.Fatalf("ClaimDueActivityTemplateRankPeriods() error = %v", err) + } + claimed := false + for _, candidate := range periods { + if candidate.TemplateID == period.TemplateID && candidate.BoardType == period.BoardType && candidate.PeriodKey == period.PeriodKey { + claimed = true + break + } + } + if !claimed { + t.Fatalf("daily period was not claimed for materialization: %+v", periods) + } + + jobs, err := repository.PrepareActivityTemplateRankSettlement(ctx, period, 200_001) + if err != nil { + t.Fatalf("PrepareActivityTemplateRankSettlement() error = %v", err) + } + if len(jobs) != 0 { + t.Fatalf("PrepareActivityTemplateRankSettlement() jobs = %+v, want materialization only", jobs) + } + var periodStatus string + if err := repository.db.QueryRowContext(ctx, ` + SELECT status FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey).Scan(&periodStatus); err != nil { + t.Fatalf("read materialized period status: %v", err) + } + if periodStatus != domain.PeriodStatusRewarding { + t.Fatalf("materialized period status = %q, want rewarding", periodStatus) + } + jobs, err = repository.ClaimActivityTemplateRewardJobs(ctx, "recovery-worker", 200_002, time.Minute, 10) + if err != nil { + t.Fatalf("ClaimActivityTemplateRewardJobs() error = %v", err) + } + if len(jobs) != 1 || jobs[0].RewardJobID != "rewardjob_crashed" || jobs[0].Status != domain.ClaimStatusRunning || jobs[0].AttemptCount != 2 { + t.Fatalf("expired job recovery = %+v", jobs) + } +} + +func TestActivityTemplateSettlementDiscoverySkipsFiftyBlockedPeriodsBeforePending(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_period_starvation_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + ctx := appcode.WithContext(context.Background(), "hyapp") + const nowMS = int64(100_000) + + for index := 0; index < 50; index++ { + templateID := "blocked-" + fmt.Sprintf("%02d", index) + if _, err := repository.db.ExecContext(ctx, ` + INSERT INTO activity_template_rank_periods ( + app_code, template_id, template_code, version_no, board_type, period_key, + period_start_ms, period_end_ms, settle_after_ms, leaderboard_size, status, + locked_by, lock_until_ms, settled_at_ms, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, 1, 'total', 'total', 1, 2, ?, 100, ?, '', 0, 0, 1, 1)`, + "hyapp", templateID, templateID, int64(index+1), domain.PeriodStatusSettling); err != nil { + t.Fatalf("insert blocked period %d: %v", index, err) + } + status := domain.ClaimStatusFailed + nextRetryAtMS := nowMS + int64(time.Hour/time.Millisecond) + if index%2 == 0 { + status = domain.ClaimStatusDead + nextRetryAtMS = 0 + } + if _, err := repository.db.ExecContext(ctx, ` + INSERT INTO activity_template_reward_jobs ( + app_code, reward_job_id, template_id, template_code, version_no, board_type, period_key, + rank_no, user_id, score, resource_group_id, wallet_command_id, status, attempt_count, + max_attempts, next_retry_at_ms, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, 1, 'total', 'total', 1, ?, 1, 1, ?, ?, 1, 8, ?, 1, 1)`, + "hyapp", "job-"+templateID, templateID, templateID, int64(index+1), "wallet-"+templateID, + status, nextRetryAtMS); err != nil { + t.Fatalf("insert blocked job %d: %v", index, err) + } + } + if _, err := repository.db.ExecContext(ctx, ` + INSERT INTO activity_template_rank_periods ( + app_code, template_id, template_code, version_no, board_type, period_key, + period_start_ms, period_end_ms, settle_after_ms, leaderboard_size, status, + locked_by, lock_until_ms, settled_at_ms, created_at_ms, updated_at_ms + ) VALUES ('hyapp', 'pending-after-blocked', 'pending-after-blocked', 1, 'total', 'total', + 1, 2, 1000, 100, ?, '', 0, 0, 1, 1)`, domain.PeriodStatusPending); err != nil { + t.Fatalf("insert pending period: %v", err) + } + + periods, err := repository.ClaimDueActivityTemplateRankPeriods(ctx, "settler", nowMS, time.Minute, 50) + if err != nil { + t.Fatalf("ClaimDueActivityTemplateRankPeriods() error = %v", err) + } + if len(periods) != 1 || periods[0].TemplateID != "pending-after-blocked" { + t.Fatalf("discovered periods = %+v, want only pending-after-blocked", periods) + } + if len(periods) == 50 { + t.Fatal("blocked settling periods must not keep settlement has_more true") + } +} + +func TestActivityTemplateListTimeFilterExcludesUnscheduledDrafts(t *testing.T) { + ctx := appcode.WithContext(context.Background(), "hyapp") + where, _ := activityTemplateListWhere(ctx, domain.ListQuery{EndMS: 2_000}) + if !strings.Contains(where, "t.start_ms > 0 AND t.end_ms > t.start_ms") || !strings.Contains(where, "t.start_ms < ?") { + t.Fatalf("end-only time filter does not require a valid scheduled period: %s", where) + } +} + +func TestActivityTemplateScopesOverlap(t *testing.T) { + tests := []struct { + name string + left domain.Template + right domain.Template + want bool + }{ + {name: "left global", left: domain.Template{AllRegions: true}, right: domain.Template{RegionIDs: []int64{1}}, want: true}, + {name: "right global", left: domain.Template{RegionIDs: []int64{1}}, right: domain.Template{AllRegions: true}, want: true}, + {name: "shared region", left: domain.Template{RegionIDs: []int64{1, 2}}, right: domain.Template{RegionIDs: []int64{2, 3}}, want: true}, + {name: "disjoint regions", left: domain.Template{RegionIDs: []int64{1}}, right: domain.Template{RegionIDs: []int64{2}}, want: false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := activityTemplateScopesOverlap(tt.left, tt.right); got != tt.want { + t.Fatalf("activityTemplateScopesOverlap() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestActivityTemplateRankPeriodWatermarkIsExclusive(t *testing.T) { + const settleAfterMS = int64(122_000) + if accepted, reason := activityTemplateRankPeriodAcceptsEvent(domain.PeriodStatusPending, settleAfterMS, settleAfterMS-1); !accepted || reason != "" { + t.Fatalf("event before watermark = (%v, %q), want accepted", accepted, reason) + } + if accepted, reason := activityTemplateRankPeriodAcceptsEvent(domain.PeriodStatusPending, settleAfterMS, settleAfterMS); accepted || reason != "settlement_window_closed" { + t.Fatalf("event at watermark = (%v, %q), want settlement_window_closed", accepted, reason) + } + if accepted, reason := activityTemplateRankPeriodAcceptsEvent(domain.PeriodStatusSettling, settleAfterMS, settleAfterMS-1); accepted || reason != "rank_period_closed" { + t.Fatalf("event for settling period = (%v, %q), want rank_period_closed", accepted, reason) + } + if accepted, reason := activityTemplateRankPeriodAcceptsEvent(domain.PeriodStatusRewarding, settleAfterMS, settleAfterMS-1); accepted || reason != "rank_period_closed" { + t.Fatalf("event for rewarding period = (%v, %q), want rank_period_closed", accepted, reason) + } +} + +func TestActivityTemplateLateGiftIsAcceptedBeforeWatermarkAndRejectedAtSettlement(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_late_gift_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + repository.SetActivityTemplateSettlementLateness(2 * time.Minute) + ctx := appcode.WithContext(context.Background(), "hyapp") + + item := createRepositoryTemplate(t, ctx, repository, "late_gift_watermark", false, []int64{1}, 1_000, 2_000) + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }, 100) + if err != nil { + t.Fatalf("publish template: %v", err) + } + periodKey := time.UnixMilli(1_999).UTC().Format("2006-01-02") + var settleAfterMS int64 + if err := repository.db.QueryRowContext(ctx, ` + SELECT settle_after_ms FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + "hyapp", item.TemplateID, item.PublishedVersion, domain.BoardTypeDaily, periodKey).Scan(&settleAfterMS); err != nil { + t.Fatalf("read settlement watermark: %v", err) + } + if settleAfterMS != 2_000+(2*time.Minute).Milliseconds() { + t.Fatalf("settle_after_ms = %d", settleAfterMS) + } + periods, err := repository.ClaimDueActivityTemplateRankPeriods(ctx, "worker-before", settleAfterMS-1, time.Minute, 10) + if err != nil || len(periods) != 0 { + t.Fatalf("claim before watermark = %+v, err=%v", periods, err) + } + + accepted, err := repository.ConsumeActivityTemplateGiftEvent(ctx, domain.GiftEvent{ + EventID: "event-before-watermark", UserID: 70001, GiftID: "gift_rose", GiftCount: 1, + CoinAmount: 100, RegionID: 1, OccurredAtMS: 1_999, + }, settleAfterMS-1) + if err != nil || accepted.Status != domain.EventStatusConsumed { + t.Fatalf("consume before watermark = %+v, err=%v", accepted, err) + } + periods, err = repository.ClaimDueActivityTemplateRankPeriods(ctx, "worker-at", settleAfterMS, time.Minute, 10) + if err != nil || len(periods) != 2 { + t.Fatalf("claim at watermark = %+v, err=%v", periods, err) + } + late, err := repository.ConsumeActivityTemplateGiftEvent(ctx, domain.GiftEvent{ + EventID: "event-at-watermark", UserID: 70001, GiftID: "gift_rose", GiftCount: 1, + CoinAmount: 100, RegionID: 1, OccurredAtMS: 1_999, + }, settleAfterMS) + if err != nil || late.Status != domain.EventStatusSkipped || late.SkipReason != "daily:settlement_window_closed;total:settlement_window_closed" { + t.Fatalf("consume at watermark = %+v, err=%v", late, err) + } + var score int64 + if err := repository.db.QueryRowContext(ctx, ` + SELECT score FROM activity_template_user_total_scores + WHERE app_code = ? AND template_id = ? AND version_no = ? AND user_id = ?`, + "hyapp", item.TemplateID, item.PublishedVersion, 70001).Scan(&score); err != nil { + t.Fatalf("read total score: %v", err) + } + if score != 100 { + t.Fatalf("total score = %d, want only the accepted event", score) + } +} + +func TestActivityTemplateLateGiftStillUpdatesOpenTotalAfterDailySettlement(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_split_watermark_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + repository.SetActivityTemplateSettlementLateness(2 * time.Minute) + ctx := appcode.WithContext(context.Background(), "hyapp") + dayStart := time.Date(2026, 7, 14, 0, 0, 0, 0, time.UTC).UnixMilli() + dayEnd := dayStart + int64(24*time.Hour/time.Millisecond) + item := createRepositoryTemplate(t, ctx, repository, "split_daily_total_watermark", false, []int64{1}, dayStart, dayEnd+int64(24*time.Hour/time.Millisecond)) + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }, dayStart-1_000) + if err != nil { + t.Fatalf("publish template: %v", err) + } + processingMS := dayEnd + (2 * time.Minute).Milliseconds() + periods, err := repository.ClaimDueActivityTemplateRankPeriods(ctx, "daily-settler", processingMS, time.Minute, 10) + if err != nil || len(periods) != 1 || periods[0].BoardType != domain.BoardTypeDaily { + t.Fatalf("claim first daily period = %+v, err=%v", periods, err) + } + result, err := repository.ConsumeActivityTemplateGiftEvent(ctx, domain.GiftEvent{ + EventID: "late-daily-open-total", UserID: 70002, GiftID: "gift_rose", GiftCount: 2, + CoinAmount: 250, RegionID: 1, OccurredAtMS: dayEnd - 1, + }, processingMS) + if err != nil || result.Status != domain.EventStatusConsumed || result.SkipReason != "daily:settlement_window_closed" { + t.Fatalf("consume split-watermark gift = %+v, err=%v", result, err) + } + var totalScore int64 + if err := repository.db.QueryRowContext(ctx, ` + SELECT score FROM activity_template_user_total_scores + WHERE app_code = ? AND template_id = ? AND version_no = ? AND user_id = ?`, + "hyapp", item.TemplateID, item.PublishedVersion, 70002).Scan(&totalScore); err != nil { + t.Fatalf("read total score: %v", err) + } + if totalScore != 250 { + t.Fatalf("total score = %d, want 250", totalScore) + } + var dailyRows int + if err := repository.db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM activity_template_user_day_scores + WHERE app_code = ? AND template_id = ? AND version_no = ? AND user_id = ?`, + "hyapp", item.TemplateID, item.PublishedVersion, 70002).Scan(&dailyRows); err != nil || dailyRows != 0 { + t.Fatalf("closed daily score rows = %d, err=%v", dailyRows, err) + } +} + +func TestActivityTemplateRepositoryPublishSerializesScopeOverlapAndStoresVersion(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_template_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + ctx := appcode.WithContext(context.Background(), "hyapp") + + first := createRepositoryTemplate(t, ctx, repository, "scope_first", false, []int64{1}, 1_000, 2_000) + first, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: first.TemplateID, Status: domain.StatusPublished, ExpectedRevision: first.Revision, OperatorAdminID: 90001, + }, 100) + if err != nil { + t.Fatalf("publish first template: %v", err) + } + if first.PublishedVersion != 1 || first.Revision != 2 { + t.Fatalf("first published metadata = %+v", first) + } + version, err := repository.GetActivityTemplateVersion(ctx, first.TemplateID, 1) + if err != nil { + t.Fatalf("get first version: %v", err) + } + if version.Snapshot.Status != domain.StatusPublished || version.Snapshot.TemplateCode != first.TemplateCode || version.Snapshot.Revision != first.Revision { + t.Fatalf("published snapshot = %+v", version.Snapshot) + } + + overlap := createRepositoryTemplate(t, ctx, repository, "scope_overlap", false, []int64{1}, 1_500, 2_500) + _, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: overlap.TemplateID, Status: domain.StatusPublished, ExpectedRevision: overlap.Revision, OperatorAdminID: 90001, + }, 110) + if !xerr.IsCode(err, xerr.Conflict) { + t.Fatalf("overlapping same-region publish error = %v, want conflict", err) + } + + disjoint := createRepositoryTemplate(t, ctx, repository, "scope_disjoint", false, []int64{2}, 1_500, 2_500) + if _, err := repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: disjoint.TemplateID, Status: domain.StatusPublished, ExpectedRevision: disjoint.Revision, OperatorAdminID: 90001, + }, 120); err != nil { + t.Fatalf("publish disjoint-region template: %v", err) + } + + global := createRepositoryTemplate(t, ctx, repository, "scope_global", true, nil, 1_700, 1_800) + _, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: global.TemplateID, Status: domain.StatusPublished, ExpectedRevision: global.Revision, OperatorAdminID: 90001, + }, 130) + if !xerr.IsCode(err, xerr.Conflict) { + t.Fatalf("global overlapping publish error = %v, want conflict", err) + } + + // [start_ms,end_ms) 允许一个活动在另一个活动结束的同一毫秒开始。 + adjacent := createRepositoryTemplate(t, ctx, repository, "scope_adjacent", false, []int64{1}, 2_000, 3_000) + if _, err := repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: adjacent.TemplateID, Status: domain.StatusPublished, ExpectedRevision: adjacent.Revision, OperatorAdminID: 90001, + }, 140); err != nil { + t.Fatalf("publish adjacent template: %v", err) + } +} + +func TestActivityTemplateVersionQueryJoinsDisableAndRepublishRuntimeWindows(t *testing.T) { + schema := mysqlschema.New(t, mysqlschema.Config{ + EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN", + InitDBPath: mysqlschema.InitDBPath(t, mysqlschema.CallerFile(t, 1), "..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql"), + DatabasePrefix: "hyapp_activity_version_runtime_test", + }) + repository, err := Open(context.Background(), schema.DSN) + if err != nil { + t.Fatalf("open repository: %v", err) + } + t.Cleanup(func() { _ = repository.Close() }) + ctx := appcode.WithContext(context.Background(), "hyapp") + + item := createRepositoryTemplate(t, ctx, repository, "version_runtime_window", false, []int64{1}, 100, 2_000) + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }, 100) + if err != nil { + t.Fatalf("publish v1: %v", err) + } + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusDisabled, ExpectedRevision: item.Revision, OperatorAdminID: 90001, + }, 500) + if err != nil { + t.Fatalf("disable v1: %v", err) + } + item, err = repository.SetActivityTemplateStatus(ctx, domain.StatusCommand{ + TemplateID: item.TemplateID, Status: domain.StatusPublished, ExpectedRevision: item.Revision, OperatorAdminID: 90002, + }, 600) + if err != nil { + t.Fatalf("republish v2: %v", err) + } + + versions, total, err := repository.ListActivityTemplateVersions(ctx, item.TemplateID, 1, 20) + if err != nil { + t.Fatalf("list versions: %v", err) + } + if total != 2 || len(versions) != 2 { + t.Fatalf("version total/items = %d/%d", total, len(versions)) + } + if versions[0].VersionNo != 2 || versions[0].RuntimeFromMS != 600 || versions[0].RuntimeToMS != 0 { + t.Fatalf("v2 runtime window = %+v", versions[0]) + } + if versions[1].VersionNo != 1 || versions[1].RuntimeFromMS != 100 || versions[1].RuntimeToMS != 500 { + t.Fatalf("v1 runtime window = %+v", versions[1]) + } + v1, err := repository.GetActivityTemplateVersion(ctx, item.TemplateID, 1) + if err != nil { + t.Fatalf("get v1: %v", err) + } + if v1.RuntimeFromMS != 100 || v1.RuntimeToMS != 500 { + t.Fatalf("get v1 runtime window = %+v", v1) + } +} + +func createRepositoryTemplate(t *testing.T, ctx context.Context, repository *Repository, code string, allRegions bool, regionIDs []int64, startMS int64, endMS int64) domain.Template { + t.Helper() + item, err := repository.CreateActivityTemplate(ctx, domain.Template{ + TemplateCode: code, Name: code, ActivityType: domain.ActivityTypeGiftChallenge, + StartMS: startMS, EndMS: endMS, AllRegions: allRegions, RegionIDs: regionIDs, + Gifts: []domain.Gift{{ + GiftID: "gift_rose", SortOrder: 1, Name: "Rose", IconURL: "https://cdn.example.com/gift_rose.png", + CoinPrice: 100, PriceVersion: "v1", + }}, + DailyLeaderboardSize: 100, TotalLeaderboardSize: 100, DisplayConfigJSON: `{}`, + }, 90001, 10) + if err != nil { + t.Fatalf("create template %s: %v", code, err) + } + return item +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_runtime_repository.go b/services/activity-service/internal/storage/mysql/activity_template_runtime_repository.go new file mode 100644 index 00000000..bc28496c --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_runtime_repository.go @@ -0,0 +1,1186 @@ +package mysql + +import ( + "context" + "crypto/sha256" + "database/sql" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "strings" + "time" + + "hyapp/pkg/activitymq" + "hyapp/pkg/appcode" + "hyapp/pkg/idgen" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +const ( + runtimeEventTypeGift = "RoomGiftSent" + outboxStatusPending = "pending" + outboxStatusRunning = "running" + outboxStatusSent = "sent" + outboxStatusFailed = "failed" +) + +// insertActivityTemplateRuntimeVersion is called inside the publish transaction. It binds all future +// events and settlements to the exact version snapshot that was just persisted. +func insertActivityTemplateRuntimeVersion(ctx context.Context, tx *sql.Tx, item domain.Template, versionNo int64, nowMS int64, settlementLatenessMS int64) error { + if settlementLatenessMS <= 0 { + settlementLatenessMS = defaultActivityTemplateSettlementLateness.Milliseconds() + } + runtimeFromMS := nowMS + if item.StartMS > runtimeFromMS { + runtimeFromMS = item.StartMS + } + if runtimeFromMS >= item.EndMS { + return xerr.New(xerr.Conflict, "activity template runtime period has already ended") + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_runtime_versions ( + app_code, template_id, template_code, version_no, start_ms, end_ms, all_regions, + runtime_from_ms, runtime_to_ms, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?)`, + item.AppCode, item.TemplateID, item.TemplateCode, versionNo, item.StartMS, item.EndMS, + item.AllRegions, runtimeFromMS, nowMS, nowMS); err != nil { + return err + } + for _, regionID := range item.RegionIDs { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_runtime_regions (app_code, template_id, version_no, region_id, created_at_ms) + VALUES (?, ?, ?, ?, ?)`, item.AppCode, item.TemplateID, versionNo, regionID, nowMS); err != nil { + return err + } + } + // Every period is materialized at publish time. Cron therefore only claims bounded indexed rows and + // never scans versions or synthesizes historical days differently across workers. + dayCursor := utcDayStart(runtimeFromMS) + for dayCursor < item.EndMS { + dayEnd := dayCursor + int64(24*time.Hour/time.Millisecond) + periodStart := maxInt64(dayCursor, runtimeFromMS) + periodEnd := minInt64(dayEnd, item.EndMS) + if periodStart < periodEnd { + periodKey := time.UnixMilli(dayCursor).UTC().Format("2006-01-02") + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_rank_periods ( + app_code, template_id, template_code, version_no, board_type, period_key, + period_start_ms, period_end_ms, settle_after_ms, leaderboard_size, status, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, item.TemplateCode, versionNo, domain.BoardTypeDaily, periodKey, + periodStart, periodEnd, periodEnd+settlementLatenessMS, item.DailyLeaderboardSize, + domain.PeriodStatusPending, nowMS, nowMS); err != nil { + return err + } + } + dayCursor = dayEnd + } + _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_rank_periods ( + app_code, template_id, template_code, version_no, board_type, period_key, + period_start_ms, period_end_ms, settle_after_ms, leaderboard_size, status, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, 'total', ?, ?, ?, ?, ?, ?, ?)`, + item.AppCode, item.TemplateID, item.TemplateCode, versionNo, domain.BoardTypeTotal, + runtimeFromMS, item.EndMS, item.EndMS+settlementLatenessMS, item.TotalLeaderboardSize, + domain.PeriodStatusPending, nowMS, nowMS) + return err +} + +func closeActivityTemplateRuntimeVersion(ctx context.Context, tx *sql.Tx, templateID string, versionNo int64, nowMS int64, settlementLatenessMS int64) error { + if versionNo <= 0 { + return nil + } + if settlementLatenessMS <= 0 { + settlementLatenessMS = defaultActivityTemplateSettlementLateness.Milliseconds() + } + appCode := appcode.FromContext(ctx) + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_runtime_versions + SET runtime_to_ms = CASE WHEN runtime_to_ms = 0 OR runtime_to_ms > ? THEN ? ELSE runtime_to_ms END, + updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ?`, + nowMS, nowMS, nowMS, appCode, templateID, versionNo); err != nil { + return err + } + // Lock all unfinished periods before clipping them so settlement cannot freeze a ranking while disable + // is concurrently changing its event window. + rows, err := tx.QueryContext(ctx, ` + SELECT board_type, period_key + FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND status IN (?, ?) + FOR UPDATE`, appCode, templateID, versionNo, domain.PeriodStatusPending, domain.PeriodStatusSettling) + if err != nil { + return err + } + for rows.Next() { + var boardType, periodKey string + if err := rows.Scan(&boardType, &periodKey); err != nil { + rows.Close() + return err + } + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET status = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? + AND status IN (?, ?) AND period_start_ms >= ?`, + domain.PeriodStatusCancelled, nowMS, appCode, templateID, versionNo, + domain.PeriodStatusPending, domain.PeriodStatusSettling, nowMS); err != nil { + return err + } + _, err = tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET period_end_ms = ?, settle_after_ms = ?, status = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? + AND status IN (?, ?) AND period_start_ms < ? AND period_end_ms > ?`, + nowMS, nowMS+settlementLatenessMS, domain.PeriodStatusPending, nowMS, appCode, templateID, versionNo, + domain.PeriodStatusPending, domain.PeriodStatusSettling, nowMS, nowMS) + return err +} + +// FindCurrentActivityTemplateRuntime resolves a concrete region to one immutable active version. +func (r *Repository) FindCurrentActivityTemplateRuntime(ctx context.Context, templateCode string, regionID int64, atMS int64) (domain.Runtime, bool, error) { + if r == nil || r.db == nil { + return domain.Runtime{}, false, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + return findActivityTemplateRuntime(ctx, r.db, appcode.FromContext(ctx), strings.TrimSpace(templateCode), regionID, atMS) +} + +// FindActivityTemplateRuntimeForPeriod resolves the immutable version that owns a materialized period. +// Unlike event/progress creation lookups this deliberately remains readable after runtime_to/end_ms, so +// result pages and idempotent wallet compensation keep a stable version identity after campaign close. +func (r *Repository) FindActivityTemplateRuntimeForPeriod(ctx context.Context, templateCode string, versionNo int64, regionID int64, boardType string, periodKey string, atMS int64) (domain.Runtime, bool, error) { + if r == nil || r.db == nil { + return domain.Runtime{}, false, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + var item domain.Runtime + var snapshotJSON string + err := r.db.QueryRowContext(ctx, ` + SELECT rv.runtime_from_ms, rv.runtime_to_ms, CAST(v.snapshot_json AS CHAR), rv.version_no + FROM activity_template_rank_periods rp + JOIN activity_template_runtime_versions rv + ON rv.app_code = rp.app_code AND rv.template_id = rp.template_id AND rv.version_no = rp.version_no + JOIN activity_template_versions v + ON v.app_code = rv.app_code AND v.template_id = rv.template_id AND v.version_no = rv.version_no + WHERE rp.app_code = ? AND rp.template_code = ? AND (? = 0 OR rp.version_no = ?) + AND rp.board_type = ? AND rp.period_key = ? + AND rp.period_start_ms <= ? AND rp.status <> ? + AND (rv.all_regions = TRUE OR EXISTS ( + SELECT 1 FROM activity_template_runtime_regions rr + WHERE rr.app_code = rv.app_code AND rr.template_id = rv.template_id + AND rr.version_no = rv.version_no AND rr.region_id = ? + )) + ORDER BY CASE WHEN rp.period_start_ms <= ? AND rp.period_end_ms > ? THEN 0 ELSE 1 END, + rv.runtime_from_ms DESC, rv.version_no DESC + LIMIT 1`, appcode.FromContext(ctx), strings.TrimSpace(templateCode), versionNo, versionNo, + strings.TrimSpace(boardType), strings.TrimSpace(periodKey), atMS, domain.PeriodStatusCancelled, regionID, atMS, atMS). + Scan(&item.RuntimeFromMS, &item.RuntimeToMS, &snapshotJSON, &item.VersionNo) + if errors.Is(err, sql.ErrNoRows) { + return domain.Runtime{}, false, nil + } + if err != nil { + return domain.Runtime{}, false, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Template); err != nil { + return domain.Runtime{}, false, fmt.Errorf("decode activity template leaderboard runtime version: %w", err) + } + return item, true, nil +} + +// FindActivityTemplateRuntimeForUserTask authorizes historical task access from the immutable progress fact, +// not from the user's current profile region. This survives region migration and activity disable/re-publish. +func (r *Repository) FindActivityTemplateRuntimeForUserTask(ctx context.Context, templateCode string, versionNo int64, userID int64, taskDay string, taskKey string) (domain.Runtime, bool, error) { + if r == nil || r.db == nil { + return domain.Runtime{}, false, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + var item domain.Runtime + var snapshotJSON string + err := r.db.QueryRowContext(ctx, ` + SELECT rv.runtime_from_ms, rv.runtime_to_ms, CAST(v.snapshot_json AS CHAR), rv.version_no + FROM activity_template_task_progress p + JOIN activity_template_runtime_versions rv + ON rv.app_code = p.app_code AND rv.template_id = p.template_id AND rv.version_no = p.version_no + JOIN activity_template_versions v + ON v.app_code = rv.app_code AND v.template_id = rv.template_id AND v.version_no = rv.version_no + WHERE p.app_code = ? AND p.template_code = ? AND p.version_no = ? AND p.user_id = ? AND p.task_day = ? + AND (? = '' OR p.task_key = ?) + LIMIT 1`, appcode.FromContext(ctx), strings.TrimSpace(templateCode), versionNo, userID, + strings.TrimSpace(taskDay), strings.TrimSpace(taskKey), strings.TrimSpace(taskKey)). + Scan(&item.RuntimeFromMS, &item.RuntimeToMS, &snapshotJSON, &item.VersionNo) + if errors.Is(err, sql.ErrNoRows) { + return domain.Runtime{}, false, nil + } + if err != nil { + return domain.Runtime{}, false, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Template); err != nil { + return domain.Runtime{}, false, fmt.Errorf("decode activity template task runtime version: %w", err) + } + return item, true, nil +} + +// FindActivityTemplateRuntimeForExactLeaderboard resolves the public, immutable period identity without +// consulting either current profile region or participant rows. Region targeting controls campaign delivery; +// it is not a privacy boundary for a versioned leaderboard share/notification deep link. +func (r *Repository) FindActivityTemplateRuntimeForExactLeaderboard(ctx context.Context, templateCode string, versionNo int64, boardType string, periodKey string, atMS int64) (domain.Runtime, bool, error) { + if r == nil || r.db == nil { + return domain.Runtime{}, false, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + var item domain.Runtime + var snapshotJSON string + err := r.db.QueryRowContext(ctx, ` + SELECT rv.runtime_from_ms, rv.runtime_to_ms, CAST(v.snapshot_json AS CHAR), rv.version_no + FROM activity_template_rank_periods rp + JOIN activity_template_runtime_versions rv + ON rv.app_code = rp.app_code AND rv.template_id = rp.template_id AND rv.version_no = rp.version_no + JOIN activity_template_versions v + ON v.app_code = rv.app_code AND v.template_id = rv.template_id AND v.version_no = rv.version_no + WHERE rp.app_code = ? AND rp.template_code = ? AND rp.version_no = ? + AND rp.board_type = ? AND rp.period_key = ? AND rp.period_start_ms <= ? AND rp.status <> ? + LIMIT 1`, appcode.FromContext(ctx), strings.TrimSpace(templateCode), versionNo, + strings.TrimSpace(boardType), strings.TrimSpace(periodKey), atMS, domain.PeriodStatusCancelled). + Scan(&item.RuntimeFromMS, &item.RuntimeToMS, &snapshotJSON, &item.VersionNo) + if errors.Is(err, sql.ErrNoRows) { + return domain.Runtime{}, false, nil + } + if err != nil { + return domain.Runtime{}, false, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Template); err != nil { + return domain.Runtime{}, false, fmt.Errorf("decode exact activity template leaderboard runtime: %w", err) + } + return item, true, nil +} + +// ConsumeActivityTemplateGiftEvent performs event idempotency, score updates, task progress and statistics +// outbox writes in one transaction. MQ publication is deliberately outside this transaction and retried by the relay. +func (r *Repository) ConsumeActivityTemplateGiftEvent(ctx context.Context, event domain.GiftEvent, nowMS int64) (domain.EventResult, error) { + if r == nil || r.db == nil { + return domain.EventResult{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + appCode := appcode.FromContext(ctx) + if existing, found, err := r.getActivityTemplateEventResult(ctx, appCode, event.EventID); err != nil || found { + return existing, err + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.EventResult{}, err + } + defer tx.Rollback() + runtime, found, err := findActivityTemplateRuntime(ctx, tx, appCode, "", event.RegionID, event.OccurredAtMS) + if err != nil { + return domain.EventResult{}, err + } + result := domain.EventResult{EventID: event.EventID, Status: domain.EventStatusSkipped} + if !found { + result.SkipReason = "no_active_runtime" + if err := insertActivityTemplateEventConsumption(ctx, tx, appCode, event, result, nowMS); err != nil { + if isMySQLDuplicate(err) { + tx.Rollback() + return r.mustGetActivityTemplateEventResult(ctx, appCode, event.EventID) + } + return domain.EventResult{}, err + } + if err := tx.Commit(); err != nil { + return domain.EventResult{}, err + } + return result, nil + } + allowedGift := false + for _, gift := range runtime.Template.Gifts { + if gift.GiftID == event.GiftID { + allowedGift = true + break + } + } + result.TemplateID = runtime.Template.TemplateID + result.TemplateCode = runtime.Template.TemplateCode + result.VersionNo = runtime.VersionNo + result.TaskDay = utcTaskDay(event.OccurredAtMS) + if !allowedGift { + result.SkipReason = "gift_not_configured" + if err := insertActivityTemplateEventConsumption(ctx, tx, appCode, event, result, nowMS); err != nil { + if isMySQLDuplicate(err) { + tx.Rollback() + return r.mustGetActivityTemplateEventResult(ctx, appCode, event.EventID) + } + return domain.EventResult{}, err + } + if err := tx.Commit(); err != nil { + return domain.EventResult{}, err + } + return result, nil + } + // Each leaderboard owns an independent watermark. Around UTC midnight a daily board may already be + // frozen while the activity total board is still open; rejecting the whole gift would permanently corrupt + // the final total ranking. We still lock daily then total in one fixed order to avoid settlement deadlocks. + acceptance, err := lockActivityTemplateScorePeriods(ctx, tx, runtime, result.TaskDay, nowMS) + if err != nil { + return domain.EventResult{}, err + } + if !acceptance.Daily && !acceptance.Total { + result.SkipReason = acceptance.auditReason() + if err := insertActivityTemplateEventConsumption(ctx, tx, appCode, event, result, nowMS); err != nil { + if isMySQLDuplicate(err) { + tx.Rollback() + return r.mustGetActivityTemplateEventResult(ctx, appCode, event.EventID) + } + return domain.EventResult{}, err + } + if err := tx.Commit(); err != nil { + return domain.EventResult{}, err + } + return result, nil + } + result.Status = domain.EventStatusConsumed + result.SkipReason = acceptance.auditReason() + if err := insertActivityTemplateEventConsumption(ctx, tx, appCode, event, result, nowMS); err != nil { + if isMySQLDuplicate(err) { + tx.Rollback() + return r.mustGetActivityTemplateEventResult(ctx, appCode, event.EventID) + } + return domain.EventResult{}, err + } + dayStart, dayEnd := clippedUTCDay(runtime, event.OccurredAtMS) + if acceptance.Daily { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_user_day_scores ( + app_code, template_id, template_code, version_no, task_day, day_start_ms, day_end_ms, + user_id, score, gift_count, coin_amount, first_scored_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE score = score + VALUES(score), gift_count = gift_count + VALUES(gift_count), + coin_amount = coin_amount + VALUES(coin_amount), + first_scored_at_ms = LEAST(first_scored_at_ms, VALUES(first_scored_at_ms)), + updated_at_ms = VALUES(updated_at_ms)`, + appCode, runtime.Template.TemplateID, runtime.Template.TemplateCode, runtime.VersionNo, result.TaskDay, + dayStart, dayEnd, event.UserID, event.CoinAmount, event.GiftCount, event.CoinAmount, event.OccurredAtMS, nowMS); err != nil { + return domain.EventResult{}, err + } + } + if acceptance.Total { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_user_total_scores ( + app_code, template_id, template_code, version_no, user_id, score, gift_count, coin_amount, first_scored_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE score = score + VALUES(score), gift_count = gift_count + VALUES(gift_count), + coin_amount = coin_amount + VALUES(coin_amount), + first_scored_at_ms = LEAST(first_scored_at_ms, VALUES(first_scored_at_ms)), + updated_at_ms = VALUES(updated_at_ms)`, + appCode, runtime.Template.TemplateID, runtime.Template.TemplateCode, runtime.VersionNo, + event.UserID, event.CoinAmount, event.GiftCount, event.CoinAmount, event.OccurredAtMS, nowMS); err != nil { + return domain.EventResult{}, err + } + } + if err := insertActivityTemplateStatsFact(ctx, tx, statsFactInput{ + SourceKey: event.EventID + ":gift", EventType: activitymq.EventTypeGiftScored, Runtime: runtime, + TaskDay: result.TaskDay, RegionID: event.RegionID, UserID: event.UserID, GiftID: event.GiftID, + GiftCountDelta: event.GiftCount, CoinAmountDelta: event.CoinAmount, OccurredAtMS: event.OccurredAtMS, + }, nowMS); err != nil { + return domain.EventResult{}, err + } + if acceptance.Daily { + for _, task := range runtime.Template.Tasks { + var delta int64 + switch task.TaskType { + case domain.TaskTypeGiftCount: + delta = event.GiftCount + case domain.TaskTypeGiftCoinAmount: + delta = event.CoinAmount + default: + continue + } + progress, appliedDelta, completedDelta, err := applyActivityTemplateTaskProgress(ctx, tx, runtime, result.TaskDay, event.UserID, task, delta, event.RegionID, event.OccurredAtMS, nowMS) + if err != nil { + return domain.EventResult{}, err + } + if appliedDelta == 0 && completedDelta == 0 { + continue + } + if err := insertActivityTemplateStatsFact(ctx, tx, statsFactInput{ + SourceKey: event.EventID + ":task:" + task.TaskKey, EventType: activitymq.EventTypeTaskProgressed, + Runtime: runtime, TaskDay: result.TaskDay, RegionID: event.RegionID, UserID: event.UserID, + TaskKey: task.TaskKey, TaskType: task.TaskType, ProgressDelta: appliedDelta, + CompletedDelta: completedDelta, OccurredAtMS: event.OccurredAtMS, + }, nowMS); err != nil { + return domain.EventResult{}, err + } + _ = progress + } + } + if err := tx.Commit(); err != nil { + return domain.EventResult{}, err + } + return result, nil +} + +type scorePeriodAcceptance struct { + Daily bool + Total bool + DailyReason string + TotalReason string +} + +func (item scorePeriodAcceptance) auditReason() string { + reasons := make([]string, 0, 2) + if !item.Daily { + reasons = append(reasons, "daily:"+item.DailyReason) + } + if !item.Total { + reasons = append(reasons, "total:"+item.TotalReason) + } + return strings.Join(reasons, ";") +} + +func lockActivityTemplateScorePeriods(ctx context.Context, tx *sql.Tx, runtime domain.Runtime, taskDay string, processingMS int64) (scorePeriodAcceptance, error) { + acceptance := scorePeriodAcceptance{} + periods := []struct { + boardType string + periodKey string + }{ + {boardType: domain.BoardTypeDaily, periodKey: taskDay}, + {boardType: domain.BoardTypeTotal, periodKey: "total"}, + } + for _, period := range periods { + var status string + var settleAfterMS int64 + err := tx.QueryRowContext(ctx, ` + SELECT status, settle_after_ms + FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? + FOR UPDATE`, runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, + period.boardType, period.periodKey).Scan(&status, &settleAfterMS) + if errors.Is(err, sql.ErrNoRows) { + return scorePeriodAcceptance{}, xerr.New(xerr.Internal, "activity template rank period is not materialized") + } + if err != nil { + return scorePeriodAcceptance{}, err + } + if settleAfterMS <= 0 { + return scorePeriodAcceptance{}, xerr.New(xerr.Internal, "activity template rank period settlement watermark is missing") + } + accepted, reason := activityTemplateRankPeriodAcceptsEvent(status, settleAfterMS, processingMS) + if period.boardType == domain.BoardTypeDaily { + acceptance.Daily, acceptance.DailyReason = accepted, reason + } else { + acceptance.Total, acceptance.TotalReason = accepted, reason + } + } + return acceptance, nil +} + +func activityTemplateRankPeriodAcceptsEvent(status string, settleAfterMS int64, processingMS int64) (bool, string) { + // The watermark is exclusive: an event that starts processing exactly at settle_after_ms can race the + // due-period worker, so it must be rejected even when it occurred within the activity's [start,end) window. + if settleAfterMS > 0 && processingMS >= settleAfterMS { + return false, "settlement_window_closed" + } + if status != domain.PeriodStatusPending { + return false, "rank_period_closed" + } + return true, "" +} + +func (r *Repository) VisitActivityTemplate(ctx context.Context, command domain.VisitCommand, nowMS int64) (domain.VisitResult, error) { + appCode := appcode.FromContext(ctx) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.VisitResult{}, err + } + defer tx.Rollback() + runtime, found, err := findActivityTemplateRuntime(ctx, tx, appCode, command.TemplateCode, command.RegionID, nowMS) + if err != nil { + return domain.VisitResult{}, err + } + if !found { + return domain.VisitResult{}, xerr.New(xerr.NotFound, "active activity template not found") + } + if runtime.VersionNo != command.VersionNo { + return domain.VisitResult{}, xerr.New(xerr.Conflict, "activity template version changed; refresh before visiting") + } + taskDay := utcTaskDay(nowMS) + result, err := tx.ExecContext(ctx, ` + INSERT IGNORE INTO activity_template_daily_visits ( + app_code, template_id, template_code, version_no, task_day, user_id, region_id, command_id, visited_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + appCode, runtime.Template.TemplateID, runtime.Template.TemplateCode, runtime.VersionNo, + taskDay, command.UserID, command.RegionID, command.CommandID, nowMS) + if err != nil { + return domain.VisitResult{}, err + } + affected, _ := result.RowsAffected() + firstVisit := affected == 1 + if !firstVisit { + // INSERT IGNORE 同时覆盖自然键和 command_id 唯一键。自然日重复访问是正常幂等;但若同一个 + // command_id 已绑定到别的用户/模版版本,必须报冲突,不能把跨请求键碰撞伪装成“已访问”。 + var existingTemplateID, existingTaskDay string + var existingVersion, existingUserID, existingRegionID int64 + err := tx.QueryRowContext(ctx, ` + SELECT template_id, version_no, task_day, user_id, region_id FROM activity_template_daily_visits + WHERE app_code = ? AND command_id = ?`, appCode, command.CommandID). + Scan(&existingTemplateID, &existingVersion, &existingTaskDay, &existingUserID, &existingRegionID) + if err != nil && !errors.Is(err, sql.ErrNoRows) { + return domain.VisitResult{}, err + } + if err == nil && (existingTemplateID != runtime.Template.TemplateID || existingVersion != runtime.VersionNo || existingTaskDay != taskDay || existingUserID != command.UserID || existingRegionID != command.RegionID) { + return domain.VisitResult{}, xerr.New(xerr.Conflict, "activity visit command already belongs to another visit") + } + } + if firstVisit { + if err := insertActivityTemplateStatsFact(ctx, tx, statsFactInput{ + SourceKey: command.CommandID + ":visited", EventType: activitymq.EventTypeActivityVisited, + Runtime: runtime, TaskDay: taskDay, RegionID: command.RegionID, UserID: command.UserID, + VisitCountDelta: 1, OccurredAtMS: nowMS, AttributionAtMS: nowMS, + }, nowMS); err != nil { + return domain.VisitResult{}, err + } + for _, task := range runtime.Template.Tasks { + if task.TaskType != domain.TaskTypeDailyVisit { + continue + } + _, appliedDelta, completedDelta, err := applyActivityTemplateTaskProgress(ctx, tx, runtime, taskDay, command.UserID, task, 1, command.RegionID, nowMS, nowMS) + if err != nil { + return domain.VisitResult{}, err + } + if err := insertActivityTemplateStatsFact(ctx, tx, statsFactInput{ + SourceKey: command.CommandID + ":visit:" + task.TaskKey, EventType: activitymq.EventTypeTaskProgressed, + Runtime: runtime, TaskDay: taskDay, RegionID: command.RegionID, UserID: command.UserID, + TaskKey: task.TaskKey, TaskType: task.TaskType, ProgressDelta: appliedDelta, + CompletedDelta: completedDelta, OccurredAtMS: nowMS, + }, nowMS); err != nil { + return domain.VisitResult{}, err + } + } + } + tasks, err := listActivityTemplateTaskProgress(ctx, tx, runtime, command.UserID, taskDay) + if err != nil { + return domain.VisitResult{}, err + } + if err := tx.Commit(); err != nil { + return domain.VisitResult{}, err + } + return domain.VisitResult{Runtime: runtime, Tasks: tasks, FirstVisit: firstVisit}, nil +} + +func (r *Repository) ListActivityTemplateTaskProgress(ctx context.Context, runtime domain.Runtime, userID int64, taskDay string) ([]domain.TaskProgress, error) { + return listActivityTemplateTaskProgress(ctx, r.db, runtime, userID, taskDay) +} + +func (r *Repository) PrepareActivityTemplateTaskClaim(ctx context.Context, runtime domain.Runtime, command domain.ClaimCommand, nowMS int64) (domain.TaskClaim, error) { + appCode := appcode.FromContext(ctx) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.TaskClaim{}, err + } + defer tx.Rollback() + var progress domain.TaskProgress + var progressRewardJSON string + err = tx.QueryRowContext(ctx, ` + SELECT app_code, template_id, template_code, version_no, task_day, user_id, task_key, task_type, + first_region_id, target_value, progress_value, reward_resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), sort_order, status, completed_at_ms, + earning_region_id, attribution_at_ms, claimed_at_ms, updated_at_ms + FROM activity_template_task_progress + WHERE app_code = ? AND template_id = ? AND version_no = ? AND task_day = ? AND user_id = ? AND task_key = ? + FOR UPDATE`, appCode, runtime.Template.TemplateID, runtime.VersionNo, command.TaskDay, command.UserID, command.TaskKey). + Scan(&progress.AppCode, &progress.TemplateID, &progress.TemplateCode, &progress.VersionNo, &progress.TaskDay, + &progress.UserID, &progress.TaskKey, &progress.TaskType, &progress.FirstRegionID, &progress.TargetValue, &progress.ProgressValue, + &progress.RewardResourceGroupID, &progress.RewardSnapshot.SnapshotID, &progressRewardJSON, + &progress.SortOrder, &progress.Status, &progress.CompletedAtMS, &progress.EarningRegionID, &progress.AttributionAtMS, + &progress.ClaimedAtMS, &progress.UpdatedAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.TaskClaim{}, xerr.New(xerr.Conflict, "activity task is not completed") + } + if err != nil { + return domain.TaskClaim{}, err + } + if err := decodeActivityTemplateRewardSnapshot(progressRewardJSON, &progress.RewardSnapshot); err != nil { + return domain.TaskClaim{}, err + } + if progress.Status != domain.TaskStatusCompleted && progress.Status != domain.TaskStatusClaimed { + return domain.TaskClaim{}, xerr.New(xerr.Conflict, "activity task is not completed") + } + if existing, found, err := getActivityTemplateTaskClaimByNaturalKey(ctx, tx, appCode, runtime.Template.TemplateID, runtime.VersionNo, command.TaskDay, command.UserID, command.TaskKey, true); err != nil { + return domain.TaskClaim{}, err + } else if found { + if existing.Status != domain.ClaimStatusGranted { + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_task_claims + SET status = ?, failure_reason = '', attempt_count = attempt_count + 1, updated_at_ms = ? + WHERE app_code = ? AND claim_id = ?`, domain.ClaimStatusRunning, nowMS, appCode, existing.ClaimID); err != nil { + return domain.TaskClaim{}, err + } + existing.Status = domain.ClaimStatusRunning + existing.FailureReason = "" + existing.AttemptCount++ + existing.UpdatedAtMS = nowMS + } + if err := tx.Commit(); err != nil { + return domain.TaskClaim{}, err + } + return existing, nil + } + claim := domain.TaskClaim{ + AppCode: appCode, ClaimID: idgen.New("atclaim"), CommandID: command.CommandID, + TemplateID: runtime.Template.TemplateID, TemplateCode: runtime.Template.TemplateCode, VersionNo: runtime.VersionNo, + TaskDay: command.TaskDay, TaskKey: command.TaskKey, UserID: command.UserID, + RewardResourceGroupID: progress.RewardResourceGroupID, + RewardSnapshot: progress.RewardSnapshot, + EarningRegionID: progress.EarningRegionID, AttributionAtMS: progress.AttributionAtMS, + WalletCommandID: stableRuntimeID("atask", fmt.Sprintf("%s:%s:%d:%s:%d:%s", appCode, runtime.Template.TemplateID, runtime.VersionNo, command.TaskDay, command.UserID, command.TaskKey)), + Status: domain.ClaimStatusRunning, AttemptCount: 1, CreatedAtMS: nowMS, UpdatedAtMS: nowMS, + } + rewardSnapshotJSON, err := encodeActivityTemplateRewardSnapshot(claim.RewardSnapshot) + if err != nil { + return domain.TaskClaim{}, err + } + _, err = tx.ExecContext(ctx, ` + INSERT INTO activity_template_task_claims ( + app_code, claim_id, command_id, template_id, template_code, version_no, task_day, task_key, user_id, + earning_region_id, attribution_at_ms, reward_resource_group_id, reward_snapshot_id, reward_snapshot_json, wallet_command_id, + status, attempt_count, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CAST(? AS JSON), ?, ?, ?, ?, ?)`, + claim.AppCode, claim.ClaimID, claim.CommandID, claim.TemplateID, claim.TemplateCode, claim.VersionNo, + claim.TaskDay, claim.TaskKey, claim.UserID, claim.EarningRegionID, claim.AttributionAtMS, + claim.RewardResourceGroupID, claim.RewardSnapshot.SnapshotID, + rewardSnapshotJSON, claim.WalletCommandID, + claim.Status, claim.AttemptCount, nowMS, nowMS) + if err != nil { + if isMySQLDuplicate(err) { + return domain.TaskClaim{}, xerr.New(xerr.Conflict, "activity task claim command already belongs to another task") + } + return domain.TaskClaim{}, err + } + if err := tx.Commit(); err != nil { + return domain.TaskClaim{}, err + } + return claim, nil +} + +func (r *Repository) MarkActivityTemplateTaskClaimGranted(ctx context.Context, claimID string, walletGrantID string, nowMS int64) (domain.TaskClaim, error) { + appCode := appcode.FromContext(ctx) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.TaskClaim{}, err + } + defer tx.Rollback() + claim, found, err := getActivityTemplateTaskClaimByID(ctx, tx, appCode, claimID, true) + if err != nil { + return domain.TaskClaim{}, err + } + if !found { + return domain.TaskClaim{}, xerr.New(xerr.NotFound, "activity task claim not found") + } + if claim.Status != domain.ClaimStatusGranted { + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_task_claims + SET status = ?, wallet_grant_id = ?, failure_reason = '', granted_at_ms = ?, updated_at_ms = ? + WHERE app_code = ? AND claim_id = ?`, + domain.ClaimStatusGranted, walletGrantID, nowMS, nowMS, appCode, claimID); err != nil { + return domain.TaskClaim{}, err + } + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_task_progress + SET status = ?, claimed_at_ms = ?, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND task_day = ? AND user_id = ? AND task_key = ?`, + domain.TaskStatusClaimed, nowMS, nowMS, appCode, claim.TemplateID, claim.VersionNo, claim.TaskDay, claim.UserID, claim.TaskKey); err != nil { + return domain.TaskClaim{}, err + } + version, err := getActivityTemplateRuntimeByIdentity(ctx, tx, appCode, claim.TemplateID, claim.VersionNo) + if err != nil { + return domain.TaskClaim{}, err + } + if err := insertActivityTemplateStatsFact(ctx, tx, statsFactInput{ + SourceKey: claim.ClaimID + ":claimed", EventType: activitymq.EventTypeTaskClaimed, Runtime: version, + TaskDay: claim.TaskDay, RegionID: claim.EarningRegionID, UserID: claim.UserID, TaskKey: claim.TaskKey, + TaskType: taskTypeFromRuntime(version, claim.TaskKey), ClaimedDelta: 1, OccurredAtMS: nowMS, + AttributionAtMS: claim.AttributionAtMS, + }, nowMS); err != nil { + return domain.TaskClaim{}, err + } + claim.Status = domain.ClaimStatusGranted + claim.WalletGrantID = walletGrantID + claim.FailureReason = "" + claim.GrantedAtMS = nowMS + claim.UpdatedAtMS = nowMS + } + if err := tx.Commit(); err != nil { + return domain.TaskClaim{}, err + } + return claim, nil +} + +func (r *Repository) MarkActivityTemplateTaskClaimFailed(ctx context.Context, claimID string, reason string, nowMS int64) error { + _, err := r.db.ExecContext(ctx, ` + UPDATE activity_template_task_claims SET status = ?, failure_reason = ?, updated_at_ms = ? + WHERE app_code = ? AND claim_id = ? AND status <> ?`, + domain.ClaimStatusFailed, truncateActivityTemplateRuntimeError(reason), nowMS, + appcode.FromContext(ctx), claimID, domain.ClaimStatusGranted) + return err +} + +func (r *Repository) ListActivityTemplateTaskClaims(ctx context.Context, query domain.TaskClaimQuery) ([]domain.TaskClaim, int64, error) { + where := []string{"app_code = ?", "template_id = ?"} + args := []any{appcode.FromContext(ctx), strings.TrimSpace(query.TemplateID)} + if query.VersionNo > 0 { + where, args = append(where, "version_no = ?"), append(args, query.VersionNo) + } + if query.TaskDay != "" { + where, args = append(where, "task_day = ?"), append(args, strings.TrimSpace(query.TaskDay)) + } + if query.TaskKey != "" { + where, args = append(where, "task_key = ?"), append(args, strings.TrimSpace(query.TaskKey)) + } + if query.UserID > 0 { + where, args = append(where, "user_id = ?"), append(args, query.UserID) + } + if query.Status != "" { + where, args = append(where, "status = ?"), append(args, strings.TrimSpace(query.Status)) + } + whereSQL := " WHERE " + strings.Join(where, " AND ") + var total int64 + if err := r.db.QueryRowContext(ctx, "SELECT COUNT(*) FROM activity_template_task_claims"+whereSQL, args...).Scan(&total); err != nil { + return nil, 0, err + } + page, pageSize := normalizeRuntimePage(query.Page, query.PageSize) + rows, err := r.db.QueryContext(ctx, activityTemplateTaskClaimSelect+whereSQL+` + ORDER BY updated_at_ms DESC, claim_id DESC LIMIT ? OFFSET ?`, append(args, int(pageSize), int((page-1)*pageSize))...) + if err != nil { + return nil, 0, err + } + defer rows.Close() + items := make([]domain.TaskClaim, 0) + for rows.Next() { + item, _, err := scanActivityTemplateTaskClaim(rows) + if err != nil { + return nil, 0, err + } + items = append(items, item) + } + return items, total, rows.Err() +} + +func (r *Repository) ClaimActivityTemplateTaskClaimForRetry(ctx context.Context, templateID string, claimID string, nowMS int64) (domain.TaskClaim, error) { + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.TaskClaim{}, err + } + defer tx.Rollback() + claim, found, err := getActivityTemplateTaskClaimByID(ctx, tx, appcode.FromContext(ctx), strings.TrimSpace(claimID), true) + if err != nil { + return domain.TaskClaim{}, err + } + if !found || claim.TemplateID != strings.TrimSpace(templateID) { + return domain.TaskClaim{}, xerr.New(xerr.NotFound, "activity template task claim not found") + } + if claim.Status != domain.ClaimStatusFailed { + return domain.TaskClaim{}, xerr.New(xerr.Conflict, "only failed activity template task claims can be retried manually") + } + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_task_claims + SET status = ?, failure_reason = '', attempt_count = attempt_count + 1, updated_at_ms = ? + WHERE app_code = ? AND claim_id = ? AND status = ?`, + domain.ClaimStatusRunning, nowMS, appcode.FromContext(ctx), claim.ClaimID, domain.ClaimStatusFailed); err != nil { + return domain.TaskClaim{}, err + } + claim.Status = domain.ClaimStatusRunning + claim.FailureReason = "" + claim.AttemptCount++ + claim.UpdatedAtMS = nowMS + if err := tx.Commit(); err != nil { + return domain.TaskClaim{}, err + } + return claim, nil +} + +func findActivityTemplateRuntime(ctx context.Context, q activityTemplateQuerier, appCode string, templateCode string, regionID int64, atMS int64) (domain.Runtime, bool, error) { + args := []any{appCode, atMS, atMS, atMS, atMS, regionID} + codeClause := "" + if templateCode != "" { + codeClause = " AND rv.template_code = ?" + args = append(args, templateCode) + } + rows, err := q.QueryContext(ctx, ` + SELECT rv.template_id, rv.template_code, rv.version_no, rv.runtime_from_ms, rv.runtime_to_ms, + CAST(v.snapshot_json AS CHAR) + FROM activity_template_runtime_versions rv + JOIN activity_template_versions v + ON v.app_code = rv.app_code AND v.template_id = rv.template_id AND v.version_no = rv.version_no + WHERE rv.app_code = ? AND rv.start_ms <= ? AND rv.end_ms > ? + AND rv.runtime_from_ms <= ? AND (rv.runtime_to_ms = 0 OR rv.runtime_to_ms > ?) + AND (rv.all_regions = TRUE OR EXISTS ( + SELECT 1 FROM activity_template_runtime_regions rr + WHERE rr.app_code = rv.app_code AND rr.template_id = rv.template_id + AND rr.version_no = rv.version_no AND rr.region_id = ? + ))`+codeClause+` + ORDER BY rv.runtime_from_ms DESC, rv.version_no DESC + LIMIT 2`, args...) + if err != nil { + return domain.Runtime{}, false, err + } + defer rows.Close() + items := make([]domain.Runtime, 0, 2) + for rows.Next() { + var item domain.Runtime + var storedCode, snapshotJSON string + if err := rows.Scan(&item.Template.TemplateID, &storedCode, &item.VersionNo, &item.RuntimeFromMS, &item.RuntimeToMS, &snapshotJSON); err != nil { + return domain.Runtime{}, false, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Template); err != nil { + return domain.Runtime{}, false, fmt.Errorf("decode activity template runtime version: %w", err) + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + return domain.Runtime{}, false, err + } + if len(items) == 0 { + return domain.Runtime{}, false, nil + } + if len(items) > 1 { + return domain.Runtime{}, false, xerr.New(xerr.Conflict, "multiple activity template runtime versions match the same region and time") + } + return items[0], true, nil +} + +func getActivityTemplateRuntimeByIdentity(ctx context.Context, q activityTemplateQuerier, appCode string, templateID string, versionNo int64) (domain.Runtime, error) { + var item domain.Runtime + var snapshotJSON string + err := q.QueryRowContext(ctx, ` + SELECT rv.runtime_from_ms, rv.runtime_to_ms, CAST(v.snapshot_json AS CHAR) + FROM activity_template_runtime_versions rv + JOIN activity_template_versions v ON v.app_code = rv.app_code AND v.template_id = rv.template_id AND v.version_no = rv.version_no + WHERE rv.app_code = ? AND rv.template_id = ? AND rv.version_no = ?`, appCode, templateID, versionNo). + Scan(&item.RuntimeFromMS, &item.RuntimeToMS, &snapshotJSON) + if errors.Is(err, sql.ErrNoRows) { + return domain.Runtime{}, xerr.New(xerr.NotFound, "activity template runtime version not found") + } + if err != nil { + return domain.Runtime{}, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Template); err != nil { + return domain.Runtime{}, err + } + item.VersionNo = versionNo + return item, nil +} + +func insertActivityTemplateEventConsumption(ctx context.Context, tx *sql.Tx, appCode string, event domain.GiftEvent, result domain.EventResult, nowMS int64) error { + _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_event_consumption ( + app_code, source_event_id, event_type, template_id, template_code, version_no, user_id, + region_id, task_day, status, skip_reason, occurred_at_ms, consumed_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + appCode, event.EventID, runtimeEventTypeGift, result.TemplateID, result.TemplateCode, result.VersionNo, + event.UserID, event.RegionID, result.TaskDay, result.Status, result.SkipReason, event.OccurredAtMS, nowMS) + return err +} + +func (r *Repository) getActivityTemplateEventResult(ctx context.Context, appCode string, eventID string) (domain.EventResult, bool, error) { + var item domain.EventResult + item.EventID = eventID + err := r.db.QueryRowContext(ctx, ` + SELECT status, skip_reason, template_id, template_code, version_no, task_day + FROM activity_template_event_consumption WHERE app_code = ? AND source_event_id = ?`, appCode, eventID). + Scan(&item.Status, &item.SkipReason, &item.TemplateID, &item.TemplateCode, &item.VersionNo, &item.TaskDay) + if errors.Is(err, sql.ErrNoRows) { + return domain.EventResult{}, false, nil + } + return item, err == nil, err +} + +func (r *Repository) mustGetActivityTemplateEventResult(ctx context.Context, appCode string, eventID string) (domain.EventResult, error) { + item, found, err := r.getActivityTemplateEventResult(ctx, appCode, eventID) + if err != nil { + return domain.EventResult{}, err + } + if !found { + return domain.EventResult{}, xerr.New(xerr.Conflict, "activity template event idempotency race") + } + return item, nil +} + +func applyActivityTemplateTaskProgress(ctx context.Context, tx *sql.Tx, runtime domain.Runtime, taskDay string, userID int64, task domain.Task, delta int64, regionID int64, occurredAtMS int64, nowMS int64) (domain.TaskProgress, int64, int64, error) { + appCode := runtime.Template.AppCode + var item domain.TaskProgress + var rewardSnapshotJSON string + err := tx.QueryRowContext(ctx, ` + SELECT app_code, template_id, template_code, version_no, task_day, user_id, task_key, task_type, + first_region_id, target_value, progress_value, reward_resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), sort_order, status, completed_at_ms, + earning_region_id, attribution_at_ms, claimed_at_ms, updated_at_ms + FROM activity_template_task_progress + WHERE app_code = ? AND template_id = ? AND version_no = ? AND task_day = ? AND user_id = ? AND task_key = ? + FOR UPDATE`, appCode, runtime.Template.TemplateID, runtime.VersionNo, taskDay, userID, task.TaskKey). + Scan(&item.AppCode, &item.TemplateID, &item.TemplateCode, &item.VersionNo, &item.TaskDay, &item.UserID, + &item.TaskKey, &item.TaskType, &item.FirstRegionID, &item.TargetValue, &item.ProgressValue, &item.RewardResourceGroupID, + &item.RewardSnapshot.SnapshotID, &rewardSnapshotJSON, &item.SortOrder, &item.Status, + &item.CompletedAtMS, &item.EarningRegionID, &item.AttributionAtMS, &item.ClaimedAtMS, &item.UpdatedAtMS) + if err != nil && !errors.Is(err, sql.ErrNoRows) { + return domain.TaskProgress{}, 0, 0, err + } + if errors.Is(err, sql.ErrNoRows) { + item = domain.TaskProgress{ + AppCode: appCode, TemplateID: runtime.Template.TemplateID, TemplateCode: runtime.Template.TemplateCode, + VersionNo: runtime.VersionNo, TaskDay: taskDay, UserID: userID, TaskKey: task.TaskKey, TaskType: task.TaskType, + TargetValue: task.TargetValue, RewardResourceGroupID: task.RewardResourceGroupID, SortOrder: task.SortOrder, + RewardSnapshot: task.RewardSnapshot, Status: domain.TaskStatusInProgress, FirstRegionID: regionID, + } + } else if err := decodeActivityTemplateRewardSnapshot(rewardSnapshotJSON, &item.RewardSnapshot); err != nil { + return domain.TaskProgress{}, 0, 0, err + } + if item.Status == domain.TaskStatusClaimed { + return item, 0, 0, nil + } + if item.FirstRegionID <= 0 { + item.FirstRegionID = regionID + } + wasCompleted := item.Status == domain.TaskStatusCompleted + previousProgress := item.ProgressValue + item.ProgressValue += delta + if item.ProgressValue >= item.TargetValue { + item.ProgressValue = item.TargetValue + item.Status = domain.TaskStatusCompleted + if item.CompletedAtMS == 0 { + item.CompletedAtMS = occurredAtMS + item.EarningRegionID = regionID + item.AttributionAtMS = occurredAtMS + } + } + item.UpdatedAtMS = nowMS + rewardSnapshotJSON, err = encodeActivityTemplateRewardSnapshot(item.RewardSnapshot) + if err != nil { + return domain.TaskProgress{}, 0, 0, err + } + _, err = tx.ExecContext(ctx, ` + INSERT INTO activity_template_task_progress ( + app_code, template_id, template_code, version_no, task_day, user_id, first_region_id, task_key, task_type, + target_value, progress_value, reward_resource_group_id, reward_snapshot_id, reward_snapshot_json, + sort_order, status, completed_at_ms, earning_region_id, attribution_at_ms, claimed_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CAST(? AS JSON), ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE progress_value = VALUES(progress_value), status = VALUES(status), + first_region_id = IF(first_region_id = 0, VALUES(first_region_id), first_region_id), + completed_at_ms = VALUES(completed_at_ms), earning_region_id = VALUES(earning_region_id), + attribution_at_ms = VALUES(attribution_at_ms), updated_at_ms = VALUES(updated_at_ms)`, + item.AppCode, item.TemplateID, item.TemplateCode, item.VersionNo, item.TaskDay, item.UserID, + item.FirstRegionID, item.TaskKey, item.TaskType, item.TargetValue, item.ProgressValue, item.RewardResourceGroupID, + item.RewardSnapshot.SnapshotID, rewardSnapshotJSON, item.SortOrder, item.Status, + item.CompletedAtMS, item.EarningRegionID, item.AttributionAtMS, item.ClaimedAtMS, item.UpdatedAtMS) + if err != nil { + return domain.TaskProgress{}, 0, 0, err + } + appliedDelta := item.ProgressValue - previousProgress + completedDelta := int64(0) + if !wasCompleted && item.Status == domain.TaskStatusCompleted { + completedDelta = 1 + } + return item, appliedDelta, completedDelta, nil +} + +func listActivityTemplateTaskProgress(ctx context.Context, q activityTemplateQuerier, runtime domain.Runtime, userID int64, taskDay string) ([]domain.TaskProgress, error) { + rows, err := q.QueryContext(ctx, ` + SELECT app_code, template_id, template_code, version_no, task_day, user_id, task_key, task_type, + first_region_id, target_value, progress_value, reward_resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), sort_order, status, completed_at_ms, + earning_region_id, attribution_at_ms, claimed_at_ms, updated_at_ms + FROM activity_template_task_progress + WHERE app_code = ? AND template_id = ? AND version_no = ? AND task_day = ? AND user_id = ?`, + runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, taskDay, userID) + if err != nil { + return nil, err + } + defer rows.Close() + byKey := make(map[string]domain.TaskProgress, len(runtime.Template.Tasks)) + for rows.Next() { + var item domain.TaskProgress + var rewardSnapshotJSON string + if err := rows.Scan(&item.AppCode, &item.TemplateID, &item.TemplateCode, &item.VersionNo, &item.TaskDay, + &item.UserID, &item.TaskKey, &item.TaskType, &item.FirstRegionID, &item.TargetValue, &item.ProgressValue, + &item.RewardResourceGroupID, &item.RewardSnapshot.SnapshotID, &rewardSnapshotJSON, + &item.SortOrder, &item.Status, &item.CompletedAtMS, &item.EarningRegionID, &item.AttributionAtMS, + &item.ClaimedAtMS, &item.UpdatedAtMS); err != nil { + return nil, err + } + if err := decodeActivityTemplateRewardSnapshot(rewardSnapshotJSON, &item.RewardSnapshot); err != nil { + return nil, err + } + byKey[item.TaskKey] = item + } + if err := rows.Err(); err != nil { + return nil, err + } + items := make([]domain.TaskProgress, 0, len(runtime.Template.Tasks)) + for _, task := range runtime.Template.Tasks { + item, ok := byKey[task.TaskKey] + if !ok { + item = domain.TaskProgress{ + AppCode: runtime.Template.AppCode, TemplateID: runtime.Template.TemplateID, + TemplateCode: runtime.Template.TemplateCode, VersionNo: runtime.VersionNo, TaskDay: taskDay, + UserID: userID, TaskKey: task.TaskKey, TaskType: task.TaskType, TargetValue: task.TargetValue, + RewardResourceGroupID: task.RewardResourceGroupID, RewardSnapshot: task.RewardSnapshot, + SortOrder: task.SortOrder, Status: domain.TaskStatusInProgress, + } + } else if item.RewardSnapshot.SnapshotID == "" { + item.RewardSnapshot = task.RewardSnapshot + } + items = append(items, item) + } + return items, nil +} + +type statsFactInput struct { + SourceKey string + EventType string + Runtime domain.Runtime + TaskDay string + RegionID int64 + UserID int64 + GiftID string + TaskKey string + TaskType string + GiftCountDelta int64 + CoinAmountDelta int64 + ProgressDelta int64 + CompletedDelta int64 + ClaimedDelta int64 + VisitCountDelta int64 + OccurredAtMS int64 + AttributionAtMS int64 +} + +func insertActivityTemplateStatsFact(ctx context.Context, tx *sql.Tx, input statsFactInput, nowMS int64) error { + outboxID := stableRuntimeID("atstat", input.Runtime.Template.AppCode+":"+input.Runtime.Template.TemplateID+":"+fmt.Sprint(input.Runtime.VersionNo)+":"+input.SourceKey) + payload, err := activitymq.EncodeActivityTemplateFactMessage(activitymq.ActivityTemplateFactMessage{ + AppCode: input.Runtime.Template.AppCode, EventID: outboxID, EventType: input.EventType, + TemplateID: input.Runtime.Template.TemplateID, TemplateCode: input.Runtime.Template.TemplateCode, + PublishedVersion: input.Runtime.VersionNo, StatDay: input.TaskDay, RegionID: input.RegionID, UserID: input.UserID, + GiftID: input.GiftID, TaskKey: input.TaskKey, TaskType: input.TaskType, + GiftCountDelta: input.GiftCountDelta, CoinAmountDelta: input.CoinAmountDelta, + ProgressDelta: input.ProgressDelta, CompletedDelta: input.CompletedDelta, ClaimedDelta: input.ClaimedDelta, + VisitCountDelta: input.VisitCountDelta, OccurredAtMS: input.OccurredAtMS, AttributionAtMS: input.AttributionAtMS, + }) + if err != nil { + return err + } + _, err = tx.ExecContext(ctx, ` + INSERT INTO activity_template_stats_outbox ( + outbox_id, app_code, event_type, payload, status, next_retry_at_ms, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE outbox_id = outbox_id`, + outboxID, input.Runtime.Template.AppCode, input.EventType, payload, outboxStatusPending, nowMS, nowMS, nowMS) + return err +} + +func getActivityTemplateTaskClaimByNaturalKey(ctx context.Context, q activityTemplateQuerier, appCode, templateID string, versionNo int64, taskDay string, userID int64, taskKey string, forUpdate bool) (domain.TaskClaim, bool, error) { + query := activityTemplateTaskClaimSelect + ` WHERE app_code = ? AND template_id = ? AND version_no = ? AND task_day = ? AND user_id = ? AND task_key = ?` + if forUpdate { + query += " FOR UPDATE" + } + return scanActivityTemplateTaskClaim(q.QueryRowContext(ctx, query, appCode, templateID, versionNo, taskDay, userID, taskKey)) +} + +func getActivityTemplateTaskClaimByID(ctx context.Context, q activityTemplateQuerier, appCode, claimID string, forUpdate bool) (domain.TaskClaim, bool, error) { + query := activityTemplateTaskClaimSelect + ` WHERE app_code = ? AND claim_id = ?` + if forUpdate { + query += " FOR UPDATE" + } + return scanActivityTemplateTaskClaim(q.QueryRowContext(ctx, query, appCode, claimID)) +} + +const activityTemplateTaskClaimSelect = `SELECT app_code, claim_id, command_id, template_id, template_code, version_no, task_day, task_key, user_id, + earning_region_id, attribution_at_ms, reward_resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), wallet_command_id, wallet_grant_id, status, failure_reason, + attempt_count, created_at_ms, updated_at_ms, granted_at_ms +FROM activity_template_task_claims` + +func scanActivityTemplateTaskClaim(row activityTemplateScanner) (domain.TaskClaim, bool, error) { + var item domain.TaskClaim + var rewardSnapshotJSON string + err := row.Scan(&item.AppCode, &item.ClaimID, &item.CommandID, &item.TemplateID, &item.TemplateCode, + &item.VersionNo, &item.TaskDay, &item.TaskKey, &item.UserID, &item.EarningRegionID, &item.AttributionAtMS, &item.RewardResourceGroupID, + &item.RewardSnapshot.SnapshotID, &rewardSnapshotJSON, &item.WalletCommandID, &item.WalletGrantID, + &item.Status, &item.FailureReason, &item.AttemptCount, + &item.CreatedAtMS, &item.UpdatedAtMS, &item.GrantedAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.TaskClaim{}, false, nil + } + if err == nil { + err = decodeActivityTemplateRewardSnapshot(rewardSnapshotJSON, &item.RewardSnapshot) + } + return item, err == nil, err +} + +func encodeActivityTemplateRewardSnapshot(item domain.RewardSnapshot) (string, error) { + if item.SnapshotID == "" { + return "null", nil + } + value, err := json.Marshal(item) + return string(value), err +} + +func decodeActivityTemplateRewardSnapshot(raw string, item *domain.RewardSnapshot) error { + if item == nil || strings.TrimSpace(raw) == "" || strings.TrimSpace(raw) == "null" { + return nil + } + return json.Unmarshal([]byte(raw), item) +} + +func taskTypeFromRuntime(runtime domain.Runtime, taskKey string) string { + for _, task := range runtime.Template.Tasks { + if task.TaskKey == taskKey { + return task.TaskType + } + } + return "" +} + +func utcTaskDay(ms int64) string { return time.UnixMilli(ms).UTC().Format("2006-01-02") } + +func utcDayStart(ms int64) int64 { + t := time.UnixMilli(ms).UTC() + return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.UTC).UnixMilli() +} + +func clippedUTCDay(runtime domain.Runtime, ms int64) (int64, int64) { + start := maxInt64(utcDayStart(ms), runtime.RuntimeFromMS) + end := minInt64(utcDayStart(ms)+int64(24*time.Hour/time.Millisecond), runtime.Template.EndMS) + if runtime.RuntimeToMS > 0 { + end = minInt64(end, runtime.RuntimeToMS) + } + return start, end +} + +func stableRuntimeID(prefix, value string) string { + sum := sha256.Sum256([]byte(value)) + return prefix + "_" + hex.EncodeToString(sum[:]) +} + +func truncateActivityTemplateRuntimeError(value string) string { + value = strings.TrimSpace(value) + if len(value) > 512 { + return value[:512] + } + return value +} + +func minInt64(left, right int64) int64 { + if left < right { + return left + } + return right +} + +func maxInt64(left, right int64) int64 { + if left > right { + return left + } + return right +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_runtime_schema.go b/services/activity-service/internal/storage/mysql/activity_template_runtime_schema.go new file mode 100644 index 00000000..836ae27d --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_runtime_schema.go @@ -0,0 +1,329 @@ +package mysql + +import "context" + +// ensureActivityTemplateRuntimeTables mirrors migration 011 for explicitly enabled local/test auto-migrate. +func (r *Repository) ensureActivityTemplateRuntimeTables(ctx context.Context) error { + statements := []string{ + `CREATE TABLE IF NOT EXISTS activity_template_runtime_versions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + start_ms BIGINT NOT NULL, + end_ms BIGINT NOT NULL, + all_regions BOOLEAN NOT NULL DEFAULT FALSE, + runtime_from_ms BIGINT NOT NULL, + runtime_to_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_runtime_current (app_code, template_code, start_ms, end_ms, runtime_from_ms, runtime_to_ms), + KEY idx_activity_template_runtime_due (app_code, end_ms, runtime_to_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变运行版本启停窗口'`, + `CREATE TABLE IF NOT EXISTS activity_template_runtime_regions ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + version_no BIGINT NOT NULL, + region_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, region_id), + KEY idx_activity_template_runtime_region (app_code, region_id, template_id, version_no) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行版本区域快照'`, + `CREATE TABLE IF NOT EXISTS activity_template_event_consumption ( + app_code VARCHAR(32) NOT NULL, + source_event_id VARCHAR(128) NOT NULL, + event_type VARCHAR(64) NOT NULL, + template_id VARCHAR(96) NOT NULL DEFAULT '', + template_code VARCHAR(64) NOT NULL DEFAULT '', + version_no BIGINT NOT NULL DEFAULT 0, + user_id BIGINT NOT NULL DEFAULT 0, + region_id BIGINT NOT NULL DEFAULT 0, + task_day VARCHAR(10) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + skip_reason VARCHAR(128) NOT NULL DEFAULT '', + occurred_at_ms BIGINT NOT NULL, + consumed_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, source_event_id), + KEY idx_activity_template_event_template (app_code, template_id, version_no, occurred_at_ms), + KEY idx_activity_template_event_status (app_code, status, consumed_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版运行事件幂等事实'`, + `CREATE TABLE IF NOT EXISTS activity_template_user_day_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + day_start_ms BIGINT NOT NULL, + day_end_ms BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + KEY idx_activity_template_day_rank (app_code, template_id, version_no, task_day, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 UTC 日榜实时分数'`, + `CREATE TABLE IF NOT EXISTS activity_template_user_total_scores ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + first_scored_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, user_id), + KEY idx_activity_template_total_rank (app_code, template_id, version_no, score DESC, first_scored_at_ms, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版活动总榜实时分数'`, + `CREATE TABLE IF NOT EXISTS activity_template_daily_visits ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + command_id VARCHAR(128) NOT NULL, + visited_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id), + UNIQUE KEY uk_activity_template_visit_command (app_code, command_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版 daily_visit 自然幂等事实'`, + `CREATE TABLE IF NOT EXISTS activity_template_task_progress ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + user_id BIGINT NOT NULL, + first_region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(64) NOT NULL, + task_type VARCHAR(32) NOT NULL, + target_value BIGINT NOT NULL, + progress_value BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + sort_order INT NOT NULL DEFAULT 0, + status VARCHAR(24) NOT NULL, + completed_at_ms BIGINT NOT NULL DEFAULT 0, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + claimed_at_ms BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, task_day, user_id, task_key), + KEY idx_activity_template_task_data (app_code, template_id, version_no, task_day, task_key, status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版用户每日任务进度'`, + `CREATE TABLE IF NOT EXISTS activity_template_task_claims ( + app_code VARCHAR(32) NOT NULL, + claim_id VARCHAR(96) NOT NULL, + command_id VARCHAR(128) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + task_day VARCHAR(10) NOT NULL, + task_key VARCHAR(64) NOT NULL, + user_id BIGINT NOT NULL, + earning_region_id BIGINT NOT NULL DEFAULT 0, + attribution_at_ms BIGINT NOT NULL DEFAULT 0, + reward_resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(160) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, claim_id), + UNIQUE KEY uk_activity_template_claim_command (app_code, command_id), + UNIQUE KEY uk_activity_template_claim_task (app_code, template_id, version_no, task_day, user_id, task_key), + UNIQUE KEY uk_activity_template_claim_wallet (app_code, wallet_command_id), + KEY idx_activity_template_claim_status (app_code, status, updated_at_ms), + KEY idx_activity_template_claim_admin (app_code, template_id, version_no, task_day, task_key, user_id, status, updated_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版任务资源组领奖事实'`, + `CREATE TABLE IF NOT EXISTS activity_template_rank_periods ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + period_start_ms BIGINT NOT NULL, + period_end_ms BIGINT NOT NULL, + settle_after_ms BIGINT NOT NULL COMMENT '结算水位:周期结束加允许迟到窗口,UTC epoch ms', + leaderboard_size INT NOT NULL, + status VARCHAR(24) NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + settled_at_ms BIGINT NOT NULL DEFAULT 0, + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key), + KEY idx_activity_template_period_settle_due (app_code, status, settle_after_ms, lock_until_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单结算周期'`, + `CREATE TABLE IF NOT EXISTS activity_template_rank_snapshots ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + gift_count BIGINT NOT NULL, + coin_amount BIGINT NOT NULL, + first_scored_at_ms BIGINT NOT NULL, + snapshot_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_rank_user (app_code, template_id, version_no, board_type, period_key, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版冻结榜单快照'`, + `CREATE TABLE IF NOT EXISTS activity_template_reward_jobs ( + app_code VARCHAR(32) NOT NULL, + reward_job_id VARCHAR(96) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + version_no BIGINT NOT NULL, + board_type VARCHAR(16) NOT NULL, + period_key VARCHAR(24) NOT NULL, + rank_no INT NOT NULL, + user_id BIGINT NOT NULL, + score BIGINT NOT NULL, + resource_group_id BIGINT NOT NULL, + reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '', + reward_snapshot_json JSON NULL, + wallet_command_id VARCHAR(192) NOT NULL, + wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '', + status VARCHAR(24) NOT NULL, + failure_reason VARCHAR(512) NOT NULL DEFAULT '', + attempt_count INT NOT NULL DEFAULT 0, + max_attempts INT NOT NULL DEFAULT 8 COMMENT '自动投递总尝试上限;dead 手工复活时只扩一轮预算', + next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次可领取时间,UTC epoch ms', + locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前 job lease owner', + lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT 'job lease 过期时间,UTC epoch ms', + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + granted_at_ms BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (app_code, reward_job_id), + UNIQUE KEY uk_activity_template_reward_rank (app_code, template_id, version_no, board_type, period_key, rank_no), + UNIQUE KEY uk_activity_template_reward_wallet (app_code, wallet_command_id), + KEY idx_activity_template_reward_query (app_code, template_id, version_no, board_type, period_key, status), + KEY idx_activity_template_reward_retry (app_code, status, updated_at_ms), + KEY idx_activity_template_reward_claim (app_code, status, next_retry_at_ms, lock_until_ms, created_at_ms, reward_job_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版榜单奖励发放任务'`, + `CREATE TABLE IF NOT EXISTS activity_template_stats_outbox ( + outbox_id VARCHAR(96) NOT NULL, + app_code VARCHAR(32) NOT NULL, + event_type VARCHAR(64) NOT NULL, + payload BLOB NOT NULL, + status VARCHAR(24) NOT NULL, + retry_count INT NOT NULL DEFAULT 0, + next_retry_at_ms BIGINT NOT NULL, + locked_by VARCHAR(128) NOT NULL DEFAULT '', + lock_until_ms BIGINT NOT NULL DEFAULT 0, + last_error VARCHAR(512) NOT NULL DEFAULT '', + created_at_ms BIGINT NOT NULL, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (outbox_id), + KEY idx_activity_template_stats_outbox_claim (status, next_retry_at_ms, lock_until_ms, created_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版统计事实 RocketMQ transactional outbox'`, + } + for _, statement := range statements { + if _, err := r.db.ExecContext(ctx, statement); err != nil { + return err + } + } + rewardSnapshotColumns := []struct { + table string + column string + statement string + }{ + {"activity_template_task_progress", "reward_snapshot_id", `ALTER TABLE activity_template_task_progress ADD COLUMN reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '' AFTER reward_resource_group_id`}, + {"activity_template_task_progress", "reward_snapshot_json", `ALTER TABLE activity_template_task_progress ADD COLUMN reward_snapshot_json JSON NULL AFTER reward_snapshot_id`}, + {"activity_template_task_claims", "reward_snapshot_id", `ALTER TABLE activity_template_task_claims ADD COLUMN reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '' AFTER reward_resource_group_id`}, + {"activity_template_task_claims", "reward_snapshot_json", `ALTER TABLE activity_template_task_claims ADD COLUMN reward_snapshot_json JSON NULL AFTER reward_snapshot_id`}, + {"activity_template_daily_visits", "region_id", `ALTER TABLE activity_template_daily_visits ADD COLUMN region_id BIGINT NOT NULL DEFAULT 0 AFTER user_id`}, + {"activity_template_task_progress", "first_region_id", `ALTER TABLE activity_template_task_progress ADD COLUMN first_region_id BIGINT NOT NULL DEFAULT 0 AFTER user_id`}, + {"activity_template_task_progress", "earning_region_id", `ALTER TABLE activity_template_task_progress ADD COLUMN earning_region_id BIGINT NOT NULL DEFAULT 0 AFTER completed_at_ms`}, + {"activity_template_task_progress", "attribution_at_ms", `ALTER TABLE activity_template_task_progress ADD COLUMN attribution_at_ms BIGINT NOT NULL DEFAULT 0 AFTER earning_region_id`}, + {"activity_template_task_claims", "earning_region_id", `ALTER TABLE activity_template_task_claims ADD COLUMN earning_region_id BIGINT NOT NULL DEFAULT 0 AFTER user_id`}, + {"activity_template_task_claims", "attribution_at_ms", `ALTER TABLE activity_template_task_claims ADD COLUMN attribution_at_ms BIGINT NOT NULL DEFAULT 0 AFTER earning_region_id`}, + {"activity_template_reward_jobs", "reward_snapshot_id", `ALTER TABLE activity_template_reward_jobs ADD COLUMN reward_snapshot_id VARCHAR(96) NOT NULL DEFAULT '' AFTER resource_group_id`}, + {"activity_template_reward_jobs", "reward_snapshot_json", `ALTER TABLE activity_template_reward_jobs ADD COLUMN reward_snapshot_json JSON NULL AFTER reward_snapshot_id`}, + {"activity_template_reward_jobs", "max_attempts", `ALTER TABLE activity_template_reward_jobs ADD COLUMN max_attempts INT NOT NULL DEFAULT 8 COMMENT '自动投递总尝试上限;dead 手工复活时只扩一轮预算' AFTER attempt_count`}, + {"activity_template_reward_jobs", "next_retry_at_ms", `ALTER TABLE activity_template_reward_jobs ADD COLUMN next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次可领取时间,UTC epoch ms' AFTER max_attempts`}, + {"activity_template_reward_jobs", "locked_by", `ALTER TABLE activity_template_reward_jobs ADD COLUMN locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前 job lease owner' AFTER next_retry_at_ms`}, + {"activity_template_reward_jobs", "lock_until_ms", `ALTER TABLE activity_template_reward_jobs ADD COLUMN lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT 'job lease 过期时间,UTC epoch ms' AFTER locked_by`}, + } + for _, addition := range rewardSnapshotColumns { + exists, err := r.columnExists(ctx, addition.table, addition.column) + if err != nil { + return err + } + if !exists { + if _, err := r.db.ExecContext(ctx, addition.statement); err != nil { + return err + } + } + } + // 旧环境可能已经执行过 011。新增水位列先以 0 落地,再只回填缺失值;历史周期一旦 + // 物化便不随之后的配置变化漂移,保证结算审计可以复现当时的迟到容忍策略。 + settleAfterExists, err := r.columnExists(ctx, "activity_template_rank_periods", "settle_after_ms") + if err != nil { + return err + } + if !settleAfterExists { + if _, err := r.db.ExecContext(ctx, ` + ALTER TABLE activity_template_rank_periods + ADD COLUMN settle_after_ms BIGINT NOT NULL DEFAULT 0 + COMMENT '结算水位:周期结束加允许迟到窗口,UTC epoch ms' AFTER period_end_ms`); err != nil { + return err + } + } + if _, err := r.db.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET settle_after_ms = period_end_ms + ? + WHERE settle_after_ms <= 0`, r.activityTemplateSettlementLatenessMS()); err != nil { + return err + } + settleDueIndexExists, err := r.indexExists(ctx, "activity_template_rank_periods", "idx_activity_template_period_settle_due") + if err != nil { + return err + } + if !settleDueIndexExists { + if _, err := r.db.ExecContext(ctx, ` + CREATE INDEX idx_activity_template_period_settle_due + ON activity_template_rank_periods (app_code, status, settle_after_ms, lock_until_ms)`); err != nil { + return err + } + } + rewardClaimIndexExists, err := r.indexExists(ctx, "activity_template_reward_jobs", "idx_activity_template_reward_claim") + if err != nil { + return err + } + if !rewardClaimIndexExists { + if _, err := r.db.ExecContext(ctx, ` + CREATE INDEX idx_activity_template_reward_claim + ON activity_template_reward_jobs (app_code, status, next_retry_at_ms, lock_until_ms, created_at_ms, reward_job_id)`); err != nil { + return err + } + } + taskClaimAdminIndexExists, err := r.indexExists(ctx, "activity_template_task_claims", "idx_activity_template_claim_admin") + if err != nil { + return err + } + if !taskClaimAdminIndexExists { + if _, err := r.db.ExecContext(ctx, ` + CREATE INDEX idx_activity_template_claim_admin + ON activity_template_task_claims (app_code, template_id, version_no, task_day, task_key, user_id, status, updated_at_ms)`); err != nil { + return err + } + } + return nil +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_schema.go b/services/activity-service/internal/storage/mysql/activity_template_schema.go new file mode 100644 index 00000000..c80aba60 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_schema.go @@ -0,0 +1,126 @@ +package mysql + +import "context" + +// ensureActivityTemplateTables mirrors deploy/mysql/migrations/010_activity_templates.sql for explicitly enabled local auto-migrate. +// Production still applies the numbered SQL migration so schema history remains reviewable and deterministic. +func (r *Repository) ensureActivityTemplateTables(ctx context.Context) error { + statements := []string{ + `CREATE TABLE IF NOT EXISTS activity_templates ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + template_code VARCHAR(64) NOT NULL COMMENT 'App 内唯一业务编码', + name VARCHAR(128) NOT NULL COMMENT '后台内部名称', + activity_type VARCHAR(32) NOT NULL DEFAULT 'gift_challenge' COMMENT '活动类型', + status VARCHAR(24) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/disabled/archived', + start_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动开始,UTC epoch ms,包含', + end_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动结束,UTC epoch ms,不包含', + all_regions BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否覆盖全部区域', + daily_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '日榜最多展示人数', + total_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '总榜最多展示人数', + display_config_json JSON NOT NULL COMMENT '客户端布局和样式配置', + revision BIGINT NOT NULL DEFAULT 1 COMMENT '后台编辑乐观锁版本', + published_version BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布快照版本', + created_by_admin_id BIGINT NOT NULL COMMENT '创建管理员', + updated_by_admin_id BIGINT NOT NULL COMMENT '最后更新管理员', + published_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布管理员', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + published_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布时间,UTC epoch ms', + archived_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '软归档时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id), + UNIQUE KEY uk_activity_template_code (app_code, template_code), + KEY idx_activity_template_list (app_code, status, updated_at_ms, template_id), + KEY idx_activity_template_period (app_code, status, start_ms, end_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='可排期运营活动模版实例'`, + `CREATE TABLE IF NOT EXISTS activity_template_publish_locks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + updated_at_ms BIGINT NOT NULL COMMENT '最近获取发布锁时间,UTC epoch ms', + PRIMARY KEY (app_code) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版发布事务互斥行'`, + `CREATE TABLE IF NOT EXISTS activity_template_regions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + region_id BIGINT NOT NULL COMMENT '投放区域 ID', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, region_id), + KEY idx_activity_template_region_match (app_code, region_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版投放区域'`, + `CREATE TABLE IF NOT EXISTS activity_template_locales ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + locale VARCHAR(24) NOT NULL COMMENT 'BCP-47 基础语言码', + title VARCHAR(160) NOT NULL DEFAULT '' COMMENT '客户端活动标题', + rules MEDIUMTEXT NOT NULL COMMENT '客户端活动规则正文', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版多语言文案'`, + `CREATE TABLE IF NOT EXISTS activity_template_gifts ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + gift_id VARCHAR(96) NOT NULL COMMENT 'wallet 礼物 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '发布展示名称快照', + icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '发布展示图标快照', + coin_price BIGINT NOT NULL DEFAULT 0 COMMENT '发布时金币价格快照,仅供展示', + price_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发布时价格版本快照', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, gift_id), + KEY idx_activity_template_gift_match (app_code, gift_id, template_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版指定礼物和展示快照'`, + `CREATE TABLE IF NOT EXISTS activity_template_tasks ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + task_key VARCHAR(64) NOT NULL COMMENT '模版内稳定任务键', + task_type VARCHAR(32) NOT NULL COMMENT 'daily_visit/gift_count/gift_coin_amount', + target_value BIGINT NOT NULL DEFAULT 0 COMMENT '任务达成阈值', + reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, task_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版每日任务配置'`, + `CREATE TABLE IF NOT EXISTS activity_template_rank_rewards ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + board_type VARCHAR(16) NOT NULL COMMENT 'daily/total', + rank_from INT NOT NULL COMMENT '奖励起始名次,闭区间', + rank_to INT NOT NULL COMMENT '奖励结束名次,闭区间', + resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, board_type, rank_from, rank_to) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版日榜和总榜名次奖励'`, + `CREATE TABLE IF NOT EXISTS activity_template_assets ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + asset_key VARCHAR(64) NOT NULL COMMENT '素材位键', + locale VARCHAR(24) NOT NULL DEFAULT '*' COMMENT '* 表示共享素材,否则为语言码', + url VARCHAR(1024) NOT NULL COMMENT 'COS/CDN 素材地址', + media_type VARCHAR(16) NOT NULL COMMENT 'image/webp/svga/pag', + sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, asset_key, locale) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版客户端素材'`, + `CREATE TABLE IF NOT EXISTS activity_template_versions ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID', + version_no BIGINT NOT NULL COMMENT '单模版递增发布版本', + snapshot_json JSON NOT NULL COMMENT '发布时完整不可变配置快照', + published_by_admin_id BIGINT NOT NULL COMMENT '发布管理员', + published_at_ms BIGINT NOT NULL COMMENT '发布时间,UTC epoch ms', + PRIMARY KEY (app_code, template_id, version_no), + KEY idx_activity_template_version_list (app_code, template_id, published_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变发布版本'`, + } + for _, statement := range statements { + if _, err := r.db.ExecContext(ctx, statement); err != nil { + return err + } + } + return nil +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_settlement_lease_repository_test.go b/services/activity-service/internal/storage/mysql/activity_template_settlement_lease_repository_test.go new file mode 100644 index 00000000..fa43b061 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_settlement_lease_repository_test.go @@ -0,0 +1,245 @@ +package mysql + +import ( + "context" + "testing" + "time" + + "github.com/DATA-DOG/go-sqlmock" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +var activityTemplateRewardLeaseTestColumns = []string{ + "app_code", "reward_job_id", "template_id", "template_code", "version_no", "board_type", "period_key", + "rank_no", "user_id", "score", "resource_group_id", "reward_snapshot_id", "reward_snapshot_json", + "wallet_command_id", "wallet_grant_id", "status", "failure_reason", "attempt_count", "created_at_ms", + "updated_at_ms", "granted_at_ms", "max_attempts", "next_retry_at_ms", "locked_by", "lock_until_ms", +} + +var activityTemplateRankPeriodLeaseTestColumns = []string{ + "app_code", "template_id", "template_code", "version_no", "board_type", "period_key", + "period_start_ms", "period_end_ms", "settle_after_ms", "leaderboard_size", "status", "settled_at_ms", +} + +func TestClaimDueActivityTemplateRankPeriodsExcludesMaterializedBlockedJobsBeforePending(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + const nowMS = int64(100_000) + lockUntilMS := nowMS + time.Minute.Milliseconds() + + mock.ExpectBegin() + mock.ExpectQuery(`(?s)FROM activity_template_rank_periods p.+p.status = \?.+p.status = \?.+NOT EXISTS \(.+FROM activity_template_reward_jobs j.+LIMIT \? FOR UPDATE SKIP LOCKED`). + WithArgs("hyapp", nowMS, domain.PeriodStatusPending, domain.PeriodStatusSettling, nowMS, 50). + WillReturnRows(sqlmock.NewRows(activityTemplateRankPeriodLeaseTestColumns). + AddRow("hyapp", "pending-after-50-blocked", "summer", 3, domain.BoardTypeTotal, "total", 1, 2, 3, 100, domain.PeriodStatusPending, 0)) + mock.ExpectExec(`(?s)UPDATE activity_template_rank_periods.+SET status = \?, locked_by = \?, lock_until_ms = \?.+WHERE app_code = \?`). + WithArgs(domain.PeriodStatusSettling, "settler", lockUntilMS, nowMS, "hyapp", "pending-after-50-blocked", int64(3), domain.BoardTypeTotal, "total"). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectCommit() + + periods, err := repository.ClaimDueActivityTemplateRankPeriods(ctx, "settler", nowMS, time.Minute, 50) + if err != nil { + t.Fatalf("ClaimDueActivityTemplateRankPeriods(): %v", err) + } + if len(periods) != 1 || periods[0].TemplateID != "pending-after-50-blocked" { + t.Fatalf("claimed periods = %+v, want only actionable pending period", periods) + } + if len(periods) == 50 { + t.Fatal("dead/backoff periods must not fill the discovery batch") + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestClaimFinalizableActivityTemplateRankPeriodsOnlySelectsAllGrantedRewardingPeriods(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + const nowMS = int64(200_000) + + mock.ExpectBegin() + mock.ExpectQuery(`(?s)FROM activity_template_rank_periods p.+p.status = \?.+p.status = \? AND EXISTS \(.+FROM activity_template_reward_jobs materialized.+NOT EXISTS \(.+FROM activity_template_reward_jobs j.+j.status <> \?.+LIMIT \? FOR UPDATE SKIP LOCKED`). + WithArgs("hyapp", nowMS, domain.PeriodStatusRewarding, domain.PeriodStatusSettling, domain.ClaimStatusGranted, 50). + WillReturnRows(sqlmock.NewRows(activityTemplateRankPeriodLeaseTestColumns)) + mock.ExpectCommit() + + periods, err := repository.ClaimFinalizableActivityTemplateRankPeriods(ctx, "finalizer", nowMS, time.Minute, 50) + if err != nil { + t.Fatalf("ClaimFinalizableActivityTemplateRankPeriods(): %v", err) + } + if len(periods) != 0 { + t.Fatalf("finalizable periods = %+v, want none while jobs are blocked", periods) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestClaimActivityTemplateRewardJobsUsesFiniteLeasesAndRecoversExpiredRunning(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + nowMS := int64(1_000) + lockUntilMS := nowMS + (30 * time.Second).Milliseconds() + + mock.ExpectBegin() + rows := sqlmock.NewRows(activityTemplateRewardLeaseTestColumns). + AddRow("hyapp", "job_failed", "tpl_1", "summer", 2, "daily", "2026-07-15", 1, 1001, 900, 81, "", "null", "wallet-stable-failed", "", domain.ClaimStatusFailed, "wallet unavailable", 1, 100, 900, 0, 8, 900, "", 0). + AddRow("hyapp", "job_crashed", "tpl_1", "summer", 2, "daily", "2026-07-15", 2, 1002, 800, 82, "", "null", "wallet-stable-crashed", "", domain.ClaimStatusRunning, "", 2, 100, 900, 0, 8, 0, "dead-worker", 999). + AddRow("hyapp", "job_exhausted", "tpl_1", "summer", 2, "daily", "2026-07-15", 3, 1003, 700, 83, "", "null", "wallet-stable-exhausted", "", domain.ClaimStatusRunning, "", 8, 100, 900, 0, 8, 0, "dead-worker", 999) + mock.ExpectQuery(`(?s)SELECT app_code, reward_job_id.+FROM activity_template_reward_jobs.+FOR UPDATE SKIP LOCKED`). + WithArgs("hyapp", domain.ClaimStatusPending, domain.ClaimStatusFailed, nowMS, domain.ClaimStatusRunning, nowMS, 3). + WillReturnRows(rows) + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+attempt_count = attempt_count \+ 1.+WHERE app_code = \? AND reward_job_id = \?`). + WithArgs(domain.ClaimStatusRunning, "settler-a", lockUntilMS, nowMS, "hyapp", "job_failed"). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+attempt_count = attempt_count \+ 1.+WHERE app_code = \? AND reward_job_id = \?`). + WithArgs(domain.ClaimStatusRunning, "settler-a", lockUntilMS, nowMS, "hyapp", "job_crashed"). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+failure_reason = CASE WHEN failure_reason = ''.+WHERE app_code = \? AND reward_job_id = \?`). + WithArgs(activityTemplateRewardJobStatusDead, "maximum delivery attempts exhausted", nowMS, "hyapp", "job_exhausted"). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectCommit() + + jobs, err := repository.ClaimActivityTemplateRewardJobs(ctx, "settler-a", nowMS, 30*time.Second, 3) + if err != nil { + t.Fatalf("ClaimActivityTemplateRewardJobs(): %v", err) + } + if len(jobs) != 2 { + t.Fatalf("claimed jobs = %+v, want failed and expired-running jobs only", jobs) + } + if jobs[0].RewardJobID != "job_failed" || jobs[0].AttemptCount != 2 || jobs[0].WalletCommandID != "wallet-stable-failed" { + t.Fatalf("failed retry claim = %+v", jobs[0]) + } + if jobs[1].RewardJobID != "job_crashed" || jobs[1].AttemptCount != 3 || jobs[1].WalletCommandID != "wallet-stable-crashed" { + t.Fatalf("expired running recovery = %+v", jobs[1]) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestMarkActivityTemplateRewardJobFailedWithLeaseSchedulesStableBackoff(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + nowMS := int64(20_000) + nextRetryAtMS := activityTemplateRewardRetryAtMS("job_retry", 2, nowMS) + + mock.ExpectBegin() + mock.ExpectQuery(`(?s)SELECT attempt_count, max_attempts FROM activity_template_reward_jobs.+FOR UPDATE`). + WithArgs("hyapp", "job_retry", domain.ClaimStatusRunning, "settler-b", nowMS). + WillReturnRows(sqlmock.NewRows([]string{"attempt_count", "max_attempts"}).AddRow(2, 8)) + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+next_retry_at_ms = \?.+locked_by = ''.+lock_until_ms = 0.+locked_by = \?.+lock_until_ms > \?`). + WithArgs(domain.ClaimStatusFailed, "wallet timeout", nextRetryAtMS, nowMS, "hyapp", "job_retry", domain.ClaimStatusRunning, "settler-b", nowMS). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectCommit() + + if err := repository.MarkActivityTemplateRewardJobFailedWithLease(ctx, "job_retry", "settler-b", "wallet timeout", nowMS); err != nil { + t.Fatalf("MarkActivityTemplateRewardJobFailedWithLease(): %v", err) + } + if nextRetryAtMS <= nowMS+activityTemplateRewardJobRetryBase.Milliseconds() { + t.Fatalf("next retry = %d, want exponential delay plus jitter after %d", nextRetryAtMS, nowMS) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestMarkActivityTemplateRewardJobGrantedRejectsLostLeaseOwner(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + nowMS := int64(50_000) + + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+status = \?.+locked_by = ''.+WHERE app_code = \?.+locked_by = \?.+lock_until_ms > \?`). + WithArgs(domain.ClaimStatusGranted, "grant_1", nowMS, nowMS, "hyapp", "job_taken_over", domain.ClaimStatusRunning, "stale-worker", nowMS). + WillReturnResult(sqlmock.NewResult(0, 0)) + err = repository.MarkActivityTemplateRewardJobGrantedWithLease(ctx, "job_taken_over", "stale-worker", "grant_1", nowMS) + if xerr.CodeOf(err) != xerr.Conflict { + t.Fatalf("lost owner error = %v, want conflict", err) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestClaimActivityTemplateRewardJobForManualRetryRevivesDeadWithoutChangingWalletCommand(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("sqlmock.New(): %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repository := &Repository{db: db} + ctx := appcode.WithContext(context.Background(), "hyapp") + nowMS := int64(80_000) + lockUntilMS := nowMS + time.Minute.Milliseconds() + + mock.ExpectBegin() + rows := sqlmock.NewRows(activityTemplateRewardLeaseTestColumns). + AddRow("hyapp", "job_dead", "tpl_2", "anniversary", 4, "total", "total", 1, 2001, 9_000, 91, "", "null", "wallet-command-never-changes", "", activityTemplateRewardJobStatusDead, "attempts exhausted", 8, 100, 79_000, 0, 8, 0, "", 0) + mock.ExpectQuery(`(?s)SELECT app_code, reward_job_id.+FROM activity_template_reward_jobs.+FOR UPDATE`). + WithArgs("hyapp", "job_dead").WillReturnRows(rows) + mock.ExpectExec(`(?s)UPDATE activity_template_reward_jobs.+max_attempts = \?.+locked_by = \?.+lock_until_ms = \?.+status IN \(\?, \?\)`). + WithArgs(domain.ClaimStatusRunning, int32(9), "admin-retry-90001", lockUntilMS, nowMS, "hyapp", "job_dead", domain.ClaimStatusFailed, activityTemplateRewardJobStatusDead). + WillReturnResult(sqlmock.NewResult(0, 1)) + mock.ExpectCommit() + + job, err := repository.ClaimActivityTemplateRewardJobForManualRetry(ctx, "tpl_2", "job_dead", "admin-retry-90001", nowMS, time.Minute) + if err != nil { + t.Fatalf("ClaimActivityTemplateRewardJobForManualRetry(): %v", err) + } + if job.Status != domain.ClaimStatusRunning || job.AttemptCount != 9 || job.MaxAttempts != 9 || job.NextRetryAtMS != 0 || + job.WalletCommandID != "wallet-command-never-changes" { + t.Fatalf("manual retry job = %+v", job) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("sql expectations: %v", err) + } +} + +func TestActivityTemplateRewardRetryBackoffIsDeterministicBoundedAndIncreasing(t *testing.T) { + nowMS := int64(1_000_000) + previous := nowMS + for attempt := int32(1); attempt <= activityTemplateRewardJobDefaultAttempts; attempt++ { + first := activityTemplateRewardRetryAtMS("job-stable", attempt, nowMS) + second := activityTemplateRewardRetryAtMS("job-stable", attempt, nowMS) + if first != second { + t.Fatalf("attempt %d jitter is not deterministic: %d != %d", attempt, first, second) + } + if first <= previous { + t.Fatalf("attempt %d retry %d did not increase after %d", attempt, first, previous) + } + if first-nowMS > activityTemplateRewardJobRetryHardCap.Milliseconds() { + t.Fatalf("attempt %d delay %d exceeds hard cap", attempt, first-nowMS) + } + previous = first + } + if capped := activityTemplateRewardRetryAtMS("job-stable", 100, nowMS) - nowMS; capped > activityTemplateRewardJobRetryHardCap.Milliseconds() { + t.Fatalf("high-attempt delay %d exceeds hard cap", capped) + } +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_settlement_repository.go b/services/activity-service/internal/storage/mysql/activity_template_settlement_repository.go new file mode 100644 index 00000000..aea1d864 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_settlement_repository.go @@ -0,0 +1,1061 @@ +package mysql + +import ( + "context" + "database/sql" + "errors" + "fmt" + "hash/fnv" + "strings" + "time" + + "hyapp/pkg/appcode" + "hyapp/pkg/idgen" + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +const ( + activityTemplateRewardJobStatusDead = "dead" + activityTemplateRewardJobDefaultAttempts = int32(8) + activityTemplateRewardJobDefaultBatch = int32(50) + activityTemplateRewardJobMaxBatch = int32(200) + activityTemplateRewardJobDefaultLease = 30 * time.Second + activityTemplateRewardJobRetryBase = 5 * time.Second + activityTemplateRewardJobRetryNominalCap = 12 * time.Minute + activityTemplateRewardJobRetryHardCap = 15 * time.Minute +) + +// activityTemplateRewardJobLease keeps transport-neutral lease metadata beside the public job view. +// Lease ownership deliberately stays in storage: callers only need the stable worker ID they used to claim. +type activityTemplateRewardJobLease struct { + Job domain.RewardJob + MaxAttempts int32 + NextRetryAtMS int64 + LockedBy string + LockUntilMS int64 +} + +func (r *Repository) GetActivityTemplateRuntimeVersion(ctx context.Context, templateID string, versionNo int64) (domain.Runtime, error) { + if r == nil || r.db == nil { + return domain.Runtime{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + return getActivityTemplateRuntimeByIdentity(ctx, r.db, appcode.FromContext(ctx), strings.TrimSpace(templateID), versionNo) +} + +// ListActivityTemplateRuntimeLeaderboard returns a frozen snapshot as soon as settlement starts; +// before that it reads only the bounded score index for the requested immutable version. +func (r *Repository) ListActivityTemplateRuntimeLeaderboard(ctx context.Context, runtime domain.Runtime, query domain.LeaderboardQuery) (domain.LeaderboardResult, error) { + if r == nil || r.db == nil { + return domain.LeaderboardResult{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + periodKey := strings.TrimSpace(query.PeriodKey) + if query.BoardType == domain.BoardTypeTotal { + periodKey = "total" + } else if periodKey == "" { + periodKey = utcTaskDay(query.NowMS) + } + period, err := getActivityTemplateRankPeriod(ctx, r.db, runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, query.BoardType, periodKey, false) + if err != nil { + return domain.LeaderboardResult{}, err + } + page, pageSize := normalizeRuntimePage(query.Page, query.PageSize) + offset := int64(page-1) * int64(pageSize) + var snapshotCount int64 + if err := r.db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM activity_template_rank_snapshots + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, query.BoardType, periodKey).Scan(&snapshotCount); err != nil { + return domain.LeaderboardResult{}, err + } + result := domain.LeaderboardResult{Runtime: runtime, Period: period, Entries: []domain.LeaderboardEntry{}} + if snapshotCount > 0 || period.Status == domain.PeriodStatusSettled { + result.Total = minInt64(snapshotCount, int64(periodLeaderboardSize(period))) + rows, err := r.db.QueryContext(ctx, ` + SELECT rank_no, user_id, score, gift_count, coin_amount, first_scored_at_ms + FROM activity_template_rank_snapshots + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? + ORDER BY rank_no LIMIT ? OFFSET ?`, runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, + query.BoardType, periodKey, int(pageSize), offset) + if err != nil { + return domain.LeaderboardResult{}, err + } + defer rows.Close() + for rows.Next() { + var entry domain.LeaderboardEntry + entry.Snapshot = true + if err := rows.Scan(&entry.RankNo, &entry.UserID, &entry.Score, &entry.GiftCount, &entry.CoinAmount, &entry.FirstScoredAtMS); err != nil { + return domain.LeaderboardResult{}, err + } + result.Entries = append(result.Entries, entry) + if entry.UserID == query.UserID { + result.MyEntry, result.MyFound = entry, true + } + } + if !result.MyFound && query.UserID > 0 { + entry, found, err := getActivityTemplateSnapshotUserEntry(ctx, r.db, runtime, query.BoardType, periodKey, query.UserID) + if err != nil { + return domain.LeaderboardResult{}, err + } + result.MyEntry, result.MyFound = entry, found + } + return result, rows.Err() + } + return r.listLiveActivityTemplateLeaderboard(ctx, runtime, period, query, pageSize, offset) +} + +func (r *Repository) listLiveActivityTemplateLeaderboard(ctx context.Context, runtime domain.Runtime, period domain.RankPeriod, query domain.LeaderboardQuery, pageSize int32, offset int64) (domain.LeaderboardResult, error) { + result := domain.LeaderboardResult{Runtime: runtime, Period: period, Entries: []domain.LeaderboardEntry{}} + table := "activity_template_user_total_scores" + dayClause := "" + args := []any{runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo} + if query.BoardType == domain.BoardTypeDaily { + table = "activity_template_user_day_scores" + dayClause = " AND task_day = ?" + args = append(args, period.PeriodKey) + } + var rawTotal int64 + if err := r.db.QueryRowContext(ctx, `SELECT COUNT(*) FROM `+table+` WHERE app_code = ? AND template_id = ? AND version_no = ?`+dayClause, args...).Scan(&rawTotal); err != nil { + return domain.LeaderboardResult{}, err + } + result.Total = minInt64(rawTotal, int64(periodLeaderboardSize(period))) + if offset >= result.Total { + return result, nil + } + limit := int64(pageSize) + if offset+limit > result.Total { + limit = result.Total - offset + } + rows, err := r.db.QueryContext(ctx, ` + SELECT user_id, score, gift_count, coin_amount, first_scored_at_ms + FROM `+table+` + WHERE app_code = ? AND template_id = ? AND version_no = ?`+dayClause+` + ORDER BY score DESC, first_scored_at_ms ASC, user_id ASC + LIMIT ? OFFSET ?`, append(args, limit, offset)...) + if err != nil { + return domain.LeaderboardResult{}, err + } + defer rows.Close() + rank := int32(offset + 1) + for rows.Next() { + entry := domain.LeaderboardEntry{RankNo: rank} + if err := rows.Scan(&entry.UserID, &entry.Score, &entry.GiftCount, &entry.CoinAmount, &entry.FirstScoredAtMS); err != nil { + return domain.LeaderboardResult{}, err + } + result.Entries = append(result.Entries, entry) + if entry.UserID == query.UserID { + result.MyEntry, result.MyFound = entry, true + } + rank++ + } + if err := rows.Err(); err != nil { + return domain.LeaderboardResult{}, err + } + if !result.MyFound && query.UserID > 0 { + entry, found, err := getActivityTemplateLiveUserEntry(ctx, r.db, runtime, query.BoardType, period.PeriodKey, query.UserID) + if err != nil { + return domain.LeaderboardResult{}, err + } + result.MyEntry, result.MyFound = entry, found + } + return result, nil +} + +// ClaimDueActivityTemplateRankPeriods only discovers periods that still need score freezing/job materialization. +// A stale settling row is recoverable only when it has no materialized reward job; failed/backoff/dead job queues +// are deliberately excluded so they cannot fill this batch, hot-loop has_more, or starve later pending periods. +func (r *Repository) ClaimDueActivityTemplateRankPeriods(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RankPeriod, error) { + if batchSize <= 0 { + batchSize = 20 + } + if lockTTL <= 0 { + lockTTL = 30 * time.Second + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + rows, err := tx.QueryContext(ctx, ` + SELECT p.app_code, p.template_id, p.template_code, p.version_no, p.board_type, p.period_key, + p.period_start_ms, p.period_end_ms, p.settle_after_ms, p.leaderboard_size, p.status, p.settled_at_ms + FROM activity_template_rank_periods p + WHERE p.app_code = ? AND p.settle_after_ms <= ? AND ( + p.status = ? + OR ( + p.status = ? AND p.lock_until_ms <= ? + AND NOT EXISTS ( + SELECT 1 FROM activity_template_reward_jobs j + WHERE j.app_code = p.app_code AND j.template_id = p.template_id + AND j.version_no = p.version_no AND j.board_type = p.board_type AND j.period_key = p.period_key + ) + ) + ) + ORDER BY p.settle_after_ms, p.template_id, p.version_no, + CASE p.board_type WHEN 'daily' THEN 0 ELSE 1 END, p.period_key + LIMIT ? FOR UPDATE SKIP LOCKED`, appcode.FromContext(ctx), nowMS, + domain.PeriodStatusPending, domain.PeriodStatusSettling, nowMS, int(batchSize)) + if err != nil { + return nil, err + } + items := make([]domain.RankPeriod, 0, batchSize) + for rows.Next() { + var item domain.RankPeriod + if err := rows.Scan(&item.AppCode, &item.TemplateID, &item.TemplateCode, &item.VersionNo, + &item.BoardType, &item.PeriodKey, &item.StartMS, &item.EndMS, &item.SettleAfterMS, + &item.LeaderboardSize, &item.Status, &item.SettledAtMS); err != nil { + rows.Close() + return nil, err + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + rows.Close() + return nil, err + } + if err := rows.Close(); err != nil { + return nil, err + } + lockUntil := nowMS + lockTTL.Milliseconds() + for _, item := range items { + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET status = ?, locked_by = ?, lock_until_ms = ?, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + domain.PeriodStatusSettling, workerID, lockUntil, nowMS, item.AppCode, item.TemplateID, + item.VersionNo, item.BoardType, item.PeriodKey); err != nil { + return nil, err + } + } + if err := tx.Commit(); err != nil { + return nil, err + } + return items, nil +} + +// PrepareActivityTemplateRankSettlement freezes ordered scores once and materializes immutable reward jobs. +// It intentionally does not claim jobs: period discovery is bounded by periods, while wallet fan-out must be +// bounded independently at job granularity so one 1000-winner board cannot monopolize a cron invocation. +func (r *Repository) PrepareActivityTemplateRankSettlement(ctx context.Context, period domain.RankPeriod, nowMS int64) ([]domain.RewardJob, error) { + if r == nil || r.db == nil { + return nil, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + locked, err := getActivityTemplateRankPeriod(ctx, tx, period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey, true) + if err != nil { + return nil, err + } + if locked.Status == domain.PeriodStatusSettled || locked.Status == domain.PeriodStatusCancelled { + return []domain.RewardJob{}, nil + } + if locked.Status == domain.PeriodStatusRewarding { + // Another materializer recovered this lease first. Its snapshot/jobs committed atomically with rewarding, + // so this stale invocation has no remaining work and must not clear a finalizer's newer lease. + return []domain.RewardJob{}, nil + } + if locked.Status != domain.PeriodStatusSettling { + return nil, xerr.New(xerr.Conflict, "activity template rank period is not claimed for materialization") + } + var snapshotCount int64 + if err := tx.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM activity_template_rank_snapshots + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey).Scan(&snapshotCount); err != nil { + return nil, err + } + if snapshotCount == 0 { + if err := freezeActivityTemplateRankSnapshot(ctx, tx, locked, nowMS); err != nil { + return nil, err + } + runtime, err := getActivityTemplateRuntimeByIdentity(ctx, tx, period.AppCode, period.TemplateID, period.VersionNo) + if err != nil { + return nil, err + } + if err := createActivityTemplateRewardJobs(ctx, tx, runtime, locked, nowMS); err != nil { + return nil, err + } + } + // `rewarding` is the durable materialization marker. It distinguishes a successfully frozen empty board + // from a worker that crashed after claiming `settling` but before this transaction committed. + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET status = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? + AND status = ?`, domain.PeriodStatusRewarding, nowMS, period.AppCode, period.TemplateID, + period.VersionNo, period.BoardType, period.PeriodKey, domain.PeriodStatusSettling) + if err != nil { + return nil, err + } + if err := requireActivityTemplateRewardJobMutation(result, "activity template rank period materialization lease lost"); err != nil { + return nil, err + } + if err := tx.Commit(); err != nil { + return nil, err + } + return []domain.RewardJob{}, nil +} + +// ClaimFinalizableActivityTemplateRankPeriods leases only materialized periods whose jobs are all granted. +// Backoff, running, failed and dead jobs all satisfy status <> granted and therefore never make this maintenance +// batch look busy. `settling` with at least one job is accepted only for pre-rewarding deployments; an empty stale +// claim is sent back through materialization instead. This bounded recovery closes the final-job crash gap. +func (r *Repository) ClaimFinalizableActivityTemplateRankPeriods(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RankPeriod, error) { + if r == nil || r.db == nil { + return nil, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + if batchSize <= 0 { + batchSize = 20 + } + if lockTTL <= 0 { + lockTTL = 30 * time.Second + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer func() { _ = tx.Rollback() }() + rows, err := tx.QueryContext(ctx, ` + SELECT p.app_code, p.template_id, p.template_code, p.version_no, p.board_type, p.period_key, + p.period_start_ms, p.period_end_ms, p.settle_after_ms, p.leaderboard_size, p.status, p.settled_at_ms + FROM activity_template_rank_periods p + WHERE p.app_code = ? AND p.lock_until_ms <= ? AND ( + p.status = ? + OR ( + p.status = ? AND EXISTS ( + SELECT 1 FROM activity_template_reward_jobs materialized + WHERE materialized.app_code = p.app_code AND materialized.template_id = p.template_id + AND materialized.version_no = p.version_no AND materialized.board_type = p.board_type + AND materialized.period_key = p.period_key + ) + ) + ) + AND NOT EXISTS ( + SELECT 1 FROM activity_template_reward_jobs j + WHERE j.app_code = p.app_code AND j.template_id = p.template_id + AND j.version_no = p.version_no AND j.board_type = p.board_type AND j.period_key = p.period_key + AND j.status <> ? + ) + ORDER BY p.settle_after_ms, p.template_id, p.version_no, + CASE p.board_type WHEN 'daily' THEN 0 ELSE 1 END, p.period_key + LIMIT ? FOR UPDATE SKIP LOCKED`, appcode.FromContext(ctx), nowMS, domain.PeriodStatusRewarding, + domain.PeriodStatusSettling, domain.ClaimStatusGranted, int(batchSize)) + if err != nil { + return nil, err + } + items := make([]domain.RankPeriod, 0, batchSize) + for rows.Next() { + var item domain.RankPeriod + if err := rows.Scan(&item.AppCode, &item.TemplateID, &item.TemplateCode, &item.VersionNo, + &item.BoardType, &item.PeriodKey, &item.StartMS, &item.EndMS, &item.SettleAfterMS, + &item.LeaderboardSize, &item.Status, &item.SettledAtMS); err != nil { + _ = rows.Close() + return nil, err + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + _ = rows.Close() + return nil, err + } + if err := rows.Close(); err != nil { + return nil, err + } + lockUntilMS := nowMS + lockTTL.Milliseconds() + for _, item := range items { + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET locked_by = ?, lock_until_ms = ?, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? + AND status IN (?, ?)`, workerID, lockUntilMS, nowMS, item.AppCode, item.TemplateID, item.VersionNo, + item.BoardType, item.PeriodKey, domain.PeriodStatusRewarding, domain.PeriodStatusSettling) + if err != nil { + return nil, err + } + affected, err := result.RowsAffected() + if err != nil { + return nil, err + } + if affected != 1 { + return nil, xerr.New(xerr.Conflict, "activity template finalizable period lease lost") + } + } + if err := tx.Commit(); err != nil { + return nil, err + } + return items, nil +} + +// ClaimActivityTemplateRewardJobs leases a finite cross-period job batch. A crashed running job is reclaimable +// only after its lease expires; every claim increments attempt_count before any wallet RPC is made. Jobs whose +// final attempt expired are fenced into dead instead of remaining running forever. +func (r *Repository) ClaimActivityTemplateRewardJobs(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int32) ([]domain.RewardJob, error) { + if r == nil || r.db == nil { + return nil, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + workerID = strings.TrimSpace(workerID) + if workerID == "" { + return nil, xerr.New(xerr.InvalidArgument, "activity template reward worker_id is required") + } + lockTTL, batchSize = normalizeActivityTemplateRewardLeaseOptions(lockTTL, batchSize) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer func() { _ = tx.Rollback() }() + + rows, err := tx.QueryContext(ctx, activityTemplateRewardJobLeaseSelect+` + WHERE app_code = ? AND ( + (status IN (?, ?) AND next_retry_at_ms <= ?) + OR (status = ? AND lock_until_ms <= ?) + ) + ORDER BY next_retry_at_ms, created_at_ms, reward_job_id + LIMIT ? FOR UPDATE SKIP LOCKED`, appcode.FromContext(ctx), domain.ClaimStatusPending, + domain.ClaimStatusFailed, nowMS, domain.ClaimStatusRunning, nowMS, int(batchSize)) + if err != nil { + return nil, err + } + candidates := make([]activityTemplateRewardJobLease, 0, batchSize) + for rows.Next() { + candidate, err := scanActivityTemplateRewardJobLease(rows) + if err != nil { + _ = rows.Close() + return nil, err + } + candidates = append(candidates, candidate) + } + if err := rows.Err(); err != nil { + _ = rows.Close() + return nil, err + } + if err := rows.Close(); err != nil { + return nil, err + } + + lockUntilMS := nowMS + lockTTL.Milliseconds() + jobs := make([]domain.RewardJob, 0, len(candidates)) + for _, candidate := range candidates { + maxAttempts := normalizeActivityTemplateRewardMaxAttempts(candidate.MaxAttempts) + if candidate.Job.AttemptCount >= maxAttempts { + // The final worker may have died after the wallet call. The stable wallet_command_id remains intact, + // so an operator can explicitly revive this dead job and safely replay that command later. + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET status = ?, next_retry_at_ms = 0, locked_by = '', lock_until_ms = 0, + failure_reason = CASE WHEN failure_reason = '' THEN ? ELSE failure_reason END, + updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ?`, activityTemplateRewardJobStatusDead, + "maximum delivery attempts exhausted", nowMS, candidate.Job.AppCode, candidate.Job.RewardJobID) + if err != nil { + return nil, err + } + if err := requireActivityTemplateRewardJobMutation(result, "activity template reward job terminal transition lost"); err != nil { + return nil, err + } + continue + } + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET status = ?, attempt_count = attempt_count + 1, next_retry_at_ms = 0, + locked_by = ?, lock_until_ms = ?, failure_reason = '', updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ?`, domain.ClaimStatusRunning, workerID, + lockUntilMS, nowMS, candidate.Job.AppCode, candidate.Job.RewardJobID) + if err != nil { + return nil, err + } + if err := requireActivityTemplateRewardJobMutation(result, "activity template reward job claim lost"); err != nil { + return nil, err + } + candidate.Job.Status = domain.ClaimStatusRunning + candidate.Job.FailureReason = "" + candidate.Job.AttemptCount++ + candidate.Job.UpdatedAtMS = nowMS + jobs = append(jobs, candidate.Job) + } + if err := tx.Commit(); err != nil { + return nil, err + } + return jobs, nil +} + +// ExtendActivityTemplateRewardJobLease is a heartbeat with owner fencing. It never resurrects an expired lease: +// once the expiry boundary is crossed, the old worker must stop and let a later claim replay the idempotent command. +func (r *Repository) ExtendActivityTemplateRewardJobLease(ctx context.Context, rewardJobID, workerID string, nowMS int64, lockTTL time.Duration) error { + if r == nil || r.db == nil { + return xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + rewardJobID, workerID = strings.TrimSpace(rewardJobID), strings.TrimSpace(workerID) + if rewardJobID == "" || workerID == "" { + return xerr.New(xerr.InvalidArgument, "activity template reward lease identity is incomplete") + } + lockTTL, _ = normalizeActivityTemplateRewardLeaseOptions(lockTTL, 1) + result, err := r.db.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET lock_until_ms = GREATEST(lock_until_ms, ?), updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ? AND status = ? AND locked_by = ? AND lock_until_ms > ?`, + nowMS+lockTTL.Milliseconds(), nowMS, appcode.FromContext(ctx), rewardJobID, + domain.ClaimStatusRunning, workerID, nowMS) + if err != nil { + return err + } + return requireActivityTemplateRewardJobMutation(result, "activity template reward job lease lost") +} + +// MarkActivityTemplateRewardJobGrantedWithLease accepts completion only from the unexpired lease owner. This +// fencing prevents a slow worker from overwriting a retry worker after takeover; the wallet command itself is +// stable, so rejecting a stale completion only causes a safe idempotent replay. +func (r *Repository) MarkActivityTemplateRewardJobGrantedWithLease(ctx context.Context, rewardJobID, workerID, walletGrantID string, nowMS int64) error { + if r == nil || r.db == nil { + return xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + rewardJobID, workerID, walletGrantID = strings.TrimSpace(rewardJobID), strings.TrimSpace(workerID), strings.TrimSpace(walletGrantID) + if rewardJobID == "" || workerID == "" || walletGrantID == "" { + return xerr.New(xerr.InvalidArgument, "activity template reward completion identity is incomplete") + } + result, err := r.db.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET status = ?, wallet_grant_id = ?, failure_reason = '', next_retry_at_ms = 0, + locked_by = '', lock_until_ms = 0, granted_at_ms = ?, updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ? AND status = ? AND locked_by = ? AND lock_until_ms > ?`, + domain.ClaimStatusGranted, walletGrantID, nowMS, nowMS, appcode.FromContext(ctx), rewardJobID, + domain.ClaimStatusRunning, workerID, nowMS) + if err != nil { + return err + } + return requireActivityTemplateRewardJobMutation(result, "activity template reward job completion lease lost") +} + +// MarkActivityTemplateRewardJobFailedWithLease releases the current lease into a deterministic exponential +// retry schedule. The terminal attempt becomes dead and requires an explicit admin revival. +func (r *Repository) MarkActivityTemplateRewardJobFailedWithLease(ctx context.Context, rewardJobID, workerID, reason string, nowMS int64) error { + if r == nil || r.db == nil { + return xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + rewardJobID, workerID = strings.TrimSpace(rewardJobID), strings.TrimSpace(workerID) + if rewardJobID == "" || workerID == "" { + return xerr.New(xerr.InvalidArgument, "activity template reward failure identity is incomplete") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return err + } + defer func() { _ = tx.Rollback() }() + var attemptCount, maxAttempts int32 + err = tx.QueryRowContext(ctx, ` + SELECT attempt_count, max_attempts FROM activity_template_reward_jobs + WHERE app_code = ? AND reward_job_id = ? AND status = ? AND locked_by = ? AND lock_until_ms > ? + FOR UPDATE`, appcode.FromContext(ctx), rewardJobID, domain.ClaimStatusRunning, workerID, nowMS). + Scan(&attemptCount, &maxAttempts) + if errors.Is(err, sql.ErrNoRows) { + return xerr.New(xerr.Conflict, "activity template reward job failure lease lost") + } + if err != nil { + return err + } + maxAttempts = normalizeActivityTemplateRewardMaxAttempts(maxAttempts) + status, nextRetryAtMS := domain.ClaimStatusFailed, activityTemplateRewardRetryAtMS(rewardJobID, attemptCount, nowMS) + if attemptCount >= maxAttempts { + status, nextRetryAtMS = activityTemplateRewardJobStatusDead, 0 + } + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET status = ?, failure_reason = ?, next_retry_at_ms = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ? AND status = ? AND locked_by = ? AND lock_until_ms > ?`, + status, truncateActivityTemplateRuntimeError(reason), nextRetryAtMS, nowMS, appcode.FromContext(ctx), + rewardJobID, domain.ClaimStatusRunning, workerID, nowMS) + if err != nil { + return err + } + if err := requireActivityTemplateRewardJobMutation(result, "activity template reward job failure lease lost"); err != nil { + return err + } + return tx.Commit() +} + +// ClaimActivityTemplateRewardJobForManualRetry explicitly revives failed/dead work and leases it to the +// requesting admin worker in one transaction. A dead job receives exactly one additional attempt budget without +// resetting attempt_count, preserving the audit trail and the original wallet_command_id. +func (r *Repository) ClaimActivityTemplateRewardJobForManualRetry(ctx context.Context, templateID, rewardJobID, workerID string, nowMS int64, lockTTL time.Duration) (domain.RewardJob, error) { + if r == nil || r.db == nil { + return domain.RewardJob{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + templateID, rewardJobID, workerID = strings.TrimSpace(templateID), strings.TrimSpace(rewardJobID), strings.TrimSpace(workerID) + if templateID == "" || rewardJobID == "" || workerID == "" { + return domain.RewardJob{}, xerr.New(xerr.InvalidArgument, "activity template manual reward retry identity is incomplete") + } + lockTTL, _ = normalizeActivityTemplateRewardLeaseOptions(lockTTL, 1) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return domain.RewardJob{}, err + } + defer func() { _ = tx.Rollback() }() + candidate, found, err := getActivityTemplateRewardJobLease(ctx, tx, appcode.FromContext(ctx), rewardJobID, true) + if err != nil { + return domain.RewardJob{}, err + } + if !found || candidate.Job.TemplateID != templateID { + return domain.RewardJob{}, xerr.New(xerr.NotFound, "activity template reward job not found") + } + if candidate.Job.Status != domain.ClaimStatusFailed && candidate.Job.Status != activityTemplateRewardJobStatusDead { + return domain.RewardJob{}, xerr.New(xerr.Conflict, "only failed or dead activity template reward jobs can be retried manually") + } + maxAttempts := normalizeActivityTemplateRewardMaxAttempts(candidate.MaxAttempts) + if candidate.Job.AttemptCount >= maxAttempts { + maxAttempts = candidate.Job.AttemptCount + 1 + } + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_reward_jobs + SET status = ?, attempt_count = attempt_count + 1, max_attempts = ?, next_retry_at_ms = 0, + locked_by = ?, lock_until_ms = ?, failure_reason = '', updated_at_ms = ? + WHERE app_code = ? AND reward_job_id = ? AND status IN (?, ?)`, domain.ClaimStatusRunning, + maxAttempts, workerID, nowMS+lockTTL.Milliseconds(), nowMS, appcode.FromContext(ctx), rewardJobID, + domain.ClaimStatusFailed, activityTemplateRewardJobStatusDead) + if err != nil { + return domain.RewardJob{}, err + } + if err := requireActivityTemplateRewardJobMutation(result, "activity template manual reward retry claim lost"); err != nil { + return domain.RewardJob{}, err + } + candidate.Job.Status = domain.ClaimStatusRunning + candidate.Job.AttemptCount++ + candidate.Job.MaxAttempts = maxAttempts + candidate.Job.NextRetryAtMS = 0 + candidate.Job.FailureReason = "" + candidate.Job.UpdatedAtMS = nowMS + if err := tx.Commit(); err != nil { + return domain.RewardJob{}, err + } + return candidate.Job, nil +} + +func (r *Repository) FinishActivityTemplateRankPeriodIfComplete(ctx context.Context, period domain.RankPeriod, nowMS int64) (bool, error) { + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return false, err + } + defer tx.Rollback() + locked, err := getActivityTemplateRankPeriod(ctx, tx, period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey, true) + if err != nil { + return false, err + } + // Only the settlement state machine may transition to settled. In particular, an admin disable can + // cancel a not-yet-started period while a stale worker is finishing; preserving cancelled here prevents + // an empty period from being rewritten as a successful settlement. + if locked.Status != domain.PeriodStatusSettling && locked.Status != domain.PeriodStatusRewarding { + return false, nil + } + var remaining int64 + if err := tx.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM activity_template_reward_jobs + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? AND status <> ?`, + period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey, domain.ClaimStatusGranted).Scan(&remaining); err != nil { + return false, err + } + if remaining > 0 { + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET status = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? AND status = ?`, + domain.PeriodStatusRewarding, nowMS, period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, + period.PeriodKey, locked.Status); err != nil { + return false, err + } + return false, tx.Commit() + } + result, err := tx.ExecContext(ctx, ` + UPDATE activity_template_rank_periods + SET status = ?, settled_at_ms = ?, locked_by = '', lock_until_ms = 0, updated_at_ms = ? + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? AND status = ?`, + domain.PeriodStatusSettled, nowMS, nowMS, period.AppCode, period.TemplateID, period.VersionNo, + period.BoardType, period.PeriodKey, locked.Status) + if err != nil { + return false, err + } + affected, err := result.RowsAffected() + if err != nil { + return false, err + } + if affected != 1 { + return false, nil + } + return true, tx.Commit() +} + +func (r *Repository) ListActivityTemplateRewardJobs(ctx context.Context, query domain.RewardJobQuery) ([]domain.RewardJob, int64, error) { + where := []string{"app_code = ?", "template_id = ?"} + args := []any{appcode.FromContext(ctx), strings.TrimSpace(query.TemplateID)} + if query.VersionNo > 0 { + where, args = append(where, "version_no = ?"), append(args, query.VersionNo) + } + if query.BoardType != "" { + where, args = append(where, "board_type = ?"), append(args, query.BoardType) + } + if query.PeriodKey != "" { + where, args = append(where, "period_key = ?"), append(args, query.PeriodKey) + } + if query.Status != "" { + where, args = append(where, "status = ?"), append(args, query.Status) + } + whereSQL := " WHERE " + strings.Join(where, " AND ") + var total int64 + if err := r.db.QueryRowContext(ctx, "SELECT COUNT(*) FROM activity_template_reward_jobs"+whereSQL, args...).Scan(&total); err != nil { + return nil, 0, err + } + page, pageSize := normalizeRuntimePage(query.Page, query.PageSize) + rows, err := r.db.QueryContext(ctx, activityTemplateRewardJobSelect+whereSQL+` + ORDER BY updated_at_ms DESC, reward_job_id DESC LIMIT ? OFFSET ?`, append(args, int(pageSize), int((page-1)*pageSize))...) + if err != nil { + return nil, 0, err + } + defer rows.Close() + items := make([]domain.RewardJob, 0) + for rows.Next() { + item, err := scanActivityTemplateRewardJob(rows) + if err != nil { + return nil, 0, err + } + items = append(items, item) + } + return items, total, rows.Err() +} + +const activityTemplateRewardJobSelect = ` + SELECT app_code, reward_job_id, template_id, template_code, version_no, board_type, period_key, + rank_no, user_id, score, resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), wallet_command_id, wallet_grant_id, status, + failure_reason, attempt_count, max_attempts, next_retry_at_ms, created_at_ms, updated_at_ms, granted_at_ms + FROM activity_template_reward_jobs ` + +const activityTemplateRewardJobLeaseSelect = ` + SELECT app_code, reward_job_id, template_id, template_code, version_no, board_type, period_key, + rank_no, user_id, score, resource_group_id, reward_snapshot_id, + COALESCE(CAST(reward_snapshot_json AS CHAR), ''), wallet_command_id, wallet_grant_id, status, + failure_reason, attempt_count, created_at_ms, updated_at_ms, granted_at_ms, + max_attempts, next_retry_at_ms, locked_by, lock_until_ms + FROM activity_template_reward_jobs ` + +func freezeActivityTemplateRankSnapshot(ctx context.Context, tx *sql.Tx, period domain.RankPeriod, nowMS int64) error { + var leaderboardSize int32 + if err := tx.QueryRowContext(ctx, ` + SELECT leaderboard_size FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?`, + period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey).Scan(&leaderboardSize); err != nil { + return err + } + table, dayClause := "activity_template_user_total_scores", "" + args := []any{period.AppCode, period.TemplateID, period.VersionNo} + if period.BoardType == domain.BoardTypeDaily { + table, dayClause = "activity_template_user_day_scores", " AND task_day = ?" + args = append(args, period.PeriodKey) + } + rows, err := tx.QueryContext(ctx, ` + SELECT user_id, score, gift_count, coin_amount, first_scored_at_ms FROM `+table+` + WHERE app_code = ? AND template_id = ? AND version_no = ?`+dayClause+` + ORDER BY score DESC, first_scored_at_ms ASC, user_id ASC LIMIT ?`, append(args, int(leaderboardSize))...) + if err != nil { + return err + } + type snapshot struct{ userID, score, giftCount, coinAmount, firstMS int64 } + items := make([]snapshot, 0, leaderboardSize) + for rows.Next() { + var item snapshot + if err := rows.Scan(&item.userID, &item.score, &item.giftCount, &item.coinAmount, &item.firstMS); err != nil { + rows.Close() + return err + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + for index, item := range items { + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_rank_snapshots ( + app_code, template_id, template_code, version_no, board_type, period_key, rank_no, + user_id, score, gift_count, coin_amount, first_scored_at_ms, snapshot_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + period.AppCode, period.TemplateID, period.TemplateCode, period.VersionNo, period.BoardType, + period.PeriodKey, index+1, item.userID, item.score, item.giftCount, item.coinAmount, item.firstMS, nowMS); err != nil { + return err + } + } + return nil +} + +func createActivityTemplateRewardJobs(ctx context.Context, tx *sql.Tx, runtime domain.Runtime, period domain.RankPeriod, nowMS int64) error { + rows, err := tx.QueryContext(ctx, ` + SELECT rank_no, user_id, score FROM activity_template_rank_snapshots + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? + ORDER BY rank_no`, period.AppCode, period.TemplateID, period.VersionNo, period.BoardType, period.PeriodKey) + if err != nil { + return err + } + type winner struct { + rank int32 + userID, score int64 + } + winners := make([]winner, 0) + for rows.Next() { + var item winner + if err := rows.Scan(&item.rank, &item.userID, &item.score); err != nil { + rows.Close() + return err + } + winners = append(winners, item) + } + if err := rows.Err(); err != nil { + rows.Close() + return err + } + if err := rows.Close(); err != nil { + return err + } + for _, winner := range winners { + reward, found := rankRewardForRank(runtime.Template.RankRewards, period.BoardType, winner.rank) + if !found || reward.ResourceGroupID <= 0 { + continue + } + rewardSnapshotJSON, err := encodeActivityTemplateRewardSnapshot(reward.RewardSnapshot) + if err != nil { + return err + } + identity := fmt.Sprintf("%s:%s:%d:%s:%s:%d:%d", period.AppCode, period.TemplateID, period.VersionNo, + period.BoardType, period.PeriodKey, winner.rank, winner.userID) + jobID := idgen.New("atreward") + walletCommandID := stableRuntimeID("arank", identity) + if _, err := tx.ExecContext(ctx, ` + INSERT INTO activity_template_reward_jobs ( + app_code, reward_job_id, template_id, template_code, version_no, board_type, period_key, + rank_no, user_id, score, resource_group_id, reward_snapshot_id, reward_snapshot_json, + wallet_command_id, status, max_attempts, next_retry_at_ms, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CAST(? AS JSON), ?, ?, ?, ?, ?, ?)`, + period.AppCode, jobID, period.TemplateID, period.TemplateCode, period.VersionNo, period.BoardType, + period.PeriodKey, winner.rank, winner.userID, winner.score, reward.ResourceGroupID, + reward.RewardSnapshot.SnapshotID, rewardSnapshotJSON, walletCommandID, + domain.ClaimStatusPending, activityTemplateRewardJobDefaultAttempts, nowMS, nowMS, nowMS); err != nil { + return err + } + } + return nil +} + +func rankRewardForRank(rewards []domain.RankReward, boardType string, rank int32) (domain.RankReward, bool) { + for _, reward := range rewards { + if reward.BoardType == boardType && rank >= reward.RankFrom && rank <= reward.RankTo { + return reward, true + } + } + return domain.RankReward{}, false +} + +func getActivityTemplateRankPeriod(ctx context.Context, q activityTemplateQuerier, appCode, templateID string, versionNo int64, boardType, periodKey string, forUpdate bool) (domain.RankPeriod, error) { + query := `SELECT app_code, template_id, template_code, version_no, board_type, period_key, + period_start_ms, period_end_ms, settle_after_ms, leaderboard_size, status, settled_at_ms + FROM activity_template_rank_periods + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ?` + if forUpdate { + query += " FOR UPDATE" + } + var item domain.RankPeriod + err := q.QueryRowContext(ctx, query, appCode, templateID, versionNo, boardType, periodKey). + Scan(&item.AppCode, &item.TemplateID, &item.TemplateCode, &item.VersionNo, &item.BoardType, + &item.PeriodKey, &item.StartMS, &item.EndMS, &item.SettleAfterMS, + &item.LeaderboardSize, &item.Status, &item.SettledAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.RankPeriod{}, xerr.New(xerr.NotFound, "activity template rank period not found") + } + return item, err +} + +func periodLeaderboardSize(period domain.RankPeriod) int32 { + if period.LeaderboardSize <= 0 { + return 100 + } + return period.LeaderboardSize +} + +func getActivityTemplateSnapshotUserEntry(ctx context.Context, q activityTemplateQuerier, runtime domain.Runtime, boardType, periodKey string, userID int64) (domain.LeaderboardEntry, bool, error) { + var item domain.LeaderboardEntry + item.Snapshot = true + err := q.QueryRowContext(ctx, ` + SELECT rank_no, user_id, score, gift_count, coin_amount, first_scored_at_ms + FROM activity_template_rank_snapshots + WHERE app_code = ? AND template_id = ? AND version_no = ? AND board_type = ? AND period_key = ? AND user_id = ?`, + runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, boardType, periodKey, userID). + Scan(&item.RankNo, &item.UserID, &item.Score, &item.GiftCount, &item.CoinAmount, &item.FirstScoredAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.LeaderboardEntry{}, false, nil + } + return item, err == nil, err +} + +func getActivityTemplateLiveUserEntry(ctx context.Context, q activityTemplateQuerier, runtime domain.Runtime, boardType, periodKey string, userID int64) (domain.LeaderboardEntry, bool, error) { + table, dayClause := "activity_template_user_total_scores", "" + args := []any{runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, userID} + if boardType == domain.BoardTypeDaily { + table, dayClause = "activity_template_user_day_scores", " AND task_day = ?" + args = append(args, periodKey) + } + var item domain.LeaderboardEntry + err := q.QueryRowContext(ctx, ` + SELECT user_id, score, gift_count, coin_amount, first_scored_at_ms FROM `+table+` + WHERE app_code = ? AND template_id = ? AND version_no = ? AND user_id = ?`+dayClause, args...). + Scan(&item.UserID, &item.Score, &item.GiftCount, &item.CoinAmount, &item.FirstScoredAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.LeaderboardEntry{}, false, nil + } + if err != nil { + return domain.LeaderboardEntry{}, false, err + } + rankArgs := []any{runtime.Template.AppCode, runtime.Template.TemplateID, runtime.VersionNo, item.Score, item.Score, item.FirstScoredAtMS, item.Score, item.FirstScoredAtMS, item.UserID} + rankDayClause := "" + if boardType == domain.BoardTypeDaily { + rankDayClause = " AND task_day = ?" + rankArgs = append(rankArgs, periodKey) + } + var ahead int64 + if err := q.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM `+table+` + WHERE app_code = ? AND template_id = ? AND version_no = ? + AND (score > ? OR (score = ? AND first_scored_at_ms < ?) OR + (score = ? AND first_scored_at_ms = ? AND user_id < ?))`+rankDayClause, rankArgs...).Scan(&ahead); err != nil { + return domain.LeaderboardEntry{}, false, err + } + item.RankNo = int32(ahead + 1) + return item, true, nil +} + +func scanActivityTemplateRewardJob(row activityTemplateScanner) (domain.RewardJob, error) { + item, _, err := scanActivityTemplateRewardJobOne(row) + return item, err +} + +func scanActivityTemplateRewardJobOne(row activityTemplateScanner) (domain.RewardJob, bool, error) { + var item domain.RewardJob + var rewardSnapshotJSON string + err := row.Scan(&item.AppCode, &item.RewardJobID, &item.TemplateID, &item.TemplateCode, &item.VersionNo, + &item.BoardType, &item.PeriodKey, &item.RankNo, &item.UserID, &item.Score, &item.ResourceGroupID, + &item.RewardSnapshot.SnapshotID, &rewardSnapshotJSON, &item.WalletCommandID, &item.WalletGrantID, + &item.Status, &item.FailureReason, &item.AttemptCount, &item.MaxAttempts, &item.NextRetryAtMS, + &item.CreatedAtMS, &item.UpdatedAtMS, &item.GrantedAtMS) + if errors.Is(err, sql.ErrNoRows) { + return domain.RewardJob{}, false, nil + } + if err == nil { + err = decodeActivityTemplateRewardSnapshot(rewardSnapshotJSON, &item.RewardSnapshot) + } + return item, err == nil, err +} + +func getActivityTemplateRewardJobLease(ctx context.Context, q activityTemplateQuerier, appCode, rewardJobID string, forUpdate bool) (activityTemplateRewardJobLease, bool, error) { + query := activityTemplateRewardJobLeaseSelect + " WHERE app_code = ? AND reward_job_id = ?" + if forUpdate { + query += " FOR UPDATE" + } + return scanActivityTemplateRewardJobLeaseOne(q.QueryRowContext(ctx, query, appCode, rewardJobID)) +} + +func scanActivityTemplateRewardJobLease(row activityTemplateScanner) (activityTemplateRewardJobLease, error) { + item, _, err := scanActivityTemplateRewardJobLeaseOne(row) + return item, err +} + +func scanActivityTemplateRewardJobLeaseOne(row activityTemplateScanner) (activityTemplateRewardJobLease, bool, error) { + var item activityTemplateRewardJobLease + var rewardSnapshotJSON string + err := row.Scan(&item.Job.AppCode, &item.Job.RewardJobID, &item.Job.TemplateID, &item.Job.TemplateCode, + &item.Job.VersionNo, &item.Job.BoardType, &item.Job.PeriodKey, &item.Job.RankNo, &item.Job.UserID, + &item.Job.Score, &item.Job.ResourceGroupID, &item.Job.RewardSnapshot.SnapshotID, &rewardSnapshotJSON, + &item.Job.WalletCommandID, &item.Job.WalletGrantID, &item.Job.Status, &item.Job.FailureReason, + &item.Job.AttemptCount, &item.Job.CreatedAtMS, &item.Job.UpdatedAtMS, &item.Job.GrantedAtMS, + &item.MaxAttempts, &item.NextRetryAtMS, &item.LockedBy, &item.LockUntilMS) + if errors.Is(err, sql.ErrNoRows) { + return activityTemplateRewardJobLease{}, false, nil + } + if err == nil { + item.Job.MaxAttempts = item.MaxAttempts + item.Job.NextRetryAtMS = item.NextRetryAtMS + err = decodeActivityTemplateRewardSnapshot(rewardSnapshotJSON, &item.Job.RewardSnapshot) + } + return item, err == nil, err +} + +func normalizeActivityTemplateRewardLeaseOptions(lockTTL time.Duration, batchSize int32) (time.Duration, int32) { + if lockTTL <= 0 { + lockTTL = activityTemplateRewardJobDefaultLease + } + if batchSize <= 0 { + batchSize = activityTemplateRewardJobDefaultBatch + } + if batchSize > activityTemplateRewardJobMaxBatch { + batchSize = activityTemplateRewardJobMaxBatch + } + return lockTTL, batchSize +} + +func normalizeActivityTemplateRewardMaxAttempts(value int32) int32 { + if value <= 0 { + return activityTemplateRewardJobDefaultAttempts + } + return value +} + +// activityTemplateRewardRetryAtMS applies exponential backoff plus deterministic per-job jitter. Determinism +// makes incident replay and unit tests stable, while hashing the immutable job ID avoids a synchronized retry wave. +func activityTemplateRewardRetryAtMS(rewardJobID string, attemptCount int32, nowMS int64) int64 { + if attemptCount <= 0 { + attemptCount = 1 + } + nominal := activityTemplateRewardJobRetryBase + for attempt := int32(1); attempt < attemptCount && nominal < activityTemplateRewardJobRetryNominalCap; attempt++ { + nominal *= 2 + if nominal > activityTemplateRewardJobRetryNominalCap { + nominal = activityTemplateRewardJobRetryNominalCap + } + } + jitterWindow := nominal / 4 + hasher := fnv.New64a() + _, _ = hasher.Write([]byte(strings.TrimSpace(rewardJobID))) + _, _ = hasher.Write([]byte{0}) + _, _ = hasher.Write([]byte(fmt.Sprintf("%d", attemptCount))) + jitter := time.Duration(0) + if jitterWindow > 0 { + jitter = time.Duration(hasher.Sum64() % uint64(jitterWindow+1)) + } + delay := nominal + jitter + if delay > activityTemplateRewardJobRetryHardCap { + delay = activityTemplateRewardJobRetryHardCap + } + return nowMS + delay.Milliseconds() +} + +func requireActivityTemplateRewardJobMutation(result sql.Result, message string) error { + affected, err := result.RowsAffected() + if err != nil { + return err + } + if affected != 1 { + return xerr.New(xerr.Conflict, message) + } + return nil +} + +func normalizeRuntimePage(page, pageSize int32) (int32, int32) { + if page <= 0 { + page = 1 + } + if pageSize <= 0 { + pageSize = 20 + } + if pageSize > 100 { + pageSize = 100 + } + return page, pageSize +} diff --git a/services/activity-service/internal/storage/mysql/activity_template_stats_outbox_repository.go b/services/activity-service/internal/storage/mysql/activity_template_stats_outbox_repository.go new file mode 100644 index 00000000..6b4c4605 --- /dev/null +++ b/services/activity-service/internal/storage/mysql/activity_template_stats_outbox_repository.go @@ -0,0 +1,100 @@ +package mysql + +import ( + "context" + "database/sql" + "time" + + "hyapp/pkg/xerr" + domain "hyapp/services/activity-service/internal/domain/activitytemplate" +) + +func (r *Repository) ClaimActivityTemplateStatsOutbox(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int) ([]domain.StatsOutboxRecord, error) { + if r == nil || r.db == nil { + return nil, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + if batchSize <= 0 { + batchSize = 100 + } + if lockTTL <= 0 { + lockTTL = 30 * time.Second + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + rows, err := tx.QueryContext(ctx, ` + SELECT outbox_id, event_type, payload, retry_count + FROM activity_template_stats_outbox + WHERE ((status IN (?, ?) AND next_retry_at_ms <= ?) OR (status = ? AND lock_until_ms <= ?)) + ORDER BY created_at_ms, outbox_id + LIMIT ? FOR UPDATE SKIP LOCKED`, outboxStatusPending, outboxStatusFailed, nowMS, outboxStatusRunning, nowMS, batchSize) + if err != nil { + return nil, err + } + items := make([]domain.StatsOutboxRecord, 0, batchSize) + for rows.Next() { + var item domain.StatsOutboxRecord + if err := rows.Scan(&item.OutboxID, &item.EventType, &item.Payload, &item.RetryCount); err != nil { + rows.Close() + return nil, err + } + items = append(items, item) + } + if err := rows.Err(); err != nil { + rows.Close() + return nil, err + } + if err := rows.Close(); err != nil { + return nil, err + } + lockUntil := nowMS + lockTTL.Milliseconds() + for _, item := range items { + if _, err := tx.ExecContext(ctx, ` + UPDATE activity_template_stats_outbox + SET status = ?, locked_by = ?, lock_until_ms = ?, updated_at_ms = ? + WHERE outbox_id = ?`, outboxStatusRunning, workerID, lockUntil, nowMS, item.OutboxID); err != nil { + return nil, err + } + } + if err := tx.Commit(); err != nil { + return nil, err + } + return items, nil +} + +func (r *Repository) MarkActivityTemplateStatsOutboxSent(ctx context.Context, outboxID string, nowMS int64) error { + _, err := r.db.ExecContext(ctx, ` + UPDATE activity_template_stats_outbox + SET status = ?, locked_by = '', lock_until_ms = 0, last_error = '', updated_at_ms = ? + WHERE outbox_id = ?`, outboxStatusSent, nowMS, outboxID) + return err +} + +func (r *Repository) MarkActivityTemplateStatsOutboxFailed(ctx context.Context, outboxID, reason string, nowMS int64) error { + var retryCount int32 + err := r.db.QueryRowContext(ctx, `SELECT retry_count FROM activity_template_stats_outbox WHERE outbox_id = ?`, outboxID).Scan(&retryCount) + if err == sql.ErrNoRows { + return nil + } + if err != nil { + return err + } + retryCount++ + backoff := time.Second * time.Duration(1< 0 { + server.activityTemplate = activityTemplateSvc[0] + } return server } @@ -130,6 +135,11 @@ func (s *BroadcastServer) ConsumeRoomEvent(ctx context.Context, req *activityv1. return nil, xerr.ToGRPCError(err) } } + if s.activityTemplate != nil { + if _, err := s.activityTemplate.HandleRoomEvent(ctx, req.GetEnvelope()); err != nil { + return nil, xerr.ToGRPCError(err) + } + } if s.agencyOpen != nil { if _, err := s.agencyOpen.HandleRoomEvent(ctx, req.GetEnvelope()); err != nil { return nil, xerr.ToGRPCError(err) diff --git a/services/activity-service/internal/transport/grpc/cron_server.go b/services/activity-service/internal/transport/grpc/cron_server.go index 1f6965dd..f1ae258d 100644 --- a/services/activity-service/internal/transport/grpc/cron_server.go +++ b/services/activity-service/internal/transport/grpc/cron_server.go @@ -8,6 +8,7 @@ import ( "hyapp/pkg/appcode" "hyapp/pkg/xerr" achievementservice "hyapp/services/activity-service/internal/service/achievement" + activitytemplateservice "hyapp/services/activity-service/internal/service/activitytemplate" agencyopeningservice "hyapp/services/activity-service/internal/service/agencyopening" cpweeklyrankservice "hyapp/services/activity-service/internal/service/cpweeklyrank" growthservice "hyapp/services/activity-service/internal/service/growth" @@ -20,17 +21,18 @@ import ( type CronServer struct { activityv1.UnimplementedActivityCronServiceServer - message *messageservice.Service - growth *growthservice.Service - achievement *achievementservice.Service - weeklyStar *weeklystarservice.Service - roomReward *roomturnoverrewardservice.Service - agencyOpen *agencyopeningservice.Service - cpWeekly *cpweeklyrankservice.Service + message *messageservice.Service + growth *growthservice.Service + achievement *achievementservice.Service + weeklyStar *weeklystarservice.Service + roomReward *roomturnoverrewardservice.Service + agencyOpen *agencyopeningservice.Service + cpWeekly *cpweeklyrankservice.Service + activityTemplate *activitytemplateservice.Service } // NewCronServer creates the internal cron adapter without exposing message storage. -func NewCronServer(messageSvc *messageservice.Service, growthSvc *growthservice.Service, achievementSvc *achievementservice.Service, weeklyStarSvc *weeklystarservice.Service, roomRewardSvc *roomturnoverrewardservice.Service, agencyOpeningSvc *agencyopeningservice.Service, cpWeeklyRankSvc *cpweeklyrankservice.Service) *CronServer { +func NewCronServer(messageSvc *messageservice.Service, growthSvc *growthservice.Service, achievementSvc *achievementservice.Service, weeklyStarSvc *weeklystarservice.Service, roomRewardSvc *roomturnoverrewardservice.Service, agencyOpeningSvc *agencyopeningservice.Service, cpWeeklyRankSvc *cpweeklyrankservice.Service, activityTemplateSvc ...*activitytemplateservice.Service) *CronServer { server := &CronServer{message: messageSvc} server.growth = growthSvc server.achievement = achievementSvc @@ -38,9 +40,27 @@ func NewCronServer(messageSvc *messageservice.Service, growthSvc *growthservice. server.roomReward = roomRewardSvc server.agencyOpen = agencyOpeningSvc server.cpWeekly = cpWeeklyRankSvc + if len(activityTemplateSvc) > 0 { + server.activityTemplate = activityTemplateSvc[0] + } return server } +// ProcessActivityTemplateSettlementBatch closes due UTC daily/total boards, freezes immutable +// snapshots and retries wallet resource-group grants with stable commands. +func (s *CronServer) ProcessActivityTemplateSettlementBatch(ctx context.Context, req *activityv1.CronBatchRequest) (*activityv1.CronBatchResponse, error) { + ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode()) + if s.activityTemplate == nil { + return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "activity template runtime service is not configured")) + } + claimed, processed, success, failure, hasMore, err := s.activityTemplate.ProcessRuntimeSettlementBatch( + ctx, req.GetRunId(), req.GetWorkerId(), req.GetBatchSize(), durationFromMillis(req.GetLockTtlMs())) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return &activityv1.CronBatchResponse{ClaimedCount: claimed, ProcessedCount: processed, SuccessCount: success, FailureCount: failure, HasMore: hasMore}, nil +} + // ProcessMessageFanoutBatch claims and processes one message fanout page. func (s *CronServer) ProcessMessageFanoutBatch(ctx context.Context, req *activityv1.CronBatchRequest) (*activityv1.CronBatchResponse, error) { ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode()) diff --git a/services/cron-service/configs/config.docker.yaml b/services/cron-service/configs/config.docker.yaml index 1bb51067..3ea0efa9 100644 --- a/services/cron-service/configs/config.docker.yaml +++ b/services/cron-service/configs/config.docker.yaml @@ -57,6 +57,12 @@ tasks: timeout: "20s" lock_ttl: "1m" batch_size: 50 + activity_template_settlement: + enabled: true + interval: "5s" + timeout: "30s" + lock_ttl: "1m" + batch_size: 50 agency_opening_settlement: enabled: true interval: "5s" diff --git a/services/cron-service/configs/config.tencent.example.yaml b/services/cron-service/configs/config.tencent.example.yaml index 411dd7f6..806dbeac 100644 --- a/services/cron-service/configs/config.tencent.example.yaml +++ b/services/cron-service/configs/config.tencent.example.yaml @@ -57,6 +57,12 @@ tasks: timeout: "20s" lock_ttl: "1m" batch_size: 50 + activity_template_settlement: + enabled: true + interval: "5s" + timeout: "30s" + lock_ttl: "1m" + batch_size: 50 agency_opening_settlement: enabled: true interval: "5s" diff --git a/services/cron-service/configs/config.yaml b/services/cron-service/configs/config.yaml index 932b0269..2a6bb3b9 100644 --- a/services/cron-service/configs/config.yaml +++ b/services/cron-service/configs/config.yaml @@ -57,6 +57,12 @@ tasks: timeout: "20s" lock_ttl: "1m" batch_size: 50 + activity_template_settlement: + enabled: true + interval: "5s" + timeout: "30s" + lock_ttl: "1m" + batch_size: 50 agency_opening_settlement: enabled: true interval: "5s" diff --git a/services/cron-service/internal/app/app.go b/services/cron-service/internal/app/app.go index 987893db..e4980126 100644 --- a/services/cron-service/internal/app/app.go +++ b/services/cron-service/internal/app/app.go @@ -115,12 +115,12 @@ func New(cfg config.Config) (*App, error) { gameCron := integration.NewGameCronClient(gamev1.NewGameCronServiceClient(gameConn)) walletCron := integration.NewWalletCronClient(walletv1.NewWalletCronServiceClient(walletConn)) taskScheduler := scheduler.New(cfg.NodeID, cfg.Tasks, repository, map[string]scheduler.Handler{ - "login_ip_risk": userCron.ProcessLoginIPRiskBatch, - "user_region_rebuild": userCron.ProcessRegionRebuildBatch, + "login_ip_risk": userCron.ProcessLoginIPRiskBatch, + "user_region_rebuild": userCron.ProcessRegionRebuildBatch, "mic_open_session_compensation": userCron.CompensateMicOpenSessions, "room_open_session_compensation": userCron.CompensateRoomOpenSessions, - "manager_user_block_expiry": userCron.ExpireManagerUserBlocks, - "admin_user_ban_expiry": userCron.ExpireAdminUserBans, + "manager_user_block_expiry": userCron.ExpireManagerUserBlocks, + "admin_user_ban_expiry": userCron.ExpireAdminUserBans, // CP 榜单任务只占 cron 租约并调用 user-service;真实 MySQL 读取、wallet 头像框补齐和 Redis 替换都在 user-service 内完成。 "cp_intimacy_leaderboard": userCron.RefreshCPIntimacyLeaderboard, "message_fanout": activityCron.ProcessMessageFanoutBatch, @@ -128,6 +128,7 @@ func New(cfg config.Config) (*App, error) { "temporary_growth_level": activityCron.ProcessTemporaryLevelBatch, "achievement_reward": activityCron.ProcessAchievementRewardBatch, "weekly_star_settlement": activityCron.ProcessWeeklyStarSettlementBatch, + "activity_template_settlement": activityCron.ProcessActivityTemplateSettlementBatch, "agency_opening_settlement": activityCron.ProcessAgencyOpeningSettlementBatch, "cp_weekly_rank_settlement": activityCron.ProcessCPWeeklyRankSettlementBatch, "room_turnover_reward_settlement": activityCron.ProcessRoomTurnoverRewardSettlementBatch, diff --git a/services/cron-service/internal/config/config.go b/services/cron-service/internal/config/config.go index bf1c1831..198ccae3 100644 --- a/services/cron-service/internal/config/config.go +++ b/services/cron-service/internal/config/config.go @@ -179,6 +179,13 @@ func defaultTasks() map[string]TaskConfig { LockTTL: "1m", BatchSize: 50, }, + "activity_template_settlement": { + Enabled: true, + Interval: "5s", + Timeout: "30s", + LockTTL: "1m", + BatchSize: 50, + }, "agency_opening_settlement": { Enabled: true, Interval: "5s", diff --git a/services/cron-service/internal/integration/activity.go b/services/cron-service/internal/integration/activity.go index 174bb97e..878c5ff9 100644 --- a/services/cron-service/internal/integration/activity.go +++ b/services/cron-service/internal/integration/activity.go @@ -63,6 +63,15 @@ func (c *ActivityCronClient) ProcessWeeklyStarSettlementBatch(ctx context.Contex return activityCronBatchResult(resp), nil } +// ProcessActivityTemplateSettlementBatch handles immutable-version daily and total leaderboard rewards. +func (c *ActivityCronClient) ProcessActivityTemplateSettlementBatch(ctx context.Context, req scheduler.BatchRequest) (scheduler.BatchResult, error) { + resp, err := c.client.ProcessActivityTemplateSettlementBatch(ctx, activityCronBatchRequest(req)) + if err != nil { + return scheduler.BatchResult{}, err + } + return activityCronBatchResult(resp), nil +} + // ProcessAgencyOpeningSettlementBatch handles ended agency-opening leaderboard rewards. func (c *ActivityCronClient) ProcessAgencyOpeningSettlementBatch(ctx context.Context, req scheduler.BatchRequest) (scheduler.BatchResult, error) { resp, err := c.client.ProcessAgencyOpeningSettlementBatch(ctx, activityCronBatchRequest(req)) diff --git a/services/gateway-service/internal/app/app.go b/services/gateway-service/internal/app/app.go index 1fbb600f..f008cc47 100644 --- a/services/gateway-service/internal/app/app.go +++ b/services/gateway-service/internal/app/app.go @@ -125,6 +125,7 @@ func New(cfg config.Config) (*App, error) { var weeklyStarClient client.WeeklyStarClient = client.NewGRPCWeeklyStarClient(activityConn) var cpWeeklyRankClient client.CPWeeklyRankClient = client.NewGRPCCPWeeklyRankClient(activityConn) var agencyOpeningClient client.AgencyOpeningClient = client.NewGRPCAgencyOpeningClient(activityConn) + var activityTemplateRuntimeClient client.ActivityTemplateRuntimeClient = client.NewGRPCActivityTemplateRuntimeClient(activityConn) var wheelClient client.WheelClient = client.NewGRPCWheelClient(activityConn) var broadcastClient client.BroadcastClient = client.NewGRPCBroadcastClient(activityConn) var gameClient client.GameClient = client.NewGRPCGameClient(gameConn) @@ -228,6 +229,7 @@ func New(cfg config.Config) (*App, error) { handler.SetWeeklyStarClient(weeklyStarClient) handler.SetCPWeeklyRankClient(cpWeeklyRankClient) handler.SetAgencyOpeningClient(agencyOpeningClient) + handler.SetActivityTemplateRuntimeClient(activityTemplateRuntimeClient) handler.SetWheelClient(wheelClient) handler.SetBroadcastClient(broadcastClient) handler.SetGameClient(gameClient) diff --git a/services/gateway-service/internal/client/activity_template_runtime_client.go b/services/gateway-service/internal/client/activity_template_runtime_client.go new file mode 100644 index 00000000..7f7d7ebf --- /dev/null +++ b/services/gateway-service/internal/client/activity_template_runtime_client.go @@ -0,0 +1,46 @@ +package client + +import ( + "context" + + "google.golang.org/grpc" + activityv1 "hyapp.local/api/proto/activity/v1" +) + +// ActivityTemplateRuntimeClient 是 gateway 对活动模版 App 运行态的唯一内部依赖。 +// gateway 只负责鉴权身份、可信区域和 HTTP 协议转换;版本命中、UTC 日任务、领奖幂等和榜单事实都由 activity-service 决定。 +type ActivityTemplateRuntimeClient interface { + GetCurrentActivityTemplate(ctx context.Context, req *activityv1.GetCurrentActivityTemplateRequest) (*activityv1.GetCurrentActivityTemplateResponse, error) + VisitActivityTemplate(ctx context.Context, req *activityv1.VisitActivityTemplateRequest) (*activityv1.VisitActivityTemplateResponse, error) + ListActivityTemplateTasks(ctx context.Context, req *activityv1.ListActivityTemplateTasksRequest) (*activityv1.ListActivityTemplateTasksResponse, error) + ClaimActivityTemplateTaskReward(ctx context.Context, req *activityv1.ClaimActivityTemplateTaskRewardRequest) (*activityv1.ClaimActivityTemplateTaskRewardResponse, error) + ListActivityTemplateLeaderboard(ctx context.Context, req *activityv1.ListActivityTemplateLeaderboardRequest) (*activityv1.ListActivityTemplateLeaderboardResponse, error) +} + +type grpcActivityTemplateRuntimeClient struct { + client activityv1.ActivityTemplateRuntimeServiceClient +} + +func NewGRPCActivityTemplateRuntimeClient(conn *grpc.ClientConn) ActivityTemplateRuntimeClient { + return &grpcActivityTemplateRuntimeClient{client: activityv1.NewActivityTemplateRuntimeServiceClient(conn)} +} + +func (c *grpcActivityTemplateRuntimeClient) GetCurrentActivityTemplate(ctx context.Context, req *activityv1.GetCurrentActivityTemplateRequest) (*activityv1.GetCurrentActivityTemplateResponse, error) { + return c.client.GetCurrentActivityTemplate(ctx, req) +} + +func (c *grpcActivityTemplateRuntimeClient) VisitActivityTemplate(ctx context.Context, req *activityv1.VisitActivityTemplateRequest) (*activityv1.VisitActivityTemplateResponse, error) { + return c.client.VisitActivityTemplate(ctx, req) +} + +func (c *grpcActivityTemplateRuntimeClient) ListActivityTemplateTasks(ctx context.Context, req *activityv1.ListActivityTemplateTasksRequest) (*activityv1.ListActivityTemplateTasksResponse, error) { + return c.client.ListActivityTemplateTasks(ctx, req) +} + +func (c *grpcActivityTemplateRuntimeClient) ClaimActivityTemplateTaskReward(ctx context.Context, req *activityv1.ClaimActivityTemplateTaskRewardRequest) (*activityv1.ClaimActivityTemplateTaskRewardResponse, error) { + return c.client.ClaimActivityTemplateTaskReward(ctx, req) +} + +func (c *grpcActivityTemplateRuntimeClient) ListActivityTemplateLeaderboard(ctx context.Context, req *activityv1.ListActivityTemplateLeaderboardRequest) (*activityv1.ListActivityTemplateLeaderboardResponse, error) { + return c.client.ListActivityTemplateLeaderboard(ctx, req) +} diff --git a/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler.go b/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler.go new file mode 100644 index 00000000..90e87e5d --- /dev/null +++ b/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler.go @@ -0,0 +1,780 @@ +package activityapi + +import ( + "encoding/json" + "math" + "net/http" + "strconv" + "strings" + "time" + + "golang.org/x/text/language" + activityv1 "hyapp.local/api/proto/activity/v1" + userv1 "hyapp.local/api/proto/user/v1" + "hyapp/services/gateway-service/internal/auth" + "hyapp/services/gateway-service/internal/transport/http/httpkit" +) + +const activityTemplateUTCDayLayout = "2006-01-02" + +type activityTemplateLocaleData struct { + Locale string `json:"locale"` + Title string `json:"title"` + Rules string `json:"rules"` +} + +type activityTemplateGiftData struct { + GiftID string `json:"gift_id"` + SortOrder int32 `json:"sort_order"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + CoinPrice int64 `json:"coin_price"` + PriceVersion string `json:"price_version"` +} + +type activityTemplateRewardItemData struct { + ItemType string `json:"item_type"` + ResourceID int64 `json:"resource_id"` + ResourceType string `json:"resource_type"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + Quantity int64 `json:"quantity"` + DurationMS int64 `json:"duration_ms"` + WalletAssetType string `json:"wallet_asset_type"` + WalletAssetAmount int64 `json:"wallet_asset_amount"` + SortOrder int32 `json:"sort_order"` +} + +type activityTemplateTaskDefinitionData struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TargetValue int64 `json:"target_value"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardName string `json:"reward_name"` + RewardItems []activityTemplateRewardItemData `json:"reward_items"` +} + +type activityTemplateRankRewardData struct { + BoardType string `json:"board_type"` + RankFrom int32 `json:"rank_from"` + RankTo int32 `json:"rank_to"` + ResourceGroupID int64 `json:"resource_group_id"` + SortOrder int32 `json:"sort_order"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardName string `json:"reward_name"` + RewardItems []activityTemplateRewardItemData `json:"reward_items"` +} + +type activityTemplateAssetData struct { + AssetKey string `json:"asset_key"` + Locale string `json:"locale"` + URL string `json:"url"` + MediaType string `json:"media_type"` + SortOrder int32 `json:"sort_order"` +} + +// activityTemplateRuntimeData is deliberately smaller than the admin aggregate. App clients receive +// only the immutable published presentation/rule snapshot and runtime window, never admin IDs, +// optimistic revisions or mutable draft metadata. +type activityTemplateRuntimeData struct { + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + ActivityType string `json:"activity_type"` + Status string `json:"status"` + LifecycleStatus string `json:"lifecycle_status"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + AllRegions bool `json:"all_regions"` + RegionIDs []int64 `json:"region_ids"` + Locales []activityTemplateLocaleData `json:"locales"` + Locale *activityTemplateLocaleData `json:"locale,omitempty"` + Gifts []activityTemplateGiftData `json:"gifts"` + Tasks []activityTemplateTaskDefinitionData `json:"tasks"` + DailyLeaderboardSize int32 `json:"daily_leaderboard_size"` + TotalLeaderboardSize int32 `json:"total_leaderboard_size"` + RankRewards []activityTemplateRankRewardData `json:"rank_rewards"` + Assets []activityTemplateAssetData `json:"assets"` + DisplayConfig json.RawMessage `json:"display_config"` + VersionNo int64 `json:"version_no"` + RuntimeFromMS int64 `json:"runtime_from_ms"` + RuntimeToMS int64 `json:"runtime_to_ms"` + ServerTimeMS int64 `json:"server_time_ms"` +} + +type activityTemplateRuntimeTaskData struct { + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + VersionNo int64 `json:"version_no"` + TaskDay string `json:"task_day"` + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TargetValue int64 `json:"target_value"` + ProgressValue int64 `json:"progress_value"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + Status string `json:"status"` + Claimable bool `json:"claimable"` + CompletedAtMS int64 `json:"completed_at_ms"` + ClaimedAtMS int64 `json:"claimed_at_ms"` + SortOrder int32 `json:"sort_order"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardName string `json:"reward_name"` + RewardItems []activityTemplateRewardItemData `json:"reward_items"` +} + +type activityTemplateTaskClaimData struct { + ClaimID string `json:"claim_id"` + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + VersionNo int64 `json:"version_no"` + TaskDay string `json:"task_day"` + TaskKey string `json:"task_key"` + UserID string `json:"user_id"` + RewardResourceGroupID int64 `json:"reward_resource_group_id"` + Status string `json:"status"` + CreatedAtMS int64 `json:"created_at_ms"` + UpdatedAtMS int64 `json:"updated_at_ms"` + GrantedAtMS int64 `json:"granted_at_ms"` + RewardSnapshotID string `json:"reward_snapshot_id"` + RewardName string `json:"reward_name"` + RewardItems []activityTemplateRewardItemData `json:"reward_items"` +} + +type activityTemplateLeaderboardUserData struct { + UserID string `json:"user_id"` + DisplayUserID string `json:"display_user_id"` + Username string `json:"username"` + Avatar string `json:"avatar"` +} + +type activityTemplateLeaderboardEntryData struct { + RankNo int32 `json:"rank_no"` + UserID string `json:"user_id"` + Score int64 `json:"score"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + FirstScoredAtMS int64 `json:"first_scored_at_ms"` + Snapshot bool `json:"snapshot"` + User *activityTemplateLeaderboardUserData `json:"user,omitempty"` +} + +type activityTemplateVisitBody struct { + CommandID string `json:"command_id"` + VersionNo int64 `json:"version_no"` +} + +type activityTemplateTaskClaimBody struct { + TaskDay string `json:"task_day"` + CommandID string `json:"command_id"` + VersionNo int64 `json:"version_no"` +} + +type activityTemplateCurrentData struct { + Found bool `json:"found"` + Runtime *activityTemplateRuntimeData `json:"runtime,omitempty"` +} + +type activityTemplateVisitData struct { + Runtime *activityTemplateRuntimeData `json:"runtime,omitempty"` + Tasks []activityTemplateRuntimeTaskData `json:"tasks"` + FirstVisit bool `json:"first_visit"` +} + +type activityTemplateTasksData struct { + Runtime *activityTemplateRuntimeData `json:"runtime,omitempty"` + Tasks []activityTemplateRuntimeTaskData `json:"tasks"` + NextRefreshAtMS int64 `json:"next_refresh_at_ms"` +} + +type activityTemplateClaimData struct { + Claim *activityTemplateTaskClaimData `json:"claim,omitempty"` + Claimed bool `json:"claimed"` +} + +type activityTemplateLeaderboardData struct { + Runtime *activityTemplateRuntimeData `json:"runtime,omitempty"` + BoardType string `json:"board_type"` + PeriodKey string `json:"period_key"` + PeriodStartMS int64 `json:"period_start_ms"` + PeriodEndMS int64 `json:"period_end_ms"` + SettleAfterMS int64 `json:"settle_after_ms"` + PeriodStatus string `json:"period_status"` + Entries []activityTemplateLeaderboardEntryData `json:"entries"` + MyEntry *activityTemplateLeaderboardEntryData `json:"my_entry,omitempty"` + Total int64 `json:"total"` + Page int32 `json:"page"` + PageSize int32 `json:"page_size"` +} + +// getCurrentActivityTemplate resolves region from the authenticated user's current profile. A client +// cannot probe another region by crafting a query parameter, which keeps rollout targeting identical +// between page configuration, task progress and gift-event attribution. +func (h *Handler) getCurrentActivityTemplate(writer http.ResponseWriter, request *http.Request) { + if h.activityTemplateRuntime == nil || h.userProfileClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + userID := auth.UserIDFromContext(request.Context()) + regionID, ok := h.resolveActivityTemplateRegionID(writer, request, userID) + if !ok { + return + } + locale := activityTemplateRequestLocale(request) + resp, err := h.activityTemplateRuntime.GetCurrentActivityTemplate(request.Context(), &activityv1.GetCurrentActivityTemplateRequest{ + Meta: httpkit.ActivityMeta(request), UserId: userID, RegionId: regionID, Locale: locale, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + data := activityTemplateCurrentData{Found: resp.GetFound()} + if resp.GetRuntime() != nil { + runtime := activityTemplateRuntimeFromProto(resp.GetRuntime(), locale) + data.Runtime = &runtime + } + httpkit.WriteOK(writer, request, data) +} + +// visitActivityTemplate records the explicit daily_visit fact. request_id remains tracing metadata; +// only the client-provided command_id is allowed to define replay identity across HTTP retries. +func (h *Handler) visitActivityTemplate(writer http.ResponseWriter, request *http.Request) { + if h.activityTemplateRuntime == nil || h.userProfileClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + templateCode := strings.TrimSpace(request.PathValue("template_code")) + var body activityTemplateVisitBody + if !httpkit.Decode(writer, request, &body) { + return + } + body.CommandID = strings.TrimSpace(body.CommandID) + if templateCode == "" || body.CommandID == "" || body.VersionNo <= 0 { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + userID := auth.UserIDFromContext(request.Context()) + regionID, ok := h.resolveActivityTemplateRegionID(writer, request, userID) + if !ok { + return + } + resp, err := h.activityTemplateRuntime.VisitActivityTemplate(request.Context(), &activityv1.VisitActivityTemplateRequest{ + Meta: httpkit.ActivityMeta(request), UserId: userID, RegionId: regionID, TemplateCode: templateCode, + CommandId: body.CommandID, VersionNo: body.VersionNo, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + httpkit.WriteOK(writer, request, activityTemplateVisitData{ + Runtime: activityTemplateRuntimePointerFromProto(resp.GetRuntime(), activityTemplateRequestLocale(request)), + Tasks: activityTemplateRuntimeTasksFromProto(resp.GetTasks()), FirstVisit: resp.GetFirstVisit(), + }) +} + +func (h *Handler) listActivityTemplateTasks(writer http.ResponseWriter, request *http.Request) { + if h.activityTemplateRuntime == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + templateCode := strings.TrimSpace(request.PathValue("template_code")) + taskDay, ok := normalizeOptionalActivityTemplateUTCDay(request.URL.Query().Get("task_day")) + versionNo, versionOK := optionalActivityTemplateVersionQuery(request) + if templateCode == "" || !ok || !versionOK { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + userID := auth.UserIDFromContext(request.Context()) + regionID := int64(0) + if versionNo == 0 { + var regionOK bool + regionID, regionOK = h.resolveActivityTemplateRegionID(writer, request, userID) + if !regionOK { + return + } + } + resp, err := h.activityTemplateRuntime.ListActivityTemplateTasks(request.Context(), &activityv1.ListActivityTemplateTasksRequest{ + Meta: httpkit.ActivityMeta(request), UserId: userID, RegionId: regionID, TemplateCode: templateCode, + TaskDay: taskDay, VersionNo: versionNo, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + httpkit.WriteOK(writer, request, activityTemplateTasksData{ + Runtime: activityTemplateRuntimePointerFromProto(resp.GetRuntime(), activityTemplateRequestLocale(request)), + Tasks: activityTemplateRuntimeTasksFromProto(resp.GetTasks()), NextRefreshAtMS: resp.GetNextRefreshAtMs(), + }) +} + +func (h *Handler) claimActivityTemplateTask(writer http.ResponseWriter, request *http.Request) { + if h.activityTemplateRuntime == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + templateCode := strings.TrimSpace(request.PathValue("template_code")) + taskKey := strings.TrimSpace(request.PathValue("task_key")) + var body activityTemplateTaskClaimBody + if !httpkit.Decode(writer, request, &body) { + return + } + taskDay, validDay := normalizeRequiredActivityTemplateUTCDay(body.TaskDay) + body.CommandID = strings.TrimSpace(body.CommandID) + if templateCode == "" || taskKey == "" || !validDay || body.CommandID == "" || body.VersionNo <= 0 { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + userID := auth.UserIDFromContext(request.Context()) + resp, err := h.activityTemplateRuntime.ClaimActivityTemplateTaskReward(request.Context(), &activityv1.ClaimActivityTemplateTaskRewardRequest{ + Meta: httpkit.ActivityMeta(request), UserId: userID, RegionId: 0, TemplateCode: templateCode, + TaskDay: taskDay, TaskKey: taskKey, CommandId: body.CommandID, VersionNo: body.VersionNo, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + httpkit.WriteOK(writer, request, activityTemplateClaimData{ + Claim: activityTemplateTaskClaimPointerFromProto(resp.GetClaim()), Claimed: resp.GetClaimed(), + }) +} + +func (h *Handler) listActivityTemplateDailyLeaderboard(writer http.ResponseWriter, request *http.Request) { + h.listActivityTemplateLeaderboard(writer, request, "daily") +} + +func (h *Handler) listActivityTemplateTotalLeaderboard(writer http.ResponseWriter, request *http.Request) { + h.listActivityTemplateLeaderboard(writer, request, "total") +} + +func (h *Handler) listActivityTemplateLeaderboard(writer http.ResponseWriter, request *http.Request, boardType string) { + if h.activityTemplateRuntime == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + templateCode := strings.TrimSpace(request.PathValue("template_code")) + page, pageOK := httpkit.PositiveInt32Query(request, "page", 1) + pageSize, pageSizeOK := httpkit.PositiveInt32Query(request, "page_size", 50) + versionNo, versionOK := optionalActivityTemplateVersionQuery(request) + if pageSize > 100 { + pageSize = 100 + } + periodKey := "total" + periodOK := true + if boardType == "daily" { + periodKey, periodOK = normalizeOptionalActivityTemplateUTCDay(request.URL.Query().Get("period_key")) + } + if templateCode == "" || !pageOK || !pageSizeOK || !periodOK || !versionOK { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + userID := auth.UserIDFromContext(request.Context()) + regionID := int64(0) + if versionNo == 0 { + var regionOK bool + regionID, regionOK = h.resolveActivityTemplateRegionID(writer, request, userID) + if !regionOK { + return + } + } + resp, err := h.activityTemplateRuntime.ListActivityTemplateLeaderboard(request.Context(), &activityv1.ListActivityTemplateLeaderboardRequest{ + Meta: httpkit.ActivityMeta(request), UserId: userID, RegionId: regionID, TemplateCode: templateCode, + BoardType: boardType, PeriodKey: periodKey, Page: page, PageSize: pageSize, VersionNo: versionNo, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + ids := activityTemplateLeaderboardUserIDs(resp.GetEntries(), resp.GetMyEntry()) + users := h.resolveActivityTemplateLeaderboardUsers(request, ids) + data := activityTemplateLeaderboardData{ + Runtime: activityTemplateRuntimePointerFromProto(resp.GetRuntime(), activityTemplateRequestLocale(request)), + BoardType: resp.GetBoardType(), PeriodKey: resp.GetPeriodKey(), PeriodStartMS: resp.GetPeriodStartMs(), + PeriodEndMS: resp.GetPeriodEndMs(), SettleAfterMS: resp.GetSettleAfterMs(), PeriodStatus: resp.GetPeriodStatus(), + Entries: activityTemplateLeaderboardEntriesFromProto(resp.GetEntries(), users), + Total: resp.GetTotal(), Page: page, PageSize: pageSize, + } + if resp.GetMyEntry() != nil { + entry := activityTemplateLeaderboardEntryFromProto(resp.GetMyEntry(), users) + data.MyEntry = &entry + } + httpkit.WriteOK(writer, request, data) +} + +func optionalActivityTemplateVersionQuery(request *http.Request) (int64, bool) { + raw := strings.TrimSpace(request.URL.Query().Get("version_no")) + if raw == "" { + return 0, true + } + versionNo, err := strconv.ParseInt(raw, 10, 64) + return versionNo, err == nil && versionNo > 0 +} + +func (h *Handler) resolveActivityTemplateRegionID(writer http.ResponseWriter, request *http.Request, userID int64) (int64, bool) { + if h.userProfileClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return 0, false + } + resp, err := h.userProfileClient.GetUser(request.Context(), &userv1.GetUserRequest{ + Meta: httpkit.UserMeta(request, ""), UserId: userID, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return 0, false + } + regionID := resp.GetUser().GetRegionId() + if regionID <= 0 { + // A completed profile without a canonical region is inconsistent upstream state. Do not accept a + // caller supplied fallback, because that would bypass regional publication targeting. + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return 0, false + } + return regionID, true +} + +func (h *Handler) resolveActivityTemplateLeaderboardUsers(request *http.Request, ids []int64) map[int64]activityTemplateLeaderboardUserData { + users := make(map[int64]activityTemplateLeaderboardUserData) + ids = uniquePositiveIDs(ids) + if len(ids) == 0 || h.userProfileClient == nil { + return users + } + resp, err := h.userProfileClient.BatchGetUsers(request.Context(), &userv1.BatchGetUsersRequest{ + Meta: httpkit.UserMeta(request, ""), UserIds: ids, + }) + if err != nil { + // Ranking score/order are owned by activity-service. Profile decoration is best effort so a + // transient user-service read failure cannot make an otherwise valid ranking page unavailable. + return users + } + for _, item := range resp.GetUsers() { + users[item.GetUserId()] = activityTemplateLeaderboardUserData{ + UserID: strconv.FormatInt(item.GetUserId(), 10), DisplayUserID: item.GetDisplayUserId(), + Username: item.GetUsername(), Avatar: item.GetAvatar(), + } + } + return users +} + +func activityTemplateRuntimeFromProto(runtime *activityv1.ActivityTemplateRuntime, requestedLocale string) activityTemplateRuntimeData { + data := activityTemplateRuntimeData{ + RegionIDs: []int64{}, Locales: []activityTemplateLocaleData{}, Gifts: []activityTemplateGiftData{}, + Tasks: []activityTemplateTaskDefinitionData{}, RankRewards: []activityTemplateRankRewardData{}, + Assets: []activityTemplateAssetData{}, DisplayConfig: json.RawMessage(`{}`), + } + if runtime == nil || runtime.GetTemplate() == nil { + return data + } + template := runtime.GetTemplate() + data.TemplateID = template.GetTemplateId() + data.TemplateCode = template.GetTemplateCode() + data.ActivityType = template.GetActivityType() + data.Status = template.GetStatus() + data.LifecycleStatus = template.GetLifecycleStatus() + data.StartMS = template.GetStartMs() + data.EndMS = template.GetEndMs() + data.AllRegions = template.GetAllRegions() + data.RegionIDs = append(data.RegionIDs, template.GetRegionIds()...) + seenLocales := make(map[string]struct{}, len(template.GetLocales())) + for _, item := range template.GetLocales() { + locale, valid := canonicalActivityTemplateLanguageTag(item.GetLocale()) + if !valid { + // 发布写路径会校验 locale;读取侧仍需失败关闭,避免旧数据或跨版本脏数据把非法 tag 暴露给 App。 + continue + } + key := strings.ToLower(locale) + if _, exists := seenLocales[key]; exists { + continue + } + seenLocales[key] = struct{}{} + data.Locales = append(data.Locales, activityTemplateLocaleData{Locale: locale, Title: item.GetTitle(), Rules: item.GetRules()}) + } + if selected, ok := selectActivityTemplateLocale(data.Locales, requestedLocale); ok { + data.Locale = &selected + } + for _, item := range template.GetGifts() { + data.Gifts = append(data.Gifts, activityTemplateGiftData{ + GiftID: item.GetGiftId(), SortOrder: item.GetSortOrder(), Name: item.GetName(), IconURL: item.GetIconUrl(), + CoinPrice: item.GetCoinPrice(), PriceVersion: item.GetPriceVersion(), + }) + } + for _, item := range template.GetTasks() { + data.Tasks = append(data.Tasks, activityTemplateTaskDefinitionData{ + TaskKey: item.GetTaskKey(), TaskType: item.GetTaskType(), TargetValue: item.GetTargetValue(), + RewardResourceGroupID: item.GetRewardResourceGroupId(), SortOrder: item.GetSortOrder(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardName: item.GetRewardName(), + RewardItems: activityTemplateRewardItemsFromProto(item.GetRewardItems()), + }) + } + data.DailyLeaderboardSize = template.GetDailyLeaderboardSize() + data.TotalLeaderboardSize = template.GetTotalLeaderboardSize() + for _, item := range template.GetRankRewards() { + data.RankRewards = append(data.RankRewards, activityTemplateRankRewardData{ + BoardType: item.GetBoardType(), RankFrom: item.GetRankFrom(), RankTo: item.GetRankTo(), + ResourceGroupID: item.GetResourceGroupId(), SortOrder: item.GetSortOrder(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardName: item.GetRewardName(), + RewardItems: activityTemplateRewardItemsFromProto(item.GetRewardItems()), + }) + } + for _, item := range template.GetAssets() { + assetLocale := strings.TrimSpace(item.GetLocale()) + if assetLocale != "*" { + var valid bool + assetLocale, valid = canonicalActivityTemplateLanguageTag(assetLocale) + if !valid { + continue + } + } + data.Assets = append(data.Assets, activityTemplateAssetData{ + AssetKey: item.GetAssetKey(), Locale: assetLocale, URL: item.GetUrl(), MediaType: item.GetMediaType(), SortOrder: item.GetSortOrder(), + }) + } + if raw := []byte(strings.TrimSpace(template.GetDisplayConfigJson())); len(raw) > 0 && json.Valid(raw) { + data.DisplayConfig = append(json.RawMessage(nil), raw...) + } + data.VersionNo = runtime.GetVersionNo() + data.RuntimeFromMS = runtime.GetRuntimeFromMs() + data.RuntimeToMS = runtime.GetRuntimeToMs() + data.ServerTimeMS = runtime.GetServerTimeMs() + return data +} + +func activityTemplateRuntimePointerFromProto(runtime *activityv1.ActivityTemplateRuntime, requestedLocale string) *activityTemplateRuntimeData { + if runtime == nil { + return nil + } + data := activityTemplateRuntimeFromProto(runtime, requestedLocale) + return &data +} + +func activityTemplateRuntimeTasksFromProto(items []*activityv1.ActivityTemplateRuntimeTask) []activityTemplateRuntimeTaskData { + result := make([]activityTemplateRuntimeTaskData, 0, len(items)) + for _, item := range items { + result = append(result, activityTemplateRuntimeTaskData{ + TemplateID: item.GetTemplateId(), TemplateCode: item.GetTemplateCode(), VersionNo: item.GetVersionNo(), + TaskDay: item.GetTaskDay(), TaskKey: item.GetTaskKey(), TaskType: item.GetTaskType(), TargetValue: item.GetTargetValue(), + ProgressValue: item.GetProgressValue(), RewardResourceGroupID: item.GetRewardResourceGroupId(), + Status: item.GetStatus(), Claimable: item.GetClaimable(), CompletedAtMS: item.GetCompletedAtMs(), + ClaimedAtMS: item.GetClaimedAtMs(), SortOrder: item.GetSortOrder(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardName: item.GetRewardName(), + RewardItems: activityTemplateRewardItemsFromProto(item.GetRewardItems()), + }) + } + return result +} + +func activityTemplateTaskClaimPointerFromProto(item *activityv1.ActivityTemplateTaskClaim) *activityTemplateTaskClaimData { + if item == nil { + return nil + } + return &activityTemplateTaskClaimData{ + ClaimID: item.GetClaimId(), TemplateID: item.GetTemplateId(), + TemplateCode: item.GetTemplateCode(), VersionNo: item.GetVersionNo(), TaskDay: item.GetTaskDay(), + TaskKey: item.GetTaskKey(), UserID: strconv.FormatInt(item.GetUserId(), 10), + RewardResourceGroupID: item.GetRewardResourceGroupId(), Status: item.GetStatus(), + CreatedAtMS: item.GetCreatedAtMs(), UpdatedAtMS: item.GetUpdatedAtMs(), GrantedAtMS: item.GetGrantedAtMs(), + RewardSnapshotID: item.GetRewardSnapshotId(), RewardName: item.GetRewardName(), + RewardItems: activityTemplateRewardItemsFromProto(item.GetRewardItems()), + } +} + +func activityTemplateRewardItemsFromProto(items []*activityv1.ActivityTemplateRewardItem) []activityTemplateRewardItemData { + out := make([]activityTemplateRewardItemData, 0, len(items)) + for _, item := range items { + out = append(out, activityTemplateRewardItemData{ + ItemType: item.GetItemType(), ResourceID: item.GetResourceId(), ResourceType: item.GetResourceType(), + Name: item.GetName(), IconURL: item.GetIconUrl(), Quantity: item.GetQuantity(), DurationMS: item.GetDurationMs(), + WalletAssetType: item.GetWalletAssetType(), WalletAssetAmount: item.GetWalletAssetAmount(), SortOrder: item.GetSortOrder(), + }) + } + return out +} + +func activityTemplateLeaderboardEntriesFromProto(items []*activityv1.ActivityTemplateLeaderboardEntry, users map[int64]activityTemplateLeaderboardUserData) []activityTemplateLeaderboardEntryData { + result := make([]activityTemplateLeaderboardEntryData, 0, len(items)) + for _, item := range items { + result = append(result, activityTemplateLeaderboardEntryFromProto(item, users)) + } + return result +} + +func activityTemplateLeaderboardEntryFromProto(item *activityv1.ActivityTemplateLeaderboardEntry, users map[int64]activityTemplateLeaderboardUserData) activityTemplateLeaderboardEntryData { + data := activityTemplateLeaderboardEntryData{} + if item == nil { + return data + } + data.RankNo = item.GetRankNo() + data.UserID = strconv.FormatInt(item.GetUserId(), 10) + data.Score = item.GetScore() + data.GiftCount = item.GetGiftCount() + data.CoinAmount = item.GetCoinAmount() + data.FirstScoredAtMS = item.GetFirstScoredAtMs() + data.Snapshot = item.GetSnapshot() + if user, ok := users[item.GetUserId()]; ok { + data.User = &user + } + return data +} + +func activityTemplateLeaderboardUserIDs(items []*activityv1.ActivityTemplateLeaderboardEntry, myEntry *activityv1.ActivityTemplateLeaderboardEntry) []int64 { + ids := make([]int64, 0, len(items)+1) + for _, item := range items { + ids = append(ids, item.GetUserId()) + } + if myEntry != nil { + ids = append(ids, myEntry.GetUserId()) + } + return ids +} + +func normalizeOptionalActivityTemplateUTCDay(raw string) (string, bool) { + raw = strings.TrimSpace(raw) + if raw == "" { + return "", true + } + return normalizeRequiredActivityTemplateUTCDay(raw) +} + +func normalizeRequiredActivityTemplateUTCDay(raw string) (string, bool) { + raw = strings.TrimSpace(raw) + parsed, err := time.Parse(activityTemplateUTCDayLayout, raw) + if err != nil || parsed.Location() != time.UTC || parsed.Format(activityTemplateUTCDayLayout) != raw { + return "", false + } + return raw, true +} + +func activityTemplateRequestLocale(request *http.Request) string { + // 显式 query 优先于客户端语言头;每一层只有合法 BCP-47 才能截断回退链,非法输入不会原样进入 gRPC 或响应。 + if locale, valid := canonicalActivityTemplateLanguageTag(request.URL.Query().Get("locale")); valid { + return locale + } + if locale, valid := canonicalActivityTemplateLanguageTag(request.Header.Get("X-App-Language")); valid { + return locale + } + // X-Language 是旧客户端兼容入口,优先级低于规范的 X-App-Language,但仍高于浏览器协商头。 + if locale, valid := canonicalActivityTemplateLanguageTag(request.Header.Get("X-Language")); valid { + return locale + } + if locale, valid := preferredActivityTemplateAcceptLanguage(request.Header.Get("Accept-Language")); valid { + return locale + } + return "en" +} + +func selectActivityTemplateLocale(locales []activityTemplateLocaleData, requested string) (activityTemplateLocaleData, bool) { + requested, valid := canonicalActivityTemplateLanguageTag(requested) + if !valid { + requested = "en" + } + // exact 保留地区、脚本和扩展差异,例如 zh-CN 与 zh-TW、pt-BR 与 pt-PT 不能提前折叠为基础语言。 + for _, item := range locales { + if strings.EqualFold(item.Locale, requested) { + return item, true + } + } + requestedBase := activityTemplateLanguageBase(requested) + if requestedBase != "" { + // 优先使用运营明确配置的 language-only 文案,再选择同语言的第一个候选;配置顺序即稳定决胜顺序。 + for _, item := range locales { + if strings.EqualFold(item.Locale, requestedBase) { + return item, true + } + } + for _, item := range locales { + if activityTemplateLanguageBase(item.Locale) == requestedBase { + return item, true + } + } + } + for _, item := range locales { + if strings.EqualFold(strings.TrimSpace(item.Locale), "en") { + return item, true + } + } + for _, item := range locales { + if activityTemplateLanguageBase(item.Locale) == "en" { + return item, true + } + } + if len(locales) > 0 { + return locales[0], true + } + return activityTemplateLocaleData{}, false +} + +// canonicalActivityTemplateLanguageTag 在 language.Parse 前做 ASCII/分段约束。x/text 会为兼容 POSIX +// 接受下划线并尝试修复;HTTP 边界不能把这类非 BCP-47 输入静默改写后继续暴露。 +func canonicalActivityTemplateLanguageTag(raw string) (string, bool) { + raw = strings.TrimSpace(raw) + if raw == "" || len(raw) > 255 || raw == "*" || raw[0] == '-' || raw[len(raw)-1] == '-' { + return "", false + } + segmentLength := 0 + for index := 0; index < len(raw); index++ { + char := raw[index] + if char == '-' { + if segmentLength == 0 || segmentLength > 8 { + return "", false + } + segmentLength = 0 + continue + } + if !((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9')) { + return "", false + } + segmentLength++ + } + if segmentLength == 0 || segmentLength > 8 { + return "", false + } + tag, err := language.Parse(raw) + if err != nil || tag.String() == "" || tag.String() == "mul" { + return "", false + } + return tag.String(), true +} + +func activityTemplateLanguageBase(locale string) string { + tag, err := language.Parse(locale) + if err != nil { + return "" + } + base, confidence := tag.Base() + if confidence == language.No || base.String() == "und" { + return "" + } + return base.String() +} + +// preferredActivityTemplateAcceptLanguage applies RFC quality weights without accepting wildcard or malformed +// language ranges. Equal weights preserve header order; q=0 means explicitly unacceptable and is skipped. +func preferredActivityTemplateAcceptLanguage(raw string) (string, bool) { + bestLocale := "" + bestQuality := -1.0 + for _, entry := range strings.Split(raw, ",") { + parts := strings.Split(entry, ";") + locale, valid := canonicalActivityTemplateLanguageTag(parts[0]) + if !valid { + continue + } + quality := 1.0 + validQuality := true + for _, parameter := range parts[1:] { + name, value, found := strings.Cut(strings.TrimSpace(parameter), "=") + if !found || !strings.EqualFold(strings.TrimSpace(name), "q") { + continue + } + parsed, err := strconv.ParseFloat(strings.TrimSpace(value), 64) + if err != nil || math.IsNaN(parsed) || math.IsInf(parsed, 0) || parsed < 0 || parsed > 1 { + validQuality = false + break + } + quality = parsed + } + if !validQuality || quality <= 0 || quality <= bestQuality { + continue + } + bestLocale = locale + bestQuality = quality + } + return bestLocale, bestLocale != "" +} diff --git a/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler_test.go b/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler_test.go new file mode 100644 index 00000000..f99ae2e2 --- /dev/null +++ b/services/gateway-service/internal/transport/http/activityapi/activity_template_runtime_handler_test.go @@ -0,0 +1,567 @@ +package activityapi + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "strings" + "testing" + + activityv1 "hyapp.local/api/proto/activity/v1" + userv1 "hyapp.local/api/proto/user/v1" + "hyapp/pkg/appcode" + "hyapp/services/gateway-service/internal/auth" +) + +func TestGetCurrentActivityTemplateUsesAuthenticatedProfileRegionAndPublishedDTO(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{ + currentResp: &activityv1.GetCurrentActivityTemplateResponse{ + Found: true, + Runtime: &activityv1.ActivityTemplateRuntime{ + VersionNo: 4, RuntimeFromMs: 1000, RuntimeToMs: 9000, ServerTimeMs: 2000, + Template: &activityv1.ActivityTemplate{ + TemplateId: "tpl-1", TemplateCode: "ramadan-2026", Name: "admin-only-name", + ActivityType: "gift_challenge", Status: "published", LifecycleStatus: "running", + StartMs: 1000, EndMs: 9000, AllRegions: false, RegionIds: []int64{901}, + Locales: []*activityv1.ActivityTemplateLocale{ + {Locale: "en", Title: "Gift challenge", Rules: "rules-en"}, + {Locale: "ar", Title: "تحدي الهدايا", Rules: "rules-ar"}, + }, + Gifts: []*activityv1.ActivityTemplateGift{{GiftId: "gift-1", Name: "Rose", IconUrl: "rose.png", CoinPrice: 20, PriceVersion: "v3"}}, + Tasks: []*activityv1.ActivityTemplateTask{{TaskKey: "visit", TaskType: "daily_visit", TargetValue: 1, RewardResourceGroupId: 81}}, + RankRewards: []*activityv1.ActivityTemplateRankReward{{BoardType: "daily", RankFrom: 1, RankTo: 1, ResourceGroupId: 82}}, + Assets: []*activityv1.ActivityTemplateAsset{{AssetKey: "hero", Locale: "ar", Url: "hero.webp", MediaType: "webp"}}, + DisplayConfigJson: `{"theme":"gold"}`, Revision: 99, CreatedByAdminId: 7, + }, + }, + }, + } + profileClient := &fakeActivityTemplateProfileClient{regionID: 901} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: profileClient}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/current?locale=ar-EG®ion_id=999999", "", 42001) + recorder := httptest.NewRecorder() + + handler.getCurrentActivityTemplate(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got=%d body=%s", recorder.Code, recorder.Body.String()) + } + if profileClient.lastGet.GetUserId() != 42001 || profileClient.lastGet.GetMeta().GetAppCode() != "lalu" { + t.Fatalf("trusted region profile request mismatch: %+v", profileClient.lastGet) + } + if runtimeClient.lastCurrent.GetUserId() != 42001 || runtimeClient.lastCurrent.GetRegionId() != 901 || runtimeClient.lastCurrent.GetLocale() != "ar-EG" { + t.Fatalf("runtime request mismatch: %+v", runtimeClient.lastCurrent) + } + if runtimeClient.lastCurrent.GetMeta().GetAppCode() != "lalu" || runtimeClient.lastCurrent.GetMeta().GetRequestId() == "" { + t.Fatalf("activity meta mismatch: %+v", runtimeClient.lastCurrent.GetMeta()) + } + + var envelope struct { + Code string `json:"code"` + Data struct { + Found bool `json:"found"` + Runtime struct { + TemplateID string `json:"template_id"` + VersionNo int64 `json:"version_no"` + Locale struct { + Locale string `json:"locale"` + Title string `json:"title"` + } `json:"locale"` + DisplayConfig map[string]any `json:"display_config"` + } `json:"runtime"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil { + t.Fatalf("decode response: %v", err) + } + if envelope.Code != "OK" || !envelope.Data.Found || envelope.Data.Runtime.TemplateID != "tpl-1" || envelope.Data.Runtime.VersionNo != 4 { + t.Fatalf("runtime envelope mismatch: %+v", envelope) + } + if envelope.Data.Runtime.Locale.Locale != "ar" || envelope.Data.Runtime.Locale.Title != "تحدي الهدايا" || envelope.Data.Runtime.DisplayConfig["theme"] != "gold" { + t.Fatalf("locale/display config mismatch: %+v", envelope.Data.Runtime) + } + var rawEnvelope map[string]any + if err := json.Unmarshal(recorder.Body.Bytes(), &rawEnvelope); err != nil { + t.Fatalf("decode raw response: %v", err) + } + runtime := rawEnvelope["data"].(map[string]any)["runtime"].(map[string]any) + for _, adminField := range []string{"name", "revision", "created_by_admin_id", "updated_by_admin_id", "published_by_admin_id"} { + if _, exists := runtime[adminField]; exists { + t.Fatalf("app runtime leaked admin field %q: %+v", adminField, runtime) + } + } +} + +func TestCurrentActivityTemplateLocaleFallsBackToEnglish(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{ + currentResp: &activityv1.GetCurrentActivityTemplateResponse{ + Found: true, + Runtime: &activityv1.ActivityTemplateRuntime{Template: &activityv1.ActivityTemplate{ + TemplateId: "tpl-1", + Locales: []*activityv1.ActivityTemplateLocale{ + {Locale: "ar", Title: "العربية"}, + {Locale: "en", Title: "English fallback"}, + }, + }}, + }, + } + profileClient := &fakeActivityTemplateProfileClient{regionID: 901} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: profileClient}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/current", "", 42001) + request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9") + recorder := httptest.NewRecorder() + + handler.getCurrentActivityTemplate(recorder, request) + + if recorder.Code != http.StatusOK || runtimeClient.lastCurrent.GetLocale() != "zh-CN" { + t.Fatalf("requested locale should be normalized before owner call: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastCurrent, recorder.Body.String()) + } + var envelope struct { + Data struct { + Runtime struct { + Locale struct { + Locale string `json:"locale"` + Title string `json:"title"` + } `json:"locale"` + } `json:"runtime"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil { + t.Fatalf("decode response: %v", err) + } + if envelope.Data.Runtime.Locale.Locale != "en" || envelope.Data.Runtime.Locale.Title != "English fallback" { + t.Fatalf("unsupported locale must fall back to published English copy: %+v", envelope.Data.Runtime.Locale) + } +} + +func TestActivityTemplateRequestLocalePreservesCanonicalBCP47AndSourcePriority(t *testing.T) { + tests := []struct { + name string + target string + appLanguage string + acceptLanguage string + want string + }{ + { + name: "query keeps Chinese region", target: "/current?locale=zh-cn", + appLanguage: "pt-BR", acceptLanguage: "ar;q=1", want: "zh-CN", + }, + { + name: "app header keeps Portuguese region", target: "/current", + appLanguage: "pt-br", acceptLanguage: "zh-CN;q=1", want: "pt-BR", + }, + { + name: "accept language uses highest quality", target: "/current", + acceptLanguage: "fr-FR;q=0.2, zh-CN;q=0.7, pt-BR;q=0.9", want: "pt-BR", + }, + { + name: "equal quality keeps client order", target: "/current", + acceptLanguage: "zh-CN;q=0.8, pt-BR;q=0.8", want: "zh-CN", + }, + { + name: "invalid tags and q zero are never forwarded", target: "/current?locale=bad_tag", + appLanguage: "pt@@BR", acceptLanguage: "zh_CN;q=1, pt-BR;q=0, ar;q=NaN, en-US;q=0.5", want: "en-US", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + request := httptest.NewRequest(http.MethodGet, tt.target, nil) + request.Header.Set("X-App-Language", tt.appLanguage) + request.Header.Set("Accept-Language", tt.acceptLanguage) + if got := activityTemplateRequestLocale(request); got != tt.want { + t.Fatalf("activityTemplateRequestLocale() = %q, want %q", got, tt.want) + } + }) + } +} + +func TestSelectActivityTemplateLocaleUsesExactBaseSameLanguageThenEnglish(t *testing.T) { + tests := []struct { + name string + requested string + locales []activityTemplateLocaleData + want string + }{ + { + name: "exact region", requested: "zh-CN", + locales: []activityTemplateLocaleData{{Locale: "zh-TW"}, {Locale: "zh-CN"}, {Locale: "en"}}, want: "zh-CN", + }, + { + name: "language only before regional candidate", requested: "pt-AO", + locales: []activityTemplateLocaleData{{Locale: "pt-BR"}, {Locale: "pt"}, {Locale: "en"}}, want: "pt", + }, + { + name: "same language uses configured order", requested: "pt-AO", + locales: []activityTemplateLocaleData{{Locale: "pt-BR"}, {Locale: "pt-PT"}, {Locale: "en"}}, want: "pt-BR", + }, + { + name: "English after no language match", requested: "zh-CN", + locales: []activityTemplateLocaleData{{Locale: "ar"}, {Locale: "en"}}, want: "en", + }, + { + name: "first after no English", requested: "zh-CN", + locales: []activityTemplateLocaleData{{Locale: "ar"}, {Locale: "pt-BR"}}, want: "ar", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + selected, found := selectActivityTemplateLocale(tt.locales, tt.requested) + if !found || selected.Locale != tt.want { + t.Fatalf("selectActivityTemplateLocale() = (%+v, %v), want locale %q", selected, found, tt.want) + } + }) + } +} + +func TestActivityTemplateRuntimeDropsInvalidPublishedLocaleTags(t *testing.T) { + runtime := activityTemplateRuntimeFromProto(&activityv1.ActivityTemplateRuntime{Template: &activityv1.ActivityTemplate{ + TemplateId: "tpl-1", + Locales: []*activityv1.ActivityTemplateLocale{ + {Locale: "bad_tag", Title: "must not leak"}, + {Locale: "pt-br", Title: "Português"}, + }, + Assets: []*activityv1.ActivityTemplateAsset{ + {AssetKey: "invalid", Locale: "zh_CN", Url: "invalid.webp"}, + {AssetKey: "valid", Locale: "pt-br", Url: "valid.webp"}, + }, + }}, "pt-BR") + if len(runtime.Locales) != 1 || runtime.Locales[0].Locale != "pt-BR" || runtime.Locale == nil || runtime.Locale.Locale != "pt-BR" { + t.Fatalf("runtime locale sanitization mismatch: %+v", runtime) + } + if len(runtime.Assets) != 1 || runtime.Assets[0].Locale != "pt-BR" || runtime.Assets[0].AssetKey != "valid" { + t.Fatalf("runtime asset locale sanitization mismatch: %+v", runtime.Assets) + } +} + +func TestVisitActivityTemplateKeepsClientCommandSeparateFromRequestID(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{visitResp: &activityv1.VisitActivityTemplateResponse{ + FirstVisit: true, + Tasks: []*activityv1.ActivityTemplateRuntimeTask{{TemplateId: "tpl-1", TemplateCode: "summer", TaskDay: "2026-07-14", TaskKey: "visit", Status: "completed", Claimable: true}}, + }} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 66}}) + request := activityTemplateRequest(http.MethodPost, "/api/v1/activities/templates/summer/visit", `{"command_id":" visit-device-7 ","version_no":4}`, 777) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.visitActivityTemplate(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got=%d body=%s", recorder.Code, recorder.Body.String()) + } + req := runtimeClient.lastVisit + if req.GetUserId() != 777 || req.GetRegionId() != 66 || req.GetTemplateCode() != "summer" || req.GetCommandId() != "visit-device-7" || req.GetVersionNo() != 4 { + t.Fatalf("visit request mismatch: %+v", req) + } + if req.GetMeta().GetRequestId() == "" || req.GetMeta().GetRequestId() == req.GetCommandId() { + t.Fatalf("request_id and command_id must have independent semantics: meta=%+v command=%q", req.GetMeta(), req.GetCommandId()) + } + var envelope struct { + Data struct { + FirstVisit bool `json:"first_visit"` + Tasks []struct { + TaskDay string `json:"task_day"` + Claimable bool `json:"claimable"` + } `json:"tasks"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil || !envelope.Data.FirstVisit || len(envelope.Data.Tasks) != 1 || !envelope.Data.Tasks[0].Claimable { + t.Fatalf("visit response mismatch: err=%v data=%+v", err, envelope.Data) + } +} + +func TestActivityTemplateTasksAcceptOnlyCanonicalUTCDay(t *testing.T) { + t.Run("forwards canonical UTC day", func(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{tasksResp: &activityv1.ListActivityTemplateTasksResponse{NextRefreshAtMs: 1784159999000}} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 22}}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/tasks?task_day=2026-07-14", "", 88) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateTasks(recorder, request) + + if recorder.Code != http.StatusOK || runtimeClient.lastTasks.GetTaskDay() != "2026-07-14" { + t.Fatalf("canonical UTC day mismatch: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastTasks, recorder.Body.String()) + } + }) + + for _, invalid := range []string{"2026-7-14", "2026-07-14T00:00:00Z", "2026-02-30"} { + t.Run(invalid, func(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 22}}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/tasks?task_day="+invalid, "", 88) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateTasks(recorder, request) + + if recorder.Code != http.StatusBadRequest || runtimeClient.lastTasks != nil { + t.Fatalf("invalid day should stop before gRPC: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastTasks, recorder.Body.String()) + } + }) + } +} + +func TestHistoricalActivityTemplateTasksUseOwnedProgressAttributionInsteadOfCurrentProfileRegion(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{tasksResp: &activityv1.ListActivityTemplateTasksResponse{}} + profileClient := &fakeActivityTemplateProfileClient{regionID: 999} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: profileClient}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/tasks?version_no=3&task_day=2026-07-14", "", 88) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateTasks(recorder, request) + + if recorder.Code != http.StatusOK || runtimeClient.lastTasks.GetVersionNo() != 3 || runtimeClient.lastTasks.GetRegionId() != 0 { + t.Fatalf("historical task lookup must be owner-attributed: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastTasks, recorder.Body.String()) + } + if profileClient.lastGet != nil { + t.Fatalf("historical task lookup must not resolve mutable current region: %+v", profileClient.lastGet) + } +} + +func TestClaimActivityTemplateTaskUsesAuthenticatedUserAndExplicitIdempotency(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{claimResp: &activityv1.ClaimActivityTemplateTaskRewardResponse{ + Claimed: true, + Claim: &activityv1.ActivityTemplateTaskClaim{ClaimId: "claim-1", CommandId: "claim-device-1", UserId: 908, TaskDay: "2026-07-14", TaskKey: "gift-10", Status: "granted"}, + }} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 33}}) + request := activityTemplateRequest(http.MethodPost, "/api/v1/activities/templates/summer/tasks/gift-10/claim", `{"task_day":"2026-07-14","command_id":"claim-device-1","version_no":3,"user_id":1,"region_id":1}`, 908) + request.SetPathValue("template_code", "summer") + request.SetPathValue("task_key", "gift-10") + recorder := httptest.NewRecorder() + + handler.claimActivityTemplateTask(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got=%d body=%s", recorder.Code, recorder.Body.String()) + } + req := runtimeClient.lastClaim + if req.GetUserId() != 908 || req.GetRegionId() != 0 || req.GetVersionNo() != 3 || req.GetTaskDay() != "2026-07-14" || req.GetTaskKey() != "gift-10" || req.GetCommandId() != "claim-device-1" { + t.Fatalf("claim request trusted fields mismatch: %+v", req) + } + if profile := handler.userProfileClient.(*fakeActivityTemplateProfileClient); profile.lastGet != nil { + t.Fatalf("exact-version claim must not resolve mutable current region: %+v", profile.lastGet) + } + var envelope struct { + Data struct { + Claimed bool `json:"claimed"` + Claim struct { + UserID string `json:"user_id"` + Status string `json:"status"` + } `json:"claim"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil || !envelope.Data.Claimed || envelope.Data.Claim.UserID != "908" || envelope.Data.Claim.Status != "granted" { + t.Fatalf("claim response mismatch: err=%v data=%+v", err, envelope.Data) + } +} + +func TestActivityTemplateLeaderboardClampsPageAndBatchEnrichesProfiles(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{leaderboardResp: &activityv1.ListActivityTemplateLeaderboardResponse{ + BoardType: "daily", PeriodKey: "2026-07-14", PeriodStartMs: 1000, PeriodEndMs: 2000, PeriodStatus: "pending", Total: 2, + Entries: []*activityv1.ActivityTemplateLeaderboardEntry{{RankNo: 1, UserId: 1001, Score: 800, GiftCount: 8, CoinAmount: 800, FirstScoredAtMs: 1100}}, + MyEntry: &activityv1.ActivityTemplateLeaderboardEntry{RankNo: 2, UserId: 2002, Score: 700, GiftCount: 7, CoinAmount: 700, FirstScoredAtMs: 1200}, + }} + profileClient := &fakeActivityTemplateProfileClient{ + regionID: 45, + users: map[int64]*userv1.User{ + 1001: {UserId: 1001, DisplayUserId: "L1001", Username: "first", Avatar: "first.png"}, + 2002: {UserId: 2002, DisplayUserId: "L2002", Username: "me", Avatar: "me.png"}, + }, + } + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: profileClient}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/daily?version_no=4&period_key=2026-07-14&page=2&page_size=999", "", 2002) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateDailyLeaderboard(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got=%d body=%s", recorder.Code, recorder.Body.String()) + } + req := runtimeClient.lastLeaderboard + if req.GetUserId() != 2002 || req.GetRegionId() != 0 || req.GetVersionNo() != 4 || req.GetBoardType() != "daily" || req.GetPeriodKey() != "2026-07-14" || req.GetPage() != 2 || req.GetPageSize() != 100 { + t.Fatalf("leaderboard request mismatch: %+v", req) + } + if profileClient.lastGet != nil { + t.Fatalf("exact-version leaderboard must not resolve mutable current region: %+v", profileClient.lastGet) + } + if got := profileClient.lastBatch.GetUserIds(); len(got) != 2 || got[0] != 1001 || got[1] != 2002 { + t.Fatalf("profile batch should contain page and my-entry users once: %+v", got) + } + var envelope struct { + Data struct { + Page int32 `json:"page"` + PageSize int32 `json:"page_size"` + Entries []struct { + UserID string `json:"user_id"` + User struct { + DisplayUserID string `json:"display_user_id"` + Username string `json:"username"` + } `json:"user"` + } `json:"entries"` + MyEntry struct { + User struct { + Avatar string `json:"avatar"` + } `json:"user"` + } `json:"my_entry"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil { + t.Fatalf("decode response: %v", err) + } + if envelope.Data.Page != 2 || envelope.Data.PageSize != 100 || len(envelope.Data.Entries) != 1 || envelope.Data.Entries[0].UserID != "1001" || envelope.Data.Entries[0].User.DisplayUserID != "L1001" || envelope.Data.MyEntry.User.Avatar != "me.png" { + t.Fatalf("leaderboard response mismatch: %+v", envelope.Data) + } +} + +func TestDailyLeaderboardForwardsExplicitHistoricalUTCPeriod(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{leaderboardResp: &activityv1.ListActivityTemplateLeaderboardResponse{ + BoardType: "daily", PeriodKey: "2026-06-01", PeriodStatus: "settled", + Entries: []*activityv1.ActivityTemplateLeaderboardEntry{{RankNo: 1, UserId: 1001, Snapshot: true}}, + }} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 45}}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/daily?period_key=2026-06-01", "", 2002) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateDailyLeaderboard(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("settled historical period should reach owner: code=%d body=%s", recorder.Code, recorder.Body.String()) + } + if runtimeClient.lastLeaderboard.GetPeriodKey() != "2026-06-01" || runtimeClient.lastLeaderboard.GetBoardType() != "daily" { + t.Fatalf("gateway must preserve explicit historical UTC period: %+v", runtimeClient.lastLeaderboard) + } +} + +func TestDailyLeaderboardRejectsNonCanonicalUTCPeriod(t *testing.T) { + for _, invalid := range []string{"2026-6-1", "2026-06-01T00:00:00Z", "2026-02-30"} { + t.Run(invalid, func(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: &fakeActivityTemplateProfileClient{regionID: 45}}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/daily?period_key="+invalid, "", 2002) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateDailyLeaderboard(recorder, request) + + if recorder.Code != http.StatusBadRequest || runtimeClient.lastLeaderboard != nil { + t.Fatalf("non-canonical UTC period must stop before owner: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastLeaderboard, recorder.Body.String()) + } + }) + } +} + +func TestActivityTemplateLeaderboardProfileDecorationFailureDegradesToFacts(t *testing.T) { + runtimeClient := &fakeActivityTemplateRuntimeClient{leaderboardResp: &activityv1.ListActivityTemplateLeaderboardResponse{ + BoardType: "total", PeriodKey: "total", Total: 1, + Entries: []*activityv1.ActivityTemplateLeaderboardEntry{{RankNo: 1, UserId: 1001, Score: 800}}, + }} + profileClient := &fakeActivityTemplateProfileClient{regionID: 45, batchErr: errors.New("user profile unavailable")} + handler := New(Config{ActivityTemplateRuntime: runtimeClient, UserProfileClient: profileClient}) + request := activityTemplateRequest(http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/total", "", 2002) + request.SetPathValue("template_code", "summer") + recorder := httptest.NewRecorder() + + handler.listActivityTemplateTotalLeaderboard(recorder, request) + + if recorder.Code != http.StatusOK || runtimeClient.lastLeaderboard.GetPeriodKey() != "total" { + t.Fatalf("profile decoration must not hide leaderboard facts: code=%d req=%+v body=%s", recorder.Code, runtimeClient.lastLeaderboard, recorder.Body.String()) + } + var envelope struct { + Data struct { + Entries []map[string]any `json:"entries"` + } `json:"data"` + } + if err := json.Unmarshal(recorder.Body.Bytes(), &envelope); err != nil || len(envelope.Data.Entries) != 1 { + t.Fatalf("decode facts response: err=%v data=%+v", err, envelope.Data) + } + if _, decorated := envelope.Data.Entries[0]["user"]; decorated { + t.Fatalf("failed best-effort profile lookup should omit user decoration: %+v", envelope.Data.Entries[0]) + } +} + +func activityTemplateRequest(method, target, body string, userID int64) *http.Request { + request := httptest.NewRequest(method, target, strings.NewReader(body)) + ctx := appcode.WithContext(request.Context(), "lalu") + ctx = auth.WithUserID(ctx, userID) + return request.WithContext(ctx) +} + +type fakeActivityTemplateRuntimeClient struct { + currentResp *activityv1.GetCurrentActivityTemplateResponse + visitResp *activityv1.VisitActivityTemplateResponse + tasksResp *activityv1.ListActivityTemplateTasksResponse + claimResp *activityv1.ClaimActivityTemplateTaskRewardResponse + leaderboardResp *activityv1.ListActivityTemplateLeaderboardResponse + + lastCurrent *activityv1.GetCurrentActivityTemplateRequest + lastVisit *activityv1.VisitActivityTemplateRequest + lastTasks *activityv1.ListActivityTemplateTasksRequest + lastClaim *activityv1.ClaimActivityTemplateTaskRewardRequest + lastLeaderboard *activityv1.ListActivityTemplateLeaderboardRequest +} + +func (f *fakeActivityTemplateRuntimeClient) GetCurrentActivityTemplate(_ context.Context, req *activityv1.GetCurrentActivityTemplateRequest) (*activityv1.GetCurrentActivityTemplateResponse, error) { + f.lastCurrent = req + if f.currentResp != nil { + return f.currentResp, nil + } + return &activityv1.GetCurrentActivityTemplateResponse{}, nil +} + +func (f *fakeActivityTemplateRuntimeClient) VisitActivityTemplate(_ context.Context, req *activityv1.VisitActivityTemplateRequest) (*activityv1.VisitActivityTemplateResponse, error) { + f.lastVisit = req + if f.visitResp != nil { + return f.visitResp, nil + } + return &activityv1.VisitActivityTemplateResponse{}, nil +} + +func (f *fakeActivityTemplateRuntimeClient) ListActivityTemplateTasks(_ context.Context, req *activityv1.ListActivityTemplateTasksRequest) (*activityv1.ListActivityTemplateTasksResponse, error) { + f.lastTasks = req + if f.tasksResp != nil { + return f.tasksResp, nil + } + return &activityv1.ListActivityTemplateTasksResponse{}, nil +} + +func (f *fakeActivityTemplateRuntimeClient) ClaimActivityTemplateTaskReward(_ context.Context, req *activityv1.ClaimActivityTemplateTaskRewardRequest) (*activityv1.ClaimActivityTemplateTaskRewardResponse, error) { + f.lastClaim = req + if f.claimResp != nil { + return f.claimResp, nil + } + return &activityv1.ClaimActivityTemplateTaskRewardResponse{}, nil +} + +func (f *fakeActivityTemplateRuntimeClient) ListActivityTemplateLeaderboard(_ context.Context, req *activityv1.ListActivityTemplateLeaderboardRequest) (*activityv1.ListActivityTemplateLeaderboardResponse, error) { + f.lastLeaderboard = req + if f.leaderboardResp != nil { + return f.leaderboardResp, nil + } + return &activityv1.ListActivityTemplateLeaderboardResponse{}, nil +} + +type fakeActivityTemplateProfileClient struct { + regionID int64 + users map[int64]*userv1.User + batchErr error + lastGet *userv1.GetUserRequest + lastBatch *userv1.BatchGetUsersRequest +} + +func (f *fakeActivityTemplateProfileClient) GetUser(_ context.Context, req *userv1.GetUserRequest) (*userv1.GetUserResponse, error) { + f.lastGet = req + return &userv1.GetUserResponse{User: &userv1.User{UserId: req.GetUserId(), RegionId: f.regionID}}, nil +} + +func (f *fakeActivityTemplateProfileClient) BatchGetUsers(_ context.Context, req *userv1.BatchGetUsersRequest) (*userv1.BatchGetUsersResponse, error) { + f.lastBatch = req + if f.batchErr != nil { + return nil, f.batchErr + } + return &userv1.BatchGetUsersResponse{Users: f.users}, nil +} diff --git a/services/gateway-service/internal/transport/http/activityapi/handler.go b/services/gateway-service/internal/transport/http/activityapi/handler.go index 08a0f486..4a5d1aa4 100644 --- a/services/gateway-service/internal/transport/http/activityapi/handler.go +++ b/services/gateway-service/internal/transport/http/activityapi/handler.go @@ -3,6 +3,7 @@ package activityapi import ( "context" + userv1 "hyapp.local/api/proto/user/v1" "hyapp/pkg/userleaderboard" "hyapp/services/gateway-service/internal/client" "hyapp/services/gateway-service/internal/transport/http/httproutes" @@ -14,7 +15,7 @@ type Handler struct { taskClient client.TaskClient growthLevelClient client.GrowthLevelClient achievementClient client.AchievementClient - userProfileClient client.UserProfileClient + userProfileClient UserProfileReader roomQueryClient client.RoomQueryClient walletClient client.WalletClient userLeaderboard UserLeaderboardStore @@ -29,6 +30,8 @@ type Handler struct { cpWeeklyRank client.CPWeeklyRankClient agencyOpening client.AgencyOpeningClient wheel client.WheelClient + + activityTemplateRuntime client.ActivityTemplateRuntimeClient } type UserLeaderboardStore interface { @@ -36,11 +39,19 @@ type UserLeaderboardStore interface { RankForUser(ctx context.Context, query userleaderboard.Query, userID int64) (userleaderboard.Entry, bool, error) } +// UserProfileReader keeps activity HTTP composition on the two profile operations it actually needs. +// The concrete gRPC client exposes more user commands, but widening this boundary would let activity handlers +// accidentally mutate user ownership while only resolving a trusted region and leaderboard presentation data. +type UserProfileReader interface { + GetUser(ctx context.Context, req *userv1.GetUserRequest) (*userv1.GetUserResponse, error) + BatchGetUsers(ctx context.Context, req *userv1.BatchGetUsersRequest) (*userv1.BatchGetUsersResponse, error) +} + type Config struct { TaskClient client.TaskClient GrowthLevelClient client.GrowthLevelClient AchievementClient client.AchievementClient - UserProfileClient client.UserProfileClient + UserProfileClient UserProfileReader RoomQueryClient client.RoomQueryClient WalletClient client.WalletClient UserLeaderboard UserLeaderboardStore @@ -55,6 +66,8 @@ type Config struct { CPWeeklyRank client.CPWeeklyRankClient AgencyOpening client.AgencyOpeningClient Wheel client.WheelClient + + ActivityTemplateRuntime client.ActivityTemplateRuntimeClient } func New(config Config) *Handler { @@ -77,6 +90,8 @@ func New(config Config) *Handler { cpWeeklyRank: config.CPWeeklyRank, agencyOpening: config.AgencyOpening, wheel: config.Wheel, + + activityTemplateRuntime: config.ActivityTemplateRuntime, } } @@ -106,6 +121,13 @@ func (h *Handler) TaskHandlers() httproutes.TaskHandlers { DrawWheel: h.drawWheel, ListWheelHistory: h.listWheelHistory, ListWheelHints: h.listWheelHints, + + GetCurrentActivityTemplate: h.getCurrentActivityTemplate, + VisitActivityTemplate: h.visitActivityTemplate, + ListActivityTemplateTasks: h.listActivityTemplateTasks, + ClaimActivityTemplateTask: h.claimActivityTemplateTask, + ListActivityTemplateDailyLeaderboard: h.listActivityTemplateDailyLeaderboard, + ListActivityTemplateTotalLeaderboard: h.listActivityTemplateTotalLeaderboard, } } diff --git a/services/gateway-service/internal/transport/http/handler.go b/services/gateway-service/internal/transport/http/handler.go index 3cc451b1..4e512083 100644 --- a/services/gateway-service/internal/transport/http/handler.go +++ b/services/gateway-service/internal/transport/http/handler.go @@ -78,6 +78,8 @@ type Handler struct { giftMaxUnits int loginRiskConfig LoginRiskConfig loginRiskCache loginRiskCache + + activityTemplateRuntime client.ActivityTemplateRuntimeClient } // TencentIMConfig 是 gateway transport 层签发客户端腾讯云 IM 登录票据所需的配置。 @@ -344,6 +346,12 @@ func (h *Handler) SetWheelClient(wheel client.WheelClient) { h.wheel = wheel } +// SetActivityTemplateRuntimeClient 注入已发布活动模版的 App 运行态入口。 +// gateway 只增加鉴权和资料展示编排,不在 HTTP 层复制版本、任务、榜单或发奖状态机。 +func (h *Handler) SetActivityTemplateRuntimeClient(runtime client.ActivityTemplateRuntimeClient) { + h.activityTemplateRuntime = runtime +} + // SetBroadcastClient 注入 activity-service 播报群成员关系 client。 func (h *Handler) SetBroadcastClient(broadcastClient client.BroadcastClient) { h.broadcastClient = broadcastClient diff --git a/services/gateway-service/internal/transport/http/httproutes/activity_template_runtime_routes_test.go b/services/gateway-service/internal/transport/http/httproutes/activity_template_runtime_routes_test.go new file mode 100644 index 00000000..22f46c34 --- /dev/null +++ b/services/gateway-service/internal/transport/http/httproutes/activity_template_runtime_routes_test.go @@ -0,0 +1,69 @@ +package httproutes + +import ( + "net/http" + "net/http/httptest" + "testing" +) + +func TestActivityTemplateRuntimeRoutesAreProfileProtectedAndPreservePathValues(t *testing.T) { + profileCalls := 0 + profileWrap := func(next http.HandlerFunc) http.Handler { + return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { + profileCalls++ + next(writer, request) + }) + } + identityWrap := func(next http.HandlerFunc) http.Handler { return next } + marker := func(name string) http.HandlerFunc { + return func(writer http.ResponseWriter, request *http.Request) { + writer.Header().Set("X-Handler", name) + writer.Header().Set("X-Template-Code", request.PathValue("template_code")) + writer.Header().Set("X-Task-Key", request.PathValue("task_key")) + writer.WriteHeader(http.StatusNoContent) + } + } + mux := http.NewServeMux() + routeSet := routes{mux: mux, config: Config{ + PublicWrap: identityWrap, AuthWrap: identityWrap, ProfileWrap: profileWrap, + Task: TaskHandlers{ + GetCurrentActivityTemplate: marker("current"), + VisitActivityTemplate: marker("visit"), + ListActivityTemplateTasks: marker("tasks"), + ClaimActivityTemplateTask: marker("claim"), + ListActivityTemplateDailyLeaderboard: marker("daily"), + ListActivityTemplateTotalLeaderboard: marker("total"), + }, + }} + routeSet.registerTaskRoutes() + + tests := []struct { + method string + path string + handler string + templateCode string + taskKey string + }{ + {http.MethodGet, "/api/v1/activities/templates/current", "current", "", ""}, + {http.MethodPost, "/api/v1/activities/templates/summer/visit", "visit", "summer", ""}, + {http.MethodGet, "/api/v1/activities/templates/summer/tasks", "tasks", "summer", ""}, + {http.MethodPost, "/api/v1/activities/templates/summer/tasks/gift-10/claim", "claim", "summer", "gift-10"}, + {http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/daily", "daily", "summer", ""}, + {http.MethodGet, "/api/v1/activities/templates/summer/leaderboards/total", "total", "summer", ""}, + } + for _, test := range tests { + t.Run(test.handler, func(t *testing.T) { + recorder := httptest.NewRecorder() + mux.ServeHTTP(recorder, httptest.NewRequest(test.method, test.path, nil)) + if recorder.Code != http.StatusNoContent || recorder.Header().Get("X-Handler") != test.handler { + t.Fatalf("route mismatch: code=%d handler=%q body=%s", recorder.Code, recorder.Header().Get("X-Handler"), recorder.Body.String()) + } + if recorder.Header().Get("X-Template-Code") != test.templateCode || recorder.Header().Get("X-Task-Key") != test.taskKey { + t.Fatalf("path values mismatch: template=%q task=%q", recorder.Header().Get("X-Template-Code"), recorder.Header().Get("X-Task-Key")) + } + }) + } + if profileCalls != len(tests) { + t.Fatalf("all activity template routes must use profile middleware: got=%d want=%d", profileCalls, len(tests)) + } +} diff --git a/services/gateway-service/internal/transport/http/httproutes/router.go b/services/gateway-service/internal/transport/http/httproutes/router.go index 736b8136..12913cf4 100644 --- a/services/gateway-service/internal/transport/http/httproutes/router.go +++ b/services/gateway-service/internal/transport/http/httproutes/router.go @@ -237,6 +237,13 @@ type TaskHandlers struct { DrawWheel http.HandlerFunc ListWheelHistory http.HandlerFunc ListWheelHints http.HandlerFunc + + GetCurrentActivityTemplate http.HandlerFunc + VisitActivityTemplate http.HandlerFunc + ListActivityTemplateTasks http.HandlerFunc + ClaimActivityTemplateTask http.HandlerFunc + ListActivityTemplateDailyLeaderboard http.HandlerFunc + ListActivityTemplateTotalLeaderboard http.HandlerFunc } type LevelHandlers struct { @@ -619,6 +626,12 @@ func (r routes) registerTaskRoutes() { r.profile("/activities/agency-opening-event", http.MethodGet, h.GetAgencyOpeningStatus) r.profile("/activities/agency-opening-event/apply", http.MethodPost, h.ApplyAgencyOpening) r.profile("/activities/agency-opening-event/leaderboard", http.MethodGet, h.ListAgencyOpeningLeaderboard) + r.profile("/activities/templates/current", http.MethodGet, h.GetCurrentActivityTemplate) + r.profile("/activities/templates/{template_code}/visit", http.MethodPost, h.VisitActivityTemplate) + r.profile("/activities/templates/{template_code}/tasks", http.MethodGet, h.ListActivityTemplateTasks) + r.profile("/activities/templates/{template_code}/tasks/{task_key}/claim", http.MethodPost, h.ClaimActivityTemplateTask) + r.profile("/activities/templates/{template_code}/leaderboards/daily", http.MethodGet, h.ListActivityTemplateDailyLeaderboard) + r.profile("/activities/templates/{template_code}/leaderboards/total", http.MethodGet, h.ListActivityTemplateTotalLeaderboard) r.public("/activity/wheel/{wheel_id}/config", http.MethodGet, h.GetWheelConfig) r.profile("/activity/wheel/{wheel_id}/draw", http.MethodPost, h.DrawWheel) r.profile("/activity/wheel/{wheel_id}/history", http.MethodPost, h.ListWheelHistory) diff --git a/services/gateway-service/internal/transport/http/roomapi/gift_panel_pipeline.go b/services/gateway-service/internal/transport/http/roomapi/gift_panel_pipeline.go index d0b4fe5a..dd821330 100644 --- a/services/gateway-service/internal/transport/http/roomapi/gift_panel_pipeline.go +++ b/services/gateway-service/internal/transport/http/roomapi/gift_panel_pipeline.go @@ -213,7 +213,7 @@ func (h *Handler) serveRoomGiftPanel(writer http.ResponseWriter, request *http.R } panelGifts := append([]giftConfigData{}, panelConfig.Gifts...) - panelGifts = append(panelGifts, roomGiftBagGiftsFromResources(bagResources, panelConfig.Gifts)...) + panelGifts = append(panelGifts, roomGiftBagGiftsFromResources(bagResources, panelConfig.Gifts, snapshot.GetVisibleRegionId())...) data := roomGiftPanelData{ CoinBalance: coinBalanceFromProto(balances), Recipients: roomGiftRecipients(snapshot, recipientProfiles), diff --git a/services/gateway-service/internal/transport/http/roomapi/room_handler.go b/services/gateway-service/internal/transport/http/roomapi/room_handler.go index 04803831..a19ab6dc 100644 --- a/services/gateway-service/internal/transport/http/roomapi/room_handler.go +++ b/services/gateway-service/internal/transport/http/roomapi/room_handler.go @@ -962,17 +962,6 @@ func (h *Handler) roomGiftCatalogVersion(request *http.Request, app string) (int return resp.GetVersion(), true, nil } -func (h *Handler) roomGiftBagGifts(request *http.Request, viewerUserID int64, gifts []giftConfigData) ([]giftConfigData, error) { - if viewerUserID <= 0 || h.walletClient == nil || len(gifts) == 0 { - return nil, nil - } - resp, err := h.roomGiftBagResources(request, viewerUserID) - if err != nil { - return nil, err - } - return roomGiftBagGiftsFromResources(resp, gifts), nil -} - func (h *Handler) roomGiftBagResources(request *http.Request, viewerUserID int64) (*walletv1.ListUserResourcesResponse, error) { if viewerUserID <= 0 || h.walletClient == nil { return &walletv1.ListUserResourcesResponse{}, nil @@ -986,8 +975,8 @@ func (h *Handler) roomGiftBagResources(request *http.Request, viewerUserID int64 }) } -func roomGiftBagGiftsFromResources(resp *walletv1.ListUserResourcesResponse, gifts []giftConfigData) []giftConfigData { - if resp == nil || len(gifts) == 0 { +func roomGiftBagGiftsFromResources(resp *walletv1.ListUserResourcesResponse, gifts []giftConfigData, visibleRegionID int64) []giftConfigData { + if resp == nil { return nil } giftByResourceID := make(map[int64]giftConfigData, len(gifts)) @@ -1005,21 +994,51 @@ func roomGiftBagGiftsFromResources(resp *walletv1.ListUserResourcesResponse, gif if remaining <= 0 { continue } + if item.GetSourceSnapshotId() != "" { + // Pinned activity rewards are wallet-owned promises. Current catalog disable/edit must not hide or + // rewrite them; wallet already verified hash/app/resource binding before returning these configs. + for _, pinned := range item.GetPinnedGiftConfigs() { + if !giftProtoAvailableInRegion(pinned, visibleRegionID) { + continue + } + gift := giftFromProto(pinned) + gift = roomGiftBagConfig(gift, item, remaining) + bagGifts = append(bagGifts, gift) + } + continue + } gift, ok := giftByResourceID[item.GetResourceId()] if !ok { continue } // Bag tab 只承载用户实际拥有的 gift 权益;仍复用 gift 配置的价格/动效,避免背包资源和房间送礼协议出现两套展示口径。 - gift.GiftTypeCode = "bag" - gift.Source = "bag" - gift.EntitlementID = item.GetEntitlementId() - gift.OwnedQuantity = item.GetQuantity() - gift.RemainingQuantity = remaining + gift = roomGiftBagConfig(gift, item, remaining) bagGifts = append(bagGifts, gift) } return bagGifts } +func roomGiftBagConfig(gift giftConfigData, item *walletv1.UserResourceEntitlement, remaining int64) giftConfigData { + gift.GiftTypeCode = "bag" + gift.Source = "bag" + gift.EntitlementID = item.GetEntitlementId() + gift.OwnedQuantity = item.GetQuantity() + gift.RemainingQuantity = remaining + return gift +} + +func giftProtoAvailableInRegion(gift *walletv1.GiftConfig, regionID int64) bool { + if gift == nil { + return false + } + for _, allowed := range gift.GetRegionIds() { + if allowed == 0 || allowed == regionID { + return true + } + } + return false +} + // getRoomRocket 返回房间火箭物料配置和当前进度。 func (h *Handler) getRoomRocket(writer http.ResponseWriter, request *http.Request) { if h.roomQueryClient == nil { diff --git a/services/gateway-service/internal/transport/http/roomapi/room_handler_test.go b/services/gateway-service/internal/transport/http/roomapi/room_handler_test.go index b30f7f88..a48a8663 100644 --- a/services/gateway-service/internal/transport/http/roomapi/room_handler_test.go +++ b/services/gateway-service/internal/transport/http/roomapi/room_handler_test.go @@ -9,6 +9,7 @@ import ( "time" roomv1 "hyapp.local/api/proto/room/v1" + walletv1 "hyapp.local/api/proto/wallet/v1" ) func TestCreateRoomRejectsMissingRoomAvatar(t *testing.T) { @@ -154,6 +155,46 @@ func TestRoomGiftTabsIncludesBagForOwnedGifts(t *testing.T) { } } +func TestRoomGiftBagPanelUsesPinnedCatalogAfterLiveGiftEditOrDisable(t *testing.T) { + pinned := &walletv1.GiftConfig{ + GiftId: "season-star", ResourceId: 501, Status: "active", Name: "Season Star V1", PriceVersion: "v1", + CoinPrice: 7, GiftTypeCode: "cp", CpRelationType: "brother", RegionIds: []int64{1}, + PresentationJson: `{"theme":"season-one"}`, + Resource: &walletv1.Resource{ResourceId: 501, ResourceType: "gift", Status: "active", Name: "Season Star V1", + PreviewUrl: "https://static.example.test/season-star-v1.png", AnimationUrl: "https://static.example.test/season-star-v1.svga"}, + } + resources := &walletv1.ListUserResourcesResponse{Resources: []*walletv1.UserResourceEntitlement{{ + EntitlementId: "ent-pinned-star", ResourceId: 501, Quantity: 3, RemainingQuantity: 2, + SourceSnapshotId: "rgs-season-one", PinnedGiftConfigs: []*walletv1.GiftConfig{pinned}, + }}} + liveV2 := giftConfigData{ + GiftID: "season-star", ResourceID: 501, Name: "Mutable Star V2", PriceVersion: "v2", CoinPrice: 31, + Resource: resourceData{ResourceID: 501, ResourceType: "gift", PreviewURL: "https://static.example.test/season-star-v2.png"}, + } + + panel := roomGiftBagGiftsFromResources(resources, []giftConfigData{liveV2}, 1) + if len(panel) != 1 || panel[0].Name != "Season Star V1" || panel[0].PriceVersion != "v1" || panel[0].CoinPrice != 7 || + panel[0].Resource.PreviewURL != "https://static.example.test/season-star-v1.png" || panel[0].EntitlementID != "ent-pinned-star" || + panel[0].Source != "bag" || panel[0].RemainingQuantity != 2 { + t.Fatalf("pinned bag panel drifted to live V2 catalog: %+v", panel) + } + // A disabled gift is absent from the live catalog, but the verified entitlement snapshot remains visible. + panel = roomGiftBagGiftsFromResources(resources, nil, 1) + if len(panel) != 1 || panel[0].Name != "Season Star V1" { + t.Fatalf("disabled pinned gift disappeared from bag panel: %+v", panel) + } + if hidden := roomGiftBagGiftsFromResources(resources, nil, 2); len(hidden) != 0 { + t.Fatalf("pinned gift leaked outside its pin-time region: %+v", hidden) + } + // Legacy inventory has no immutable gift bytes and therefore deliberately follows the current catalog. + resources.Resources[0].SourceSnapshotId = "" + resources.Resources[0].PinnedGiftConfigs = nil + legacy := roomGiftBagGiftsFromResources(resources, []giftConfigData{liveV2}, 1) + if len(legacy) != 1 || legacy[0].Name != "Mutable Star V2" || legacy[0].PriceVersion != "v2" { + t.Fatalf("legacy bag entitlement did not fall back to live catalog: %+v", legacy) + } +} + func TestCreateRoomDataIncludesExplicitIMGroupID(t *testing.T) { data := createRoomDataFromProto(&roomv1.CreateRoomResponse{ Result: &roomv1.CommandResult{Applied: true, RoomVersion: 1, ServerTimeMs: 1700000000000}, diff --git a/services/gateway-service/internal/transport/http/router.go b/services/gateway-service/internal/transport/http/router.go index edc512b4..37f5f317 100644 --- a/services/gateway-service/internal/transport/http/router.go +++ b/services/gateway-service/internal/transport/http/router.go @@ -103,6 +103,8 @@ func (h *Handler) Routes(jwtVerifier *auth.Verifier) http.Handler { CPWeeklyRank: h.cpWeeklyRank, AgencyOpening: h.agencyOpening, Wheel: h.wheel, + + ActivityTemplateRuntime: h.activityTemplateRuntime, }) gameAPI := gameapi.New(gameapi.Config{ GameClient: h.gameClient, diff --git a/services/statistics-service/configs/config.docker.yaml b/services/statistics-service/configs/config.docker.yaml index 11e5b9e2..0d7471f0 100644 --- a/services/statistics-service/configs/config.docker.yaml +++ b/services/statistics-service/configs/config.docker.yaml @@ -34,6 +34,11 @@ rocketmq: topic: "hyapp_game_outbox" consumer_group: "hyapp-statistics-game-outbox" consumer_max_reconsume_times: 16 + activity_outbox: + enabled: true + topic: "hyapp_activity_outbox" + consumer_group: "hyapp-statistics-activity-outbox" + consumer_max_reconsume_times: 16 log: level: info format: json diff --git a/services/statistics-service/configs/config.tencent.example.yaml b/services/statistics-service/configs/config.tencent.example.yaml index 679262f7..5a0376b9 100644 --- a/services/statistics-service/configs/config.tencent.example.yaml +++ b/services/statistics-service/configs/config.tencent.example.yaml @@ -34,6 +34,11 @@ rocketmq: topic: "hyapp_game_outbox" consumer_group: "hyapp-statistics-game-outbox" consumer_max_reconsume_times: 16 + activity_outbox: + enabled: true + topic: "hyapp_activity_outbox" + consumer_group: "hyapp-statistics-activity-outbox" + consumer_max_reconsume_times: 16 log: level: info format: json diff --git a/services/statistics-service/configs/config.yaml b/services/statistics-service/configs/config.yaml index aa4fd4e6..2c92577b 100644 --- a/services/statistics-service/configs/config.yaml +++ b/services/statistics-service/configs/config.yaml @@ -34,6 +34,11 @@ rocketmq: topic: "hyapp_game_outbox" consumer_group: "hyapp-statistics-game-outbox" consumer_max_reconsume_times: 16 + activity_outbox: + enabled: true + topic: "hyapp_activity_outbox" + consumer_group: "hyapp-statistics-activity-outbox" + consumer_max_reconsume_times: 16 log: level: info format: json diff --git a/services/statistics-service/deploy/mysql/initdb/001_statistics_service.sql b/services/statistics-service/deploy/mysql/initdb/001_statistics_service.sql index 23a95e0a..0b87eccc 100644 --- a/services/statistics-service/deploy/mysql/initdb/001_statistics_service.sql +++ b/services/statistics-service/deploy/mysql/initdb/001_statistics_service.sql @@ -439,3 +439,94 @@ CREATE TABLE IF NOT EXISTS stat_self_game_user_day ( KEY idx_stat_self_game_user_win (app_code, stat_tz, stat_day, game_id, net_win_coin), KEY idx_stat_self_game_user_region (app_code, stat_tz, stat_day, region_id, game_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='自研游戏用户风险日统计表'; + +-- 活动业务库只输出包含完整维度的不可变 MQ 事实;统计查询只读取以下本地聚合表。 +CREATE TABLE IF NOT EXISTS stat_activity_template_summary ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + visit_event_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + first_occurred_at_ms BIGINT NOT NULL DEFAULT 0, + last_occurred_at_ms BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version), + KEY idx_stat_activity_template_summary_code (app_code, template_code, published_version) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版版本累计统计'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + participant_count BIGINT NOT NULL DEFAULT 0, + visit_event_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id), + KEY idx_stat_activity_template_day_code (app_code, template_code, published_version, stat_day), + KEY idx_stat_activity_template_day_region (app_code, template_id, published_version, region_id, stat_day) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版版本区域日统计'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_gift_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + gift_id VARCHAR(96) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, gift_id), + KEY idx_stat_activity_template_gift_rank (app_code, template_id, published_version, stat_day, coin_amount, gift_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版礼物日聚合'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_task_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(96) NOT NULL, + task_type VARCHAR(64) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, task_key), + KEY idx_stat_activity_template_task_rank (app_code, template_id, published_version, stat_day, completed_count, task_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版任务日聚合'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_participants ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + published_version BIGINT NOT NULL, + scope_type VARCHAR(20) NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + dimension_key VARCHAR(128) NOT NULL DEFAULT '', + user_id BIGINT NOT NULL, + first_participated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, scope_type, stat_day, region_id, dimension_key, user_id), + KEY idx_stat_activity_participant_dimension (app_code, template_id, published_version, scope_type, dimension_key, stat_day, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版参与者去重投影'; diff --git a/services/statistics-service/deploy/mysql/migrations/002_activity_template_stats.sql b/services/statistics-service/deploy/mysql/migrations/002_activity_template_stats.sql new file mode 100644 index 00000000..ab8cd1d3 --- /dev/null +++ b/services/statistics-service/deploy/mysql/migrations/002_activity_template_stats.sql @@ -0,0 +1,93 @@ +SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 活动 owner 只通过 MQ 传递不可变事实;以下表均由 statistics-service 独占, +-- 在线数据中心不会回查活动业务库或扫描高基数原始事实。 +CREATE TABLE IF NOT EXISTS stat_activity_template_summary ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + visit_event_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + first_occurred_at_ms BIGINT NOT NULL DEFAULT 0, + last_occurred_at_ms BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version), + KEY idx_stat_activity_template_summary_code (app_code, template_code, published_version) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版版本累计统计'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + participant_count BIGINT NOT NULL DEFAULT 0, + visit_event_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id), + KEY idx_stat_activity_template_day_code (app_code, template_code, published_version, stat_day), + KEY idx_stat_activity_template_day_region (app_code, template_id, published_version, region_id, stat_day) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版版本区域日统计'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_gift_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + gift_id VARCHAR(96) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, + coin_amount BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, gift_id), + KEY idx_stat_activity_template_gift_rank (app_code, template_id, published_version, stat_day, coin_amount, gift_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版礼物日聚合'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_task_day ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(96) NOT NULL, + task_type VARCHAR(64) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, + claimed_count BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, task_key), + KEY idx_stat_activity_template_task_rank (app_code, template_id, published_version, stat_day, completed_count, task_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版任务日聚合'; + +CREATE TABLE IF NOT EXISTS stat_activity_template_participants ( + app_code VARCHAR(32) NOT NULL, + template_id VARCHAR(96) NOT NULL, + published_version BIGINT NOT NULL, + scope_type VARCHAR(20) NOT NULL, + stat_day DATE NOT NULL, + region_id BIGINT NOT NULL DEFAULT 0, + dimension_key VARCHAR(128) NOT NULL DEFAULT '', + user_id BIGINT NOT NULL, + first_participated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, scope_type, stat_day, region_id, dimension_key, user_id), + KEY idx_stat_activity_participant_dimension (app_code, template_id, published_version, scope_type, dimension_key, stat_day, user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版参与者去重投影'; diff --git a/services/statistics-service/internal/app/activity_template_flow_test.go b/services/statistics-service/internal/app/activity_template_flow_test.go new file mode 100644 index 00000000..42a3c49c --- /dev/null +++ b/services/statistics-service/internal/app/activity_template_flow_test.go @@ -0,0 +1,201 @@ +package app + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "runtime" + "strings" + "testing" + "time" + + "hyapp/internal/testutil/mysqlschema" + "hyapp/pkg/activitymq" + mysqlstorage "hyapp/services/statistics-service/internal/storage/mysql" +) + +func TestStatisticsActivityTagExpressionOnlyIncludesModeledFacts(t *testing.T) { + expression, err := activitymq.LegacyCompatibleTagExpression(statisticsActivityEventTypes()...) + if err != nil { + t.Fatalf("activity tag expression: %v", err) + } + for _, tag := range []string{ + activitymq.TagActivityTemplateFact, + activitymq.EventTypeGiftScored, + activitymq.EventTypeTaskProgressed, + activitymq.EventTypeTaskClaimed, + activitymq.EventTypeActivityVisited, + } { + if !strings.Contains(expression, tag) { + t.Fatalf("activity selector %q misses %q", expression, tag) + } + } +} + +func TestActivityTemplateDataHTTPRejectsPartialUTCDay(t *testing.T) { + start := time.Date(2026, time.July, 14, 1, 0, 0, 0, time.UTC).UnixMilli() + request := httptest.NewRequest(http.MethodGet, fmt.Sprintf( + "/internal/v1/statistics/activity-templates/data?app_code=lalu&template_id=template-1&published_version=2&start_ms=%d&end_ms=%d", + start, start+24*time.Hour.Milliseconds(), + ), nil) + response := httptest.NewRecorder() + (&queryHTTPServer{}).activityTemplateData(response, request) + if response.Code != http.StatusBadRequest || !strings.Contains(response.Body.String(), "UTC 00:00") { + t.Fatalf("unexpected partial-day response: status=%d body=%s", response.Code, response.Body.String()) + } +} + +func TestActivityTemplateMQProjectionAndQueryHTTPAreIdempotent(t *testing.T) { + ctx := context.Background() + _, file, _, _ := runtime.Caller(0) + schema := mysqlschema.New(t, mysqlschema.Config{ + InitDBPath: mysqlschema.InitDBPath(t, file, "../../deploy/mysql/initdb/001_statistics_service.sql"), + DatabasePrefix: "hy_stats_activity_template", + }) + repo, err := mysqlstorage.Open(ctx, schema.DSN) + if err != nil { + t.Fatalf("open statistics repository: %v", err) + } + t.Cleanup(func() { _ = repo.Close() }) + + dayStart := time.Date(2026, time.July, 14, 0, 0, 0, 0, time.UTC) + base := activitymq.ActivityTemplateFactMessage{ + AppCode: "lalu", TemplateID: "template-1", TemplateCode: "summer_rank", PublishedVersion: 2, + StatDay: "2026-07-14", RegionID: 210, OccurredAtMS: dayStart.Add(8 * time.Hour).UnixMilli(), + } + facts := []activitymq.ActivityTemplateFactMessage{ + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:visit:1", EventType: activitymq.EventTypeActivityVisited, UserID: 42, + VisitCountDelta: 1, + }), + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:gift:1", EventType: activitymq.EventTypeGiftScored, UserID: 42, + GiftID: "rose", GiftCountDelta: 2, CoinAmountDelta: 200, + }), + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:gift:2", EventType: activitymq.EventTypeGiftScored, UserID: 43, + RegionID: 211, GiftID: "rose", GiftCountDelta: 1, CoinAmountDelta: 100, + }), + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:task:1", EventType: activitymq.EventTypeTaskProgressed, UserID: 42, + TaskKey: "send_gift", TaskType: "gift", ProgressDelta: 5, CompletedDelta: 1, + }), + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:task:2", EventType: activitymq.EventTypeTaskProgressed, UserID: 43, + RegionID: 211, TaskKey: "send_gift", TaskType: "gift", ProgressDelta: 2, + }), + mergeActivityFact(base, activitymq.ActivityTemplateFactMessage{ + EventID: "activity:claim:1", EventType: activitymq.EventTypeTaskClaimed, UserID: 42, + TaskKey: "send_gift", TaskType: "gift", ClaimedDelta: 1, + }), + } + for _, fact := range facts { + body, encodeErr := activitymq.EncodeActivityTemplateFactMessage(fact) + if encodeErr != nil { + t.Fatalf("encode %s: %v", fact.EventID, encodeErr) + } + if err := ConsumeActivityOutboxBody(ctx, repo, body); err != nil { + t.Fatalf("consume %s: %v", fact.EventID, err) + } + // RocketMQ is at-least-once. Replaying the same event must leave all + // counters and participant projections unchanged. + if fact.EventID == "activity:gift:1" { + if err := ConsumeActivityOutboxBody(ctx, repo, body); err != nil { + t.Fatalf("consume duplicate %s: %v", fact.EventID, err) + } + } + } + + server, err := newQueryHTTPServer("127.0.0.1:0", repo) + if err != nil { + t.Fatalf("create query server: %v", err) + } + t.Cleanup(func() { + closeCtx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + _ = server.Close(closeCtx) + }) + go func() { _ = server.Run() }() + + url := fmt.Sprintf( + "http://%s/internal/v1/statistics/activity-templates/data?app_code=lalu&template_id=template-1&published_version=2&start_ms=%d&end_ms=%d", + server.listener.Addr().String(), dayStart.UnixMilli(), dayStart.Add(24*time.Hour).UnixMilli(), + ) + response, err := http.Get(url) + if err != nil { + t.Fatalf("query activity data: %v", err) + } + defer response.Body.Close() + if response.StatusCode != http.StatusOK { + t.Fatalf("unexpected status: %s", response.Status) + } + var data mysqlstorage.ActivityTemplateData + if err := json.NewDecoder(response.Body).Decode(&data); err != nil { + t.Fatalf("decode activity data: %v", err) + } + if data.Overview.Participants != 2 || data.Overview.VisitCount != 1 || data.Overview.GiftUsers != 2 || data.Overview.TaskUsers != 2 || + data.Overview.GiftEventCount != 2 || data.Overview.GiftCount != 3 || data.Overview.CoinAmount != 300 || + data.Overview.TaskProgress != 7 || data.Overview.TaskCompleted != 1 || data.Overview.TaskClaimed != 1 { + t.Fatalf("unexpected overview: %+v", data.Overview) + } + if data.Granularity != "day" || data.Timezone != "UTC" || data.DimensionLimit != 100 || + data.GiftSort != "coin_amount_desc,gift_count_desc,gift_id_asc" || + data.TaskSort != "task_completed_desc,task_claimed_desc,task_key_asc" { + t.Fatalf("unexpected query semantics: %+v", data) + } + if len(data.Trend) != 1 || data.Trend[0].Participants != 2 || data.Trend[0].VisitCount != 1 || data.Trend[0].GiftUsers != 2 || data.Trend[0].TaskUsers != 2 { + t.Fatalf("unexpected trend: %+v", data.Trend) + } + if len(data.Gifts) != 1 || data.Gifts[0].GiftID != "rose" || data.Gifts[0].GiftUsers != 2 || data.Gifts[0].GiftCount != 3 { + t.Fatalf("unexpected gifts: %+v", data.Gifts) + } + if len(data.Tasks) != 1 || data.Tasks[0].TaskKey != "send_gift" || data.Tasks[0].TaskUsers != 2 || data.Tasks[0].TaskClaimed != 1 { + t.Fatalf("unexpected tasks: %+v", data.Tasks) + } + + regionResponse, err := http.Get(url + "®ion_id=210") + if err != nil { + t.Fatalf("query regional activity data: %v", err) + } + defer regionResponse.Body.Close() + if regionResponse.StatusCode != http.StatusOK { + t.Fatalf("unexpected regional status: %s", regionResponse.Status) + } + var regionData mysqlstorage.ActivityTemplateData + if err := json.NewDecoder(regionResponse.Body).Decode(®ionData); err != nil { + t.Fatalf("decode regional activity data: %v", err) + } + if regionData.RegionID != 210 || regionData.Overview.Participants != 1 || regionData.Overview.VisitCount != 1 || regionData.Overview.GiftUsers != 1 || + regionData.Overview.TaskUsers != 1 || regionData.Overview.GiftCount != 2 || regionData.Overview.CoinAmount != 200 || + regionData.Overview.TaskProgress != 5 || regionData.Overview.TaskCompleted != 1 || regionData.Overview.TaskClaimed != 1 { + t.Fatalf("unexpected regional overview: %+v", regionData.Overview) + } +} + +func mergeActivityFact(base, override activitymq.ActivityTemplateFactMessage) activitymq.ActivityTemplateFactMessage { + if override.EventID != "" { + base.EventID = override.EventID + } + if override.EventType != "" { + base.EventType = override.EventType + } + if override.RegionID != 0 { + base.RegionID = override.RegionID + } + base.UserID = override.UserID + base.GiftID = override.GiftID + base.TaskKey = override.TaskKey + base.TaskType = override.TaskType + base.GiftCountDelta = override.GiftCountDelta + base.CoinAmountDelta = override.CoinAmountDelta + base.ProgressDelta = override.ProgressDelta + base.CompletedDelta = override.CompletedDelta + base.ClaimedDelta = override.ClaimedDelta + base.VisitCountDelta = override.VisitCountDelta + if override.AttributionAtMS > 0 { + base.AttributionAtMS = override.AttributionAtMS + } + return base +} diff --git a/services/statistics-service/internal/app/app.go b/services/statistics-service/internal/app/app.go index b1b831f3..7793722a 100644 --- a/services/statistics-service/internal/app/app.go +++ b/services/statistics-service/internal/app/app.go @@ -8,6 +8,7 @@ import ( "google.golang.org/protobuf/proto" roomeventsv1 "hyapp.local/api/proto/events/room/v1" + "hyapp/pkg/activitymq" "hyapp/pkg/appcode" "hyapp/pkg/gamemq" "hyapp/pkg/grpchealth" @@ -124,7 +125,7 @@ func (a *App) closeHealthHTTP() { } func newConsumers(cfg config.Config, repo *mysqlstorage.Repository) ([]*rocketmqx.Consumer, error) { - consumers := make([]*rocketmqx.Consumer, 0, 4) + consumers := make([]*rocketmqx.Consumer, 0, 5) add := func(mq config.ConsumerMQConfig, tag string, handler rocketmqx.Handler) error { if !mq.Enabled { return nil @@ -176,6 +177,17 @@ func newConsumers(cfg config.Config, repo *mysqlstorage.Repository) ([]*rocketmq shutdownConsumers(consumers) return nil, err } + activityTagExpression, err := activitymq.LegacyCompatibleTagExpression(statisticsActivityEventTypes()...) + if err != nil { + shutdownConsumers(consumers) + return nil, err + } + if err := add(cfg.RocketMQ.ActivityOutbox, activityTagExpression, func(ctx context.Context, message rocketmqx.ConsumedMessage) error { + return ConsumeActivityOutboxBody(ctx, repo, message.Body) + }); err != nil { + shutdownConsumers(consumers) + return nil, err + } return consumers, nil } @@ -203,6 +215,15 @@ func statisticsRoomEventTypes() []string { } } +func statisticsActivityEventTypes() []string { + return []string{ + activitymq.EventTypeGiftScored, + activitymq.EventTypeTaskProgressed, + activitymq.EventTypeTaskClaimed, + activitymq.EventTypeActivityVisited, + } +} + // ConsumeUserOutboxBody 是 user outbox 的唯一统计投影入口;实时 MQ 和离线回灌共用它,避免同一 payload 出现两套解析口径。 func ConsumeUserOutboxBody(ctx context.Context, repo *mysqlstorage.Repository, body []byte) error { if event, ok, err := userRegisteredEvent(body); err != nil || ok { @@ -314,6 +335,16 @@ func ConsumeGameOutboxBody(ctx context.Context, repo *mysqlstorage.Repository, b return repo.ConsumeSelfGameMatch(appcode.WithContext(ctx, match.AppCode), match) } +// ConsumeActivityOutboxBody decodes a self-contained template fact and writes +// only statistics-owned projections; no activity owner database is consulted. +func ConsumeActivityOutboxBody(ctx context.Context, repo *mysqlstorage.Repository, body []byte) error { + event, err := activitymq.DecodeActivityTemplateFactMessage(body) + if err != nil { + return err + } + return repo.ConsumeActivityTemplateFact(appcode.WithContext(ctx, event.AppCode), event) +} + func userRegisteredEvent(body []byte) (mysqlstorage.UserRegisteredEvent, bool, error) { message, err := usermq.DecodeUserOutboxMessage(body) if err != nil { diff --git a/services/statistics-service/internal/app/query_http.go b/services/statistics-service/internal/app/query_http.go index 79d36a84..b611d40f 100644 --- a/services/statistics-service/internal/app/query_http.go +++ b/services/statistics-service/internal/app/query_http.go @@ -41,6 +41,7 @@ func newQueryHTTPServer(addr string, repo *mysqlstorage.Repository) (*queryHTTPS mux.HandleFunc("/internal/v1/statistics/social/coin-seller-recharge-orders", s.socialCoinSellerRechargeOrder) mux.HandleFunc("/internal/v1/statistics/self-game/events", s.selfGameEvents) mux.HandleFunc("/internal/v1/statistics/self-games/overview", s.selfGameOverview) + mux.HandleFunc("/internal/v1/statistics/activity-templates/data", s.activityTemplateData) s.server = &http.Server{Handler: mux, ReadHeaderTimeout: 2 * time.Second} return s, nil } @@ -91,6 +92,45 @@ func (s *queryHTTPServer) overview(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, overview) } +func (s *queryHTTPServer) activityTemplateData(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeJSON(w, http.StatusMethodNotAllowed, map[string]any{"error": "method not allowed"}) + return + } + query := r.URL.Query() + request := mysqlstorage.ActivityTemplateDataQuery{ + AppCode: query.Get("app_code"), + TemplateID: query.Get("template_id"), + PublishedVersion: parseInt64(query.Get("published_version")), + RegionID: parseInt64(query.Get("region_id")), + StartMS: parseInt64(query.Get("start_ms")), + EndMS: parseInt64(query.Get("end_ms")), + } + if strings.TrimSpace(request.AppCode) == "" || strings.TrimSpace(request.TemplateID) == "" || + request.PublishedVersion <= 0 || request.RegionID < 0 || request.StartMS <= 0 || request.EndMS <= request.StartMS { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": "app_code, template_id, published_version, start_ms and end_ms are required"}) + return + } + if !isUTCDayBoundary(request.StartMS) || !isUTCDayBoundary(request.EndMS) { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": "start_ms and end_ms must be UTC 00:00 day boundaries"}) + return + } + data, err := s.repo.QueryActivityTemplateData(r.Context(), request) + if err != nil { + writeJSON(w, http.StatusInternalServerError, map[string]any{"error": err.Error()}) + return + } + writeJSON(w, http.StatusOK, data) +} + +func isUTCDayBoundary(ms int64) bool { + if ms <= 0 { + return false + } + timestamp := time.UnixMilli(ms).UTC() + return timestamp.Hour() == 0 && timestamp.Minute() == 0 && timestamp.Second() == 0 && timestamp.Nanosecond() == 0 +} + func (s *queryHTTPServer) platformGrantUsers(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() pageSize := parsePositiveInt(query.Get("page_size")) diff --git a/services/statistics-service/internal/config/config.go b/services/statistics-service/internal/config/config.go index 929d11f4..ec168925 100644 --- a/services/statistics-service/internal/config/config.go +++ b/services/statistics-service/internal/config/config.go @@ -34,6 +34,7 @@ type RocketMQConfig struct { RoomOutbox ConsumerMQConfig `yaml:"room_outbox"` UserOutbox ConsumerMQConfig `yaml:"user_outbox"` GameOutbox ConsumerMQConfig `yaml:"game_outbox"` + ActivityOutbox ConsumerMQConfig `yaml:"activity_outbox"` } type ConsumerMQConfig struct { @@ -104,11 +105,12 @@ func Load(path string) (Config, error) { func defaultRocketMQConfig() RocketMQConfig { return RocketMQConfig{ - Enabled: false, - WalletOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_wallet_outbox", ConsumerGroup: "hyapp-statistics-wallet-outbox", ConsumerMaxReconsumeTimes: 16}, - RoomOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_room_outbox", ConsumerGroup: "hyapp-statistics-room-outbox", ConsumerMaxReconsumeTimes: 16}, - UserOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_user_outbox", ConsumerGroup: "hyapp-statistics-user-outbox", ConsumerMaxReconsumeTimes: 16}, - GameOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_game_outbox", ConsumerGroup: "hyapp-statistics-game-outbox", ConsumerMaxReconsumeTimes: 16}, + Enabled: false, + WalletOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_wallet_outbox", ConsumerGroup: "hyapp-statistics-wallet-outbox", ConsumerMaxReconsumeTimes: 16}, + RoomOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_room_outbox", ConsumerGroup: "hyapp-statistics-room-outbox", ConsumerMaxReconsumeTimes: 16}, + UserOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_user_outbox", ConsumerGroup: "hyapp-statistics-user-outbox", ConsumerMaxReconsumeTimes: 16}, + GameOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_game_outbox", ConsumerGroup: "hyapp-statistics-game-outbox", ConsumerMaxReconsumeTimes: 16}, + ActivityOutbox: ConsumerMQConfig{Enabled: false, Topic: "hyapp_activity_outbox", ConsumerGroup: "hyapp-statistics-activity-outbox", ConsumerMaxReconsumeTimes: 16}, } } @@ -124,7 +126,8 @@ func normalizeRocketMQConfig(cfg RocketMQConfig) RocketMQConfig { cfg.RoomOutbox = normalizeConsumer(cfg.RoomOutbox, defaults.RoomOutbox) cfg.UserOutbox = normalizeConsumer(cfg.UserOutbox, defaults.UserOutbox) cfg.GameOutbox = normalizeConsumer(cfg.GameOutbox, defaults.GameOutbox) - if cfg.WalletOutbox.Enabled || cfg.RoomOutbox.Enabled || cfg.UserOutbox.Enabled || cfg.GameOutbox.Enabled { + cfg.ActivityOutbox = normalizeConsumer(cfg.ActivityOutbox, defaults.ActivityOutbox) + if cfg.WalletOutbox.Enabled || cfg.RoomOutbox.Enabled || cfg.UserOutbox.Enabled || cfg.GameOutbox.Enabled || cfg.ActivityOutbox.Enabled { cfg.Enabled = true } return cfg diff --git a/services/statistics-service/internal/config/config_test.go b/services/statistics-service/internal/config/config_test.go new file mode 100644 index 00000000..5af6af5b --- /dev/null +++ b/services/statistics-service/internal/config/config_test.go @@ -0,0 +1,46 @@ +package config + +import ( + "path/filepath" + "testing" +) + +func TestDefaultActivityOutbox(t *testing.T) { + cfg := Default() + if cfg.RocketMQ.ActivityOutbox.Topic != "hyapp_activity_outbox" { + t.Fatalf("unexpected topic: %s", cfg.RocketMQ.ActivityOutbox.Topic) + } + if cfg.RocketMQ.ActivityOutbox.ConsumerGroup != "hyapp-statistics-activity-outbox" { + t.Fatalf("unexpected consumer group: %s", cfg.RocketMQ.ActivityOutbox.ConsumerGroup) + } +} + +func TestNormalizeActivityOutboxEnablesRocketMQAndDefaultsIdentity(t *testing.T) { + cfg := normalizeRocketMQConfig(RocketMQConfig{ + ActivityOutbox: ConsumerMQConfig{Enabled: true}, + }) + if !cfg.Enabled { + t.Fatal("activity consumer must enable RocketMQ") + } + if cfg.ActivityOutbox.Topic != "hyapp_activity_outbox" || cfg.ActivityOutbox.ConsumerGroup != "hyapp-statistics-activity-outbox" { + t.Fatalf("activity defaults not applied: %+v", cfg.ActivityOutbox) + } + if cfg.ActivityOutbox.ConsumerMaxReconsumeTimes != 16 { + t.Fatalf("unexpected reconsume limit: %d", cfg.ActivityOutbox.ConsumerMaxReconsumeTimes) + } +} + +func TestShippedConfigsEnableActivityOutboxWithStableIdentity(t *testing.T) { + for _, name := range []string{"config.yaml", "config.docker.yaml", "config.tencent.example.yaml"} { + t.Run(name, func(t *testing.T) { + cfg, err := Load(filepath.Join("..", "..", "configs", name)) + if err != nil { + t.Fatalf("load %s: %v", name, err) + } + if !cfg.RocketMQ.ActivityOutbox.Enabled || cfg.RocketMQ.ActivityOutbox.Topic != "hyapp_activity_outbox" || + cfg.RocketMQ.ActivityOutbox.ConsumerGroup != "hyapp-statistics-activity-outbox" { + t.Fatalf("activity outbox config drift in %s: %+v", name, cfg.RocketMQ.ActivityOutbox) + } + }) + } +} diff --git a/services/statistics-service/internal/storage/mysql/activity_template_stats.go b/services/statistics-service/internal/storage/mysql/activity_template_stats.go new file mode 100644 index 00000000..f838ca8b --- /dev/null +++ b/services/statistics-service/internal/storage/mysql/activity_template_stats.go @@ -0,0 +1,528 @@ +package mysql + +import ( + "context" + "database/sql" + "strings" + "time" + + "hyapp/pkg/activitymq" + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" +) + +const ( + activityParticipantScopeSummary = "summary" + activityParticipantScopeDay = "day" + activityParticipantScopeDayRegion = "day_region" + activityParticipantScopeGift = "gift" + activityParticipantScopeGiftRegion = "gift_region" + activityParticipantScopeTask = "task" + activityParticipantScopeTaskRegion = "task_region" + activityParticipantSummaryDay = "1970-01-01" + activityDimensionLimit = 100 +) + +const activityTemplateGiftDayUpsert = ` + INSERT INTO stat_activity_template_gift_day ( + app_code, template_id, template_code, published_version, stat_day, region_id, gift_id, + participant_count, gift_event_count, gift_count, coin_amount, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?) + ON DUPLICATE KEY UPDATE + template_code = VALUES(template_code), participant_count = participant_count + VALUES(participant_count), + gift_event_count = gift_event_count + 1, gift_count = gift_count + VALUES(gift_count), + coin_amount = coin_amount + VALUES(coin_amount), updated_at_ms = VALUES(updated_at_ms)` + +// ActivityTemplateFactEvent aliases the owner MQ contract so replay jobs and +// online consumers cannot accidentally evolve two independent payload shapes. +type ActivityTemplateFactEvent = activitymq.ActivityTemplateFactMessage + +type ActivityTemplateDataQuery struct { + AppCode string + TemplateID string + PublishedVersion int64 + RegionID int64 + StartMS int64 + EndMS int64 +} + +type ActivityTemplateOverview struct { + TemplateID string `json:"template_id"` + TemplateCode string `json:"template_code"` + PublishedVersion int64 `json:"published_version"` + Participants int64 `json:"participants"` + VisitCount int64 `json:"visit_count"` + GiftUsers int64 `json:"gift_users"` + TaskUsers int64 `json:"task_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +type ActivityTemplateTrendPoint struct { + StatDay string `json:"stat_day"` + Participants int64 `json:"participants"` + VisitCount int64 `json:"visit_count"` + GiftUsers int64 `json:"gift_users"` + TaskUsers int64 `json:"task_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +type ActivityTemplateGiftStat struct { + GiftID string `json:"gift_id"` + GiftUsers int64 `json:"gift_users"` + GiftEventCount int64 `json:"gift_event_count"` + GiftCount int64 `json:"gift_count"` + CoinAmount int64 `json:"coin_amount"` +} + +type ActivityTemplateTaskStat struct { + TaskKey string `json:"task_key"` + TaskType string `json:"task_type"` + TaskUsers int64 `json:"task_users"` + TaskProgress int64 `json:"task_progress"` + TaskCompleted int64 `json:"task_completed"` + TaskClaimed int64 `json:"task_claimed"` +} + +type ActivityTemplateData struct { + Overview ActivityTemplateOverview `json:"overview"` + Trend []ActivityTemplateTrendPoint `json:"trend"` + Gifts []ActivityTemplateGiftStat `json:"gifts"` + Tasks []ActivityTemplateTaskStat `json:"tasks"` + Granularity string `json:"granularity"` + Timezone string `json:"timezone"` + StartMS int64 `json:"start_ms"` + EndMS int64 `json:"end_ms"` + RegionID int64 `json:"region_id"` + DimensionLimit int `json:"dimension_limit"` + GiftSort string `json:"gift_sort"` + TaskSort string `json:"task_sort"` + ServerTimeMS int64 `json:"server_time_ms"` +} + +func activityTemplateStatSchemaStatements() []string { + return []string{ + `CREATE TABLE IF NOT EXISTS stat_activity_template_summary ( + app_code VARCHAR(32) NOT NULL, template_id VARCHAR(96) NOT NULL, template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, participant_count BIGINT NOT NULL DEFAULT 0, visit_event_count BIGINT NOT NULL DEFAULT 0, + gift_event_count BIGINT NOT NULL DEFAULT 0, gift_count BIGINT NOT NULL DEFAULT 0, coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, completed_count BIGINT NOT NULL DEFAULT 0, claimed_count BIGINT NOT NULL DEFAULT 0, + first_occurred_at_ms BIGINT NOT NULL DEFAULT 0, last_occurred_at_ms BIGINT NOT NULL DEFAULT 0, updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version), + KEY idx_stat_activity_template_summary_code (app_code, template_code, published_version) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`, + `CREATE TABLE IF NOT EXISTS stat_activity_template_day ( + app_code VARCHAR(32) NOT NULL, template_id VARCHAR(96) NOT NULL, template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, stat_day DATE NOT NULL, region_id BIGINT NOT NULL DEFAULT 0, + participant_count BIGINT NOT NULL DEFAULT 0, visit_event_count BIGINT NOT NULL DEFAULT 0, gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, coin_amount BIGINT NOT NULL DEFAULT 0, + progress_value BIGINT NOT NULL DEFAULT 0, completed_count BIGINT NOT NULL DEFAULT 0, claimed_count BIGINT NOT NULL DEFAULT 0, + updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id), + KEY idx_stat_activity_template_day_code (app_code, template_code, published_version, stat_day), + KEY idx_stat_activity_template_day_region (app_code, template_id, published_version, region_id, stat_day) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`, + `CREATE TABLE IF NOT EXISTS stat_activity_template_gift_day ( + app_code VARCHAR(32) NOT NULL, template_id VARCHAR(96) NOT NULL, template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, stat_day DATE NOT NULL, region_id BIGINT NOT NULL DEFAULT 0, gift_id VARCHAR(96) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, gift_event_count BIGINT NOT NULL DEFAULT 0, + gift_count BIGINT NOT NULL DEFAULT 0, coin_amount BIGINT NOT NULL DEFAULT 0, updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, gift_id), + KEY idx_stat_activity_template_gift_rank (app_code, template_id, published_version, stat_day, coin_amount, gift_id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`, + `CREATE TABLE IF NOT EXISTS stat_activity_template_task_day ( + app_code VARCHAR(32) NOT NULL, template_id VARCHAR(96) NOT NULL, template_code VARCHAR(64) NOT NULL, + published_version BIGINT NOT NULL, stat_day DATE NOT NULL, region_id BIGINT NOT NULL DEFAULT 0, + task_key VARCHAR(96) NOT NULL, task_type VARCHAR(64) NOT NULL, + participant_count BIGINT NOT NULL DEFAULT 0, progress_value BIGINT NOT NULL DEFAULT 0, + completed_count BIGINT NOT NULL DEFAULT 0, claimed_count BIGINT NOT NULL DEFAULT 0, updated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, stat_day, region_id, task_key), + KEY idx_stat_activity_template_task_rank (app_code, template_id, published_version, stat_day, completed_count, task_key) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`, + `CREATE TABLE IF NOT EXISTS stat_activity_template_participants ( + app_code VARCHAR(32) NOT NULL, template_id VARCHAR(96) NOT NULL, published_version BIGINT NOT NULL, + scope_type VARCHAR(20) NOT NULL, stat_day DATE NOT NULL, region_id BIGINT NOT NULL DEFAULT 0, + dimension_key VARCHAR(128) NOT NULL DEFAULT '', user_id BIGINT NOT NULL, first_participated_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, template_id, published_version, scope_type, stat_day, region_id, dimension_key, user_id), + KEY idx_stat_activity_participant_dimension (app_code, template_id, published_version, scope_type, dimension_key, stat_day, user_id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`, + } +} + +func (r *Repository) migrateActivityTemplateStats(ctx context.Context) error { + for _, statement := range activityTemplateStatSchemaStatements() { + if _, err := r.db.ExecContext(ctx, statement); err != nil { + return err + } + } + if err := r.ensureActivityTemplateColumn(ctx, "stat_activity_template_summary", "visit_event_count", "visit_event_count BIGINT NOT NULL DEFAULT 0 AFTER participant_count"); err != nil { + return err + } + if err := r.ensureActivityTemplateColumn(ctx, "stat_activity_template_day", "visit_event_count", "visit_event_count BIGINT NOT NULL DEFAULT 0 AFTER participant_count"); err != nil { + return err + } + return nil +} + +func (r *Repository) ensureActivityTemplateColumn(ctx context.Context, tableName string, columnName string, columnDDL string) error { + var count int + if err := r.db.QueryRowContext(ctx, + `SELECT COUNT(*) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`, + tableName, columnName, + ).Scan(&count); err != nil { + return err + } + if count > 0 { + return nil + } + // MySQL does not support ADD COLUMN IF NOT EXISTS across the versions used by + // production and local Compose. These identifiers are fixed owner-schema constants; + // the metadata check keeps repeated startup migrations idempotent without accepting SQL input. + _, err := r.db.ExecContext(ctx, `ALTER TABLE `+tableName+` ADD COLUMN `+columnDDL) + return err +} + +// ConsumeActivityTemplateFact projects one immutable fact and all participant +// uniqueness scopes in one transaction. Event consumption is written first, so +// RocketMQ redelivery cannot inflate either counters or unique participants. +func (r *Repository) ConsumeActivityTemplateFact(ctx context.Context, event ActivityTemplateFactEvent) error { + app := appcode.Normalize(event.AppCode) + event.AppCode = app + event.EventID = strings.TrimSpace(event.EventID) + event.EventType = strings.TrimSpace(event.EventType) + event.TemplateID = strings.TrimSpace(event.TemplateID) + event.TemplateCode = strings.TrimSpace(event.TemplateCode) + event.GiftID = strings.TrimSpace(event.GiftID) + event.TaskKey = strings.TrimSpace(event.TaskKey) + event.TaskType = strings.TrimSpace(event.TaskType) + if _, err := activitymq.EncodeActivityTemplateFactMessage(event); err != nil { + return xerr.New(xerr.InvalidArgument, err.Error()) + } + ctx = appcode.WithContext(ctx, app) + return r.withEvent(ctx, SourceActivity, event.EventID, event.EventType, func(tx *sql.Tx, nowMS int64) error { + return r.applyActivityTemplateFact(ctx, tx, event, nowMS) + }) +} + +func (r *Repository) applyActivityTemplateFact(ctx context.Context, tx *sql.Tx, event ActivityTemplateFactEvent, nowMS int64) error { + giftEventCount := int64(0) + if event.EventType == activitymq.EventTypeGiftScored { + giftEventCount = 1 + } + + // summary uniqueness has no time or region dimension; it remains the exact + // lifetime participant count even when one user appears in many daily rows. + summaryParticipant, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeSummary, activityParticipantSummaryDay, 0, "") + if err != nil { + return err + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO stat_activity_template_summary ( + app_code, template_id, template_code, published_version, participant_count, + visit_event_count, gift_event_count, gift_count, coin_amount, progress_value, completed_count, claimed_count, + first_occurred_at_ms, last_occurred_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + template_code = VALUES(template_code), participant_count = participant_count + VALUES(participant_count), + visit_event_count = visit_event_count + VALUES(visit_event_count), + gift_event_count = gift_event_count + VALUES(gift_event_count), gift_count = gift_count + VALUES(gift_count), + coin_amount = coin_amount + VALUES(coin_amount), progress_value = progress_value + VALUES(progress_value), + completed_count = completed_count + VALUES(completed_count), claimed_count = claimed_count + VALUES(claimed_count), + first_occurred_at_ms = IF(first_occurred_at_ms = 0, VALUES(first_occurred_at_ms), LEAST(first_occurred_at_ms, VALUES(first_occurred_at_ms))), + last_occurred_at_ms = GREATEST(last_occurred_at_ms, VALUES(last_occurred_at_ms)), updated_at_ms = VALUES(updated_at_ms) + `, event.AppCode, event.TemplateID, event.TemplateCode, event.PublishedVersion, summaryParticipant, + event.VisitCountDelta, giftEventCount, event.GiftCountDelta, event.CoinAmountDelta, event.ProgressDelta, event.CompletedDelta, event.ClaimedDelta, + event.OccurredAtMS, event.OccurredAtMS, nowMS); err != nil { + return err + } + + // A global day scope supports exact cross-region query counts; the regional + // scope independently increments the corresponding regional aggregate row. + if _, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeDay, event.StatDay, 0, ""); err != nil { + return err + } + dayParticipant, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeDayRegion, event.StatDay, event.RegionID, "") + if err != nil { + return err + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO stat_activity_template_day ( + app_code, template_id, template_code, published_version, stat_day, region_id, participant_count, + visit_event_count, gift_event_count, gift_count, coin_amount, progress_value, completed_count, claimed_count, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + template_code = VALUES(template_code), participant_count = participant_count + VALUES(participant_count), + visit_event_count = visit_event_count + VALUES(visit_event_count), + gift_event_count = gift_event_count + VALUES(gift_event_count), gift_count = gift_count + VALUES(gift_count), + coin_amount = coin_amount + VALUES(coin_amount), progress_value = progress_value + VALUES(progress_value), + completed_count = completed_count + VALUES(completed_count), claimed_count = claimed_count + VALUES(claimed_count), + updated_at_ms = VALUES(updated_at_ms) + `, event.AppCode, event.TemplateID, event.TemplateCode, event.PublishedVersion, event.StatDay, event.RegionID, dayParticipant, + event.VisitCountDelta, giftEventCount, event.GiftCountDelta, event.CoinAmountDelta, event.ProgressDelta, event.CompletedDelta, event.ClaimedDelta, nowMS); err != nil { + return err + } + + if event.EventType == activitymq.EventTypeGiftScored && event.GiftID != "" { + if _, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeGift, event.StatDay, 0, event.GiftID); err != nil { + return err + } + giftParticipant, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeGiftRegion, event.StatDay, event.RegionID, event.GiftID) + if err != nil { + return err + } + if _, err := tx.ExecContext(ctx, activityTemplateGiftDayUpsert, + event.AppCode, event.TemplateID, event.TemplateCode, event.PublishedVersion, event.StatDay, event.RegionID, event.GiftID, + giftParticipant, event.GiftCountDelta, event.CoinAmountDelta, nowMS); err != nil { + return err + } + } + + if (event.EventType == activitymq.EventTypeTaskProgressed || event.EventType == activitymq.EventTypeTaskClaimed) && event.TaskKey != "" { + if _, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeTask, event.StatDay, 0, event.TaskKey); err != nil { + return err + } + taskParticipant, err := r.insertActivityTemplateParticipant(ctx, tx, event, activityParticipantScopeTaskRegion, event.StatDay, event.RegionID, event.TaskKey) + if err != nil { + return err + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO stat_activity_template_task_day ( + app_code, template_id, template_code, published_version, stat_day, region_id, task_key, task_type, + participant_count, progress_value, completed_count, claimed_count, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + template_code = VALUES(template_code), task_type = VALUES(task_type), participant_count = participant_count + VALUES(participant_count), + progress_value = progress_value + VALUES(progress_value), completed_count = completed_count + VALUES(completed_count), + claimed_count = claimed_count + VALUES(claimed_count), updated_at_ms = VALUES(updated_at_ms) + `, event.AppCode, event.TemplateID, event.TemplateCode, event.PublishedVersion, event.StatDay, event.RegionID, event.TaskKey, event.TaskType, + taskParticipant, event.ProgressDelta, event.CompletedDelta, event.ClaimedDelta, nowMS); err != nil { + return err + } + } + return nil +} + +func (r *Repository) insertActivityTemplateParticipant( + ctx context.Context, + tx *sql.Tx, + event ActivityTemplateFactEvent, + scopeType string, + statDay string, + regionID int64, + dimensionKey string, +) (int64, error) { + return insertUnique(ctx, tx, ` + INSERT IGNORE INTO stat_activity_template_participants ( + app_code, template_id, published_version, scope_type, stat_day, region_id, dimension_key, user_id, first_participated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + `, event.AppCode, event.TemplateID, event.PublishedVersion, scopeType, statDay, regionID, dimensionKey, event.UserID, event.OccurredAtMS) +} + +// QueryActivityTemplateData reads only statistics-owned aggregate/uniqueness +// projections. start_ms/end_ms use the service-wide UTC [start,end) contract. +// Both boundaries must be UTC 00:00 because a day aggregate cannot truthfully +// answer a partial-day range; rejecting it prevents silently over-reporting data. +func (r *Repository) QueryActivityTemplateData(ctx context.Context, query ActivityTemplateDataQuery) (ActivityTemplateData, error) { + query.AppCode = appcode.Normalize(query.AppCode) + query.TemplateID = strings.TrimSpace(query.TemplateID) + if r == nil || r.db == nil { + return ActivityTemplateData{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + if query.AppCode == "" || query.TemplateID == "" || query.PublishedVersion <= 0 || query.RegionID < 0 || query.StartMS <= 0 || query.EndMS <= query.StartMS { + return ActivityTemplateData{}, xerr.New(xerr.InvalidArgument, "app_code, template_id, published_version and a valid time range are required") + } + if !isUTCActivityDayBoundary(query.StartMS) || !isUTCActivityDayBoundary(query.EndMS) { + return ActivityTemplateData{}, xerr.New(xerr.InvalidArgument, "start_ms and end_ms must be UTC 00:00 day boundaries") + } + startDay := time.UnixMilli(query.StartMS).UTC().Format("2006-01-02") + endDay := time.UnixMilli(query.EndMS - 1).UTC().Format("2006-01-02") + result := ActivityTemplateData{ + Overview: ActivityTemplateOverview{TemplateID: query.TemplateID, PublishedVersion: query.PublishedVersion}, + Trend: make([]ActivityTemplateTrendPoint, 0), + Gifts: make([]ActivityTemplateGiftStat, 0), + Tasks: make([]ActivityTemplateTaskStat, 0), + Granularity: "day", + Timezone: "UTC", + StartMS: query.StartMS, + EndMS: query.EndMS, + RegionID: query.RegionID, + DimensionLimit: activityDimensionLimit, + GiftSort: "coin_amount_desc,gift_count_desc,gift_id_asc", + TaskSort: "task_completed_desc,task_claimed_desc,task_key_asc", + ServerTimeMS: time.Now().UTC().UnixMilli(), + } + + if err := r.db.QueryRowContext(ctx, ` + SELECT COALESCE(MAX(template_code), ''), COALESCE(SUM(visit_event_count), 0), COALESCE(SUM(gift_event_count), 0), COALESCE(SUM(gift_count), 0), + COALESCE(SUM(coin_amount), 0), COALESCE(SUM(progress_value), 0), + COALESCE(SUM(completed_count), 0), COALESCE(SUM(claimed_count), 0) + FROM stat_activity_template_day + WHERE app_code = ? AND template_id = ? AND published_version = ? AND stat_day BETWEEN ? AND ? + AND (? = 0 OR region_id = ?) + `, query.AppCode, query.TemplateID, query.PublishedVersion, startDay, endDay, query.RegionID, query.RegionID).Scan( + &result.Overview.TemplateCode, &result.Overview.VisitCount, &result.Overview.GiftEventCount, &result.Overview.GiftCount, + &result.Overview.CoinAmount, &result.Overview.TaskProgress, &result.Overview.TaskCompleted, &result.Overview.TaskClaimed, + ); err != nil { + return ActivityTemplateData{}, err + } + dayScope, giftScope, taskScope, participantRegionID := activityParticipantQueryScopes(query.RegionID) + if err := r.db.QueryRowContext(ctx, ` + SELECT COUNT(DISTINCT CASE WHEN scope_type = ? THEN user_id END), + COUNT(DISTINCT CASE WHEN scope_type = ? THEN user_id END), + COUNT(DISTINCT CASE WHEN scope_type = ? THEN user_id END) + FROM stat_activity_template_participants + WHERE app_code = ? AND template_id = ? AND published_version = ? + AND scope_type IN (?, ?, ?) AND region_id = ? AND stat_day BETWEEN ? AND ? + `, dayScope, giftScope, taskScope, + query.AppCode, query.TemplateID, query.PublishedVersion, + dayScope, giftScope, taskScope, participantRegionID, startDay, endDay, + ).Scan(&result.Overview.Participants, &result.Overview.GiftUsers, &result.Overview.TaskUsers); err != nil { + return ActivityTemplateData{}, err + } + + days, err := r.queryActivityTemplateDays(ctx, query, startDay, endDay) + if err != nil { + return ActivityTemplateData{}, err + } + result.Trend = days + gifts, err := r.queryActivityTemplateGifts(ctx, query, startDay, endDay) + if err != nil { + return ActivityTemplateData{}, err + } + result.Gifts = gifts + tasks, err := r.queryActivityTemplateTasks(ctx, query, startDay, endDay) + if err != nil { + return ActivityTemplateData{}, err + } + result.Tasks = tasks + return result, nil +} + +func isUTCActivityDayBoundary(ms int64) bool { + if ms <= 0 { + return false + } + timestamp := time.UnixMilli(ms).UTC() + return timestamp.Hour() == 0 && timestamp.Minute() == 0 && timestamp.Second() == 0 && timestamp.Nanosecond() == 0 +} + +func activityParticipantQueryScopes(regionID int64) (dayScope, giftScope, taskScope string, participantRegionID int64) { + if regionID > 0 { + return activityParticipantScopeDayRegion, activityParticipantScopeGiftRegion, activityParticipantScopeTaskRegion, regionID + } + return activityParticipantScopeDay, activityParticipantScopeGift, activityParticipantScopeTask, 0 +} + +func (r *Repository) queryActivityTemplateDays(ctx context.Context, query ActivityTemplateDataQuery, startDay, endDay string) ([]ActivityTemplateTrendPoint, error) { + dayScope, giftScope, taskScope, participantRegionID := activityParticipantQueryScopes(query.RegionID) + rows, err := r.db.QueryContext(ctx, ` + SELECT d.stat_day, + COALESCE((SELECT COUNT(*) FROM stat_activity_template_participants p + WHERE p.app_code = d.app_code AND p.template_id = d.template_id AND p.published_version = d.published_version + AND p.scope_type = ? AND p.region_id = ? AND p.stat_day = d.stat_day), 0), + COALESCE((SELECT COUNT(DISTINCT p.user_id) FROM stat_activity_template_participants p + WHERE p.app_code = d.app_code AND p.template_id = d.template_id AND p.published_version = d.published_version + AND p.scope_type = ? AND p.region_id = ? AND p.stat_day = d.stat_day), 0), + COALESCE((SELECT COUNT(DISTINCT p.user_id) FROM stat_activity_template_participants p + WHERE p.app_code = d.app_code AND p.template_id = d.template_id AND p.published_version = d.published_version + AND p.scope_type = ? AND p.region_id = ? AND p.stat_day = d.stat_day), 0), + SUM(d.visit_event_count), SUM(d.gift_event_count), SUM(d.gift_count), SUM(d.coin_amount), SUM(d.progress_value), + SUM(d.completed_count), SUM(d.claimed_count) + FROM stat_activity_template_day d + WHERE d.app_code = ? AND d.template_id = ? AND d.published_version = ? AND d.stat_day BETWEEN ? AND ? + AND (? = 0 OR d.region_id = ?) + GROUP BY d.app_code, d.template_id, d.published_version, d.stat_day + ORDER BY d.stat_day ASC + `, dayScope, participantRegionID, giftScope, participantRegionID, taskScope, participantRegionID, + query.AppCode, query.TemplateID, query.PublishedVersion, startDay, endDay, query.RegionID, query.RegionID) + if err != nil { + return nil, err + } + defer rows.Close() + out := make([]ActivityTemplateTrendPoint, 0) + for rows.Next() { + var item ActivityTemplateTrendPoint + var statDay time.Time + if err := rows.Scan(&statDay, &item.Participants, &item.GiftUsers, &item.TaskUsers, + &item.VisitCount, &item.GiftEventCount, &item.GiftCount, &item.CoinAmount, + &item.TaskProgress, &item.TaskCompleted, &item.TaskClaimed); err != nil { + return nil, err + } + item.StatDay = statDay.UTC().Format("2006-01-02") + out = append(out, item) + } + return out, rows.Err() +} + +func (r *Repository) queryActivityTemplateGifts(ctx context.Context, query ActivityTemplateDataQuery, startDay, endDay string) ([]ActivityTemplateGiftStat, error) { + _, giftScope, _, participantRegionID := activityParticipantQueryScopes(query.RegionID) + rows, err := r.db.QueryContext(ctx, ` + SELECT g.gift_id, + COALESCE((SELECT COUNT(DISTINCT p.user_id) FROM stat_activity_template_participants p + WHERE p.app_code = g.app_code AND p.template_id = g.template_id AND p.published_version = g.published_version + AND p.scope_type = ? AND p.region_id = ? AND p.dimension_key = g.gift_id AND p.stat_day BETWEEN ? AND ?), 0), + SUM(g.gift_event_count), SUM(g.gift_count), SUM(g.coin_amount) + FROM stat_activity_template_gift_day g + WHERE g.app_code = ? AND g.template_id = ? AND g.published_version = ? AND g.stat_day BETWEEN ? AND ? + AND (? = 0 OR g.region_id = ?) + GROUP BY g.app_code, g.template_id, g.published_version, g.gift_id + ORDER BY SUM(g.coin_amount) DESC, SUM(g.gift_count) DESC, g.gift_id ASC + LIMIT ? + `, giftScope, participantRegionID, startDay, endDay, query.AppCode, query.TemplateID, query.PublishedVersion, + startDay, endDay, query.RegionID, query.RegionID, activityDimensionLimit) + if err != nil { + return nil, err + } + defer rows.Close() + out := make([]ActivityTemplateGiftStat, 0) + for rows.Next() { + var item ActivityTemplateGiftStat + if err := rows.Scan(&item.GiftID, &item.GiftUsers, &item.GiftEventCount, &item.GiftCount, &item.CoinAmount); err != nil { + return nil, err + } + out = append(out, item) + } + return out, rows.Err() +} + +func (r *Repository) queryActivityTemplateTasks(ctx context.Context, query ActivityTemplateDataQuery, startDay, endDay string) ([]ActivityTemplateTaskStat, error) { + _, _, taskScope, participantRegionID := activityParticipantQueryScopes(query.RegionID) + rows, err := r.db.QueryContext(ctx, ` + SELECT t.task_key, MAX(t.task_type), + COALESCE((SELECT COUNT(DISTINCT p.user_id) FROM stat_activity_template_participants p + WHERE p.app_code = t.app_code AND p.template_id = t.template_id AND p.published_version = t.published_version + AND p.scope_type = ? AND p.region_id = ? AND p.dimension_key = t.task_key AND p.stat_day BETWEEN ? AND ?), 0), + SUM(t.progress_value), SUM(t.completed_count), SUM(t.claimed_count) + FROM stat_activity_template_task_day t + WHERE t.app_code = ? AND t.template_id = ? AND t.published_version = ? AND t.stat_day BETWEEN ? AND ? + AND (? = 0 OR t.region_id = ?) + GROUP BY t.app_code, t.template_id, t.published_version, t.task_key + ORDER BY SUM(t.completed_count) DESC, SUM(t.claimed_count) DESC, t.task_key ASC + LIMIT ? + `, taskScope, participantRegionID, startDay, endDay, query.AppCode, query.TemplateID, query.PublishedVersion, + startDay, endDay, query.RegionID, query.RegionID, activityDimensionLimit) + if err != nil { + return nil, err + } + defer rows.Close() + out := make([]ActivityTemplateTaskStat, 0) + for rows.Next() { + var item ActivityTemplateTaskStat + if err := rows.Scan(&item.TaskKey, &item.TaskType, &item.TaskUsers, &item.TaskProgress, &item.TaskCompleted, &item.TaskClaimed); err != nil { + return nil, err + } + out = append(out, item) + } + return out, rows.Err() +} diff --git a/services/statistics-service/internal/storage/mysql/activity_template_stats_test.go b/services/statistics-service/internal/storage/mysql/activity_template_stats_test.go new file mode 100644 index 00000000..d17c3f57 --- /dev/null +++ b/services/statistics-service/internal/storage/mysql/activity_template_stats_test.go @@ -0,0 +1,212 @@ +package mysql + +import ( + "context" + "os" + "path/filepath" + "regexp" + "runtime" + "strings" + "testing" + "time" + + "github.com/DATA-DOG/go-sqlmock" + "hyapp/pkg/xerr" +) + +func TestActivityTemplateSchemaIsShippedForFreshAndExistingDatabases(t *testing.T) { + _, file, _, _ := runtime.Caller(0) + serviceRoot := filepath.Clean(filepath.Join(filepath.Dir(file), "..", "..", "..")) + sources := make(map[string]string, 3) + for _, relativePath := range []string{"deploy/mysql/initdb/001_statistics_service.sql", "deploy/mysql/migrations/002_activity_template_stats.sql"} { + content, err := os.ReadFile(filepath.Join(serviceRoot, relativePath)) + if err != nil { + t.Fatalf("read %s: %v", relativePath, err) + } + sources[relativePath] = string(content) + } + sources["runtime migration"] = strings.Join(activityTemplateStatSchemaStatements(), ";\n") + ";" + for _, table := range []string{ + "stat_activity_template_summary", + "stat_activity_template_day", + "stat_activity_template_gift_day", + "stat_activity_template_task_day", + "stat_activity_template_participants", + } { + want := normalizedActivityTableDDL(t, sources["deploy/mysql/initdb/001_statistics_service.sql"], table) + for _, source := range []string{"deploy/mysql/migrations/002_activity_template_stats.sql", "runtime migration"} { + if got := normalizedActivityTableDDL(t, sources[source], table); got != want { + t.Fatalf("%s schema drift for %s\nwant: %s\n got: %s", source, table, want, got) + } + } + } +} + +func normalizedActivityTableDDL(t *testing.T, ddl, table string) string { + t.Helper() + startMarker := "CREATE TABLE IF NOT EXISTS " + table + start := strings.Index(ddl, startMarker) + if start < 0 { + t.Fatalf("DDL misses %s", table) + } + endOffset := strings.Index(ddl[start:], ";") + if endOffset < 0 { + t.Fatalf("DDL for %s is not terminated", table) + } + statement := ddl[start : start+endOffset] + // initdb/migration carry operator-facing table comments while the runtime + // CREATE IF NOT EXISTS intentionally does not; comments are not schema. + statement = regexp.MustCompile(` COMMENT='[^']*'`).ReplaceAllString(statement, "") + return strings.Join(strings.Fields(statement), " ") +} + +func TestActivityTemplateGiftUpsertAddsUniqueParticipantExactlyOnce(t *testing.T) { + const increment = "participant_count = participant_count + VALUES(participant_count)" + if got := strings.Count(activityTemplateGiftDayUpsert, increment); got != 1 { + t.Fatalf("gift aggregate participant increment appears %d times; want exactly one", got) + } +} + +func TestEnsureActivityTemplateColumnIsIdempotent(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("create sql mock: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repo := &Repository{db: db} + columnQuery := `SELECT COUNT\(\*\) FROM information_schema\.COLUMNS WHERE TABLE_SCHEMA = DATABASE\(\) AND TABLE_NAME = \? AND COLUMN_NAME = \?` + + mock.ExpectQuery(columnQuery). + WithArgs("stat_activity_template_day", "visit_event_count"). + WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1)) + if err := repo.ensureActivityTemplateColumn(context.Background(), "stat_activity_template_day", "visit_event_count", "visit_event_count BIGINT NOT NULL DEFAULT 0"); err != nil { + t.Fatalf("existing column must be a no-op: %v", err) + } + + mock.ExpectQuery(columnQuery). + WithArgs("stat_activity_template_day", "visit_event_count"). + WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(0)) + mock.ExpectExec(`ALTER TABLE stat_activity_template_day ADD COLUMN visit_event_count BIGINT NOT NULL DEFAULT 0`). + WillReturnResult(sqlmock.NewResult(0, 0)) + if err := repo.ensureActivityTemplateColumn(context.Background(), "stat_activity_template_day", "visit_event_count", "visit_event_count BIGINT NOT NULL DEFAULT 0"); err != nil { + t.Fatalf("missing column must be added: %v", err) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("unmet SQL expectations: %v", err) + } +} + +func TestQueryActivityTemplateDataEmptyResultKeepsStableZeroShape(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("create sql mock: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + repo := &Repository{db: db} + start := time.Date(2026, time.July, 14, 0, 0, 0, 0, time.UTC).UnixMilli() + end := start + 24*time.Hour.Milliseconds() + + mock.ExpectQuery(`SELECT COALESCE\(MAX\(template_code\), ''\)`). + WithArgs("lalu", "template-1", int64(2), "2026-07-14", "2026-07-14", int64(0), int64(0)). + WillReturnRows(sqlmock.NewRows([]string{ + "template_code", "visit_event_count", "gift_event_count", "gift_count", "coin_amount", "progress_value", "completed_count", "claimed_count", + }).AddRow("", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0))) + mock.ExpectQuery(`SELECT COUNT\(DISTINCT CASE WHEN scope_type = \? THEN user_id END\)`). + WithArgs( + activityParticipantScopeDay, activityParticipantScopeGift, activityParticipantScopeTask, + "lalu", "template-1", int64(2), + activityParticipantScopeDay, activityParticipantScopeGift, activityParticipantScopeTask, + int64(0), "2026-07-14", "2026-07-14", + ). + WillReturnRows(sqlmock.NewRows([]string{"participants", "gift_users", "task_users"}).AddRow(int64(0), int64(0), int64(0))) + mock.ExpectQuery(`SELECT d\.stat_day`). + WithArgs(activityParticipantScopeDay, int64(0), activityParticipantScopeGift, int64(0), activityParticipantScopeTask, int64(0), + "lalu", "template-1", int64(2), "2026-07-14", "2026-07-14", int64(0), int64(0)). + WillReturnRows(sqlmock.NewRows([]string{"stat_day"})) + mock.ExpectQuery(`SELECT g\.gift_id`). + WithArgs(activityParticipantScopeGift, int64(0), "2026-07-14", "2026-07-14", "lalu", "template-1", int64(2), + "2026-07-14", "2026-07-14", int64(0), int64(0), activityDimensionLimit). + WillReturnRows(sqlmock.NewRows([]string{"gift_id"})) + mock.ExpectQuery(`SELECT t\.task_key`). + WithArgs(activityParticipantScopeTask, int64(0), "2026-07-14", "2026-07-14", "lalu", "template-1", int64(2), + "2026-07-14", "2026-07-14", int64(0), int64(0), activityDimensionLimit). + WillReturnRows(sqlmock.NewRows([]string{"task_key"})) + + data, err := repo.QueryActivityTemplateData(context.Background(), ActivityTemplateDataQuery{ + AppCode: "lalu", TemplateID: "template-1", PublishedVersion: 2, StartMS: start, EndMS: end, + }) + if err != nil { + t.Fatalf("query empty activity data: %v", err) + } + if data.Overview.TemplateID != "template-1" || data.Overview.PublishedVersion != 2 || data.Overview.Participants != 0 || + data.Overview.GiftUsers != 0 || data.Overview.TaskUsers != 0 || data.Overview.GiftCount != 0 || data.Overview.TaskCompleted != 0 { + t.Fatalf("unexpected empty overview: %+v", data.Overview) + } + if data.Trend == nil || data.Gifts == nil || data.Tasks == nil || len(data.Trend) != 0 || len(data.Gifts) != 0 || len(data.Tasks) != 0 { + t.Fatalf("empty collections must be non-null empty arrays: %+v", data) + } + if data.Granularity != "day" || data.Timezone != "UTC" || data.DimensionLimit != 100 || + data.GiftSort != "coin_amount_desc,gift_count_desc,gift_id_asc" || + data.TaskSort != "task_completed_desc,task_claimed_desc,task_key_asc" { + t.Fatalf("query semantics missing from empty result: %+v", data) + } + + // Region queries must switch to the regional uniqueness scopes rather than + // summing all-region users, because one user may have touched multiple regions. + mock.ExpectQuery(`SELECT COALESCE\(MAX\(template_code\), ''\)`). + WithArgs("lalu", "template-1", int64(2), "2026-07-14", "2026-07-14", int64(210), int64(210)). + WillReturnRows(sqlmock.NewRows([]string{ + "template_code", "visit_event_count", "gift_event_count", "gift_count", "coin_amount", "progress_value", "completed_count", "claimed_count", + }).AddRow("", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0))) + mock.ExpectQuery(`SELECT COUNT\(DISTINCT CASE WHEN scope_type = \? THEN user_id END\)`). + WithArgs( + activityParticipantScopeDayRegion, activityParticipantScopeGiftRegion, activityParticipantScopeTaskRegion, + "lalu", "template-1", int64(2), + activityParticipantScopeDayRegion, activityParticipantScopeGiftRegion, activityParticipantScopeTaskRegion, + int64(210), "2026-07-14", "2026-07-14", + ). + WillReturnRows(sqlmock.NewRows([]string{"participants", "gift_users", "task_users"}).AddRow(int64(0), int64(0), int64(0))) + mock.ExpectQuery(`SELECT d\.stat_day`). + WithArgs(activityParticipantScopeDayRegion, int64(210), activityParticipantScopeGiftRegion, int64(210), activityParticipantScopeTaskRegion, int64(210), + "lalu", "template-1", int64(2), "2026-07-14", "2026-07-14", int64(210), int64(210)). + WillReturnRows(sqlmock.NewRows([]string{"stat_day"})) + mock.ExpectQuery(`SELECT g\.gift_id`). + WithArgs(activityParticipantScopeGiftRegion, int64(210), "2026-07-14", "2026-07-14", "lalu", "template-1", int64(2), + "2026-07-14", "2026-07-14", int64(210), int64(210), activityDimensionLimit). + WillReturnRows(sqlmock.NewRows([]string{"gift_id"})) + mock.ExpectQuery(`SELECT t\.task_key`). + WithArgs(activityParticipantScopeTaskRegion, int64(210), "2026-07-14", "2026-07-14", "lalu", "template-1", int64(2), + "2026-07-14", "2026-07-14", int64(210), int64(210), activityDimensionLimit). + WillReturnRows(sqlmock.NewRows([]string{"task_key"})) + regionData, err := repo.QueryActivityTemplateData(context.Background(), ActivityTemplateDataQuery{ + AppCode: "lalu", TemplateID: "template-1", PublishedVersion: 2, RegionID: 210, StartMS: start, EndMS: end, + }) + if err != nil { + t.Fatalf("query empty regional activity data: %v", err) + } + if regionData.RegionID != 210 || regionData.Trend == nil || regionData.Gifts == nil || regionData.Tasks == nil { + t.Fatalf("unexpected regional empty shape: %+v", regionData) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("unmet SQL expectations: %v", err) + } +} + +func TestQueryActivityTemplateDataRejectsPartialUTCDay(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("create sql mock: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + start := time.Date(2026, time.July, 14, 1, 0, 0, 0, time.UTC).UnixMilli() + _, err = (&Repository{db: db}).QueryActivityTemplateData(context.Background(), ActivityTemplateDataQuery{ + AppCode: "lalu", TemplateID: "template-1", PublishedVersion: 2, + StartMS: start, EndMS: start + 24*time.Hour.Milliseconds(), + }) + if !xerr.IsCode(err, xerr.InvalidArgument) || !strings.Contains(err.Error(), "UTC 00:00") { + t.Fatalf("expected UTC day alignment error, got %v", err) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Fatalf("unaligned range must not query aggregate tables: %v", err) + } +} diff --git a/services/statistics-service/internal/storage/mysql/repository.go b/services/statistics-service/internal/storage/mysql/repository.go index 560ad93c..fcf945ff 100644 --- a/services/statistics-service/internal/storage/mysql/repository.go +++ b/services/statistics-service/internal/storage/mysql/repository.go @@ -15,12 +15,13 @@ import ( ) const ( - SourceUser = "user" - SourceWallet = "wallet" - SourceRoom = "room" - SourceGame = "game" - SourceH5 = "h5" - SourceFinance = "finance" + SourceUser = "user" + SourceWallet = "wallet" + SourceRoom = "room" + SourceGame = "game" + SourceH5 = "h5" + SourceFinance = "finance" + SourceActivity = "activity" ) // Repository owns the statistics read model. Online queries must use aggregate @@ -351,6 +352,9 @@ func (r *Repository) Migrate(ctx context.Context) error { return err } } + if err := r.migrateActivityTemplateStats(ctx); err != nil { + return err + } for _, table := range []string{ "stat_app_day_country", "stat_user_day_activity", diff --git a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql index 3405b7cd..3e4a3215 100644 --- a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql +++ b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql @@ -1129,6 +1129,24 @@ CREATE TABLE IF NOT EXISTS resource_group_items ( KEY idx_resource_group_items_group (app_code, group_id, sort_order) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源分组明细表'; +CREATE TABLE IF NOT EXISTS resource_group_snapshots ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + snapshot_id VARCHAR(96) NOT NULL COMMENT '不可变资源组快照 ID', + pin_key VARCHAR(192) NOT NULL COMMENT '发布方业务版本幂等键', + source_group_id BIGINT NOT NULL COMMENT '来源资源组 ID', + version_no BIGINT NOT NULL COMMENT '来源资源组递增快照版本', + snapshot_hash CHAR(64) NOT NULL COMMENT '完整快照 SHA-256', + snapshot_json JSON NOT NULL COMMENT '含资源详情和钱包资产的完整不可变快照', + source_group_updated_at_ms BIGINT NOT NULL COMMENT '锁定时来源资源组版本', + source_content_hash CHAR(64) NOT NULL COMMENT '资源组、组项和嵌套资源的规范化内容哈希', + created_by_user_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, snapshot_id), + UNIQUE KEY uk_resource_group_snapshot_pin (app_code, pin_key), + UNIQUE KEY uk_resource_group_snapshot_version (app_code, source_group_id, version_no), + KEY idx_resource_group_snapshot_source (app_code, source_group_id, created_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源组发布态不可变奖励快照'; + CREATE TABLE IF NOT EXISTS resource_shop_items ( app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离', shop_item_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '道具商店条目 ID', @@ -1404,10 +1422,16 @@ CREATE TABLE IF NOT EXISTS user_resource_entitlements ( effective_at_ms BIGINT NOT NULL COMMENT '生效时间,UTC epoch ms', expires_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '过期时间,UTC epoch ms', source_grant_id VARCHAR(96) NOT NULL COMMENT '来源发放 ID', + source_snapshot_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '不可变资源组快照 ID;空表示旧版可变目录发放', + resource_snapshot_hash CHAR(64) NOT NULL DEFAULT '' COMMENT '权益资源语义 SHA-256;仅同哈希允许合并', + resource_snapshot_json JSON NULL COMMENT '发放时完整不可变资源快照', + gift_snapshot_hash CHAR(64) NOT NULL DEFAULT '' COMMENT '发放时礼物配置、价格、展示和区域语义 SHA-256', + gift_snapshot_json JSON NULL COMMENT '钱包持有的不可变礼物语义快照;仅 pinned gift entitlement 使用', created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', PRIMARY KEY (app_code, entitlement_id), KEY idx_user_resource_active (app_code, user_id, resource_id, status, expires_at_ms), + KEY idx_user_resource_semantic (app_code, user_id, resource_id, resource_snapshot_hash, status, expires_at_ms), KEY idx_user_resource_user_type (app_code, user_id, status, updated_at_ms) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户资源权益表'; diff --git a/services/wallet-service/deploy/mysql/migrations/001_activity_reward_snapshots.sql b/services/wallet-service/deploy/mysql/migrations/001_activity_reward_snapshots.sql new file mode 100644 index 00000000..420eae5d --- /dev/null +++ b/services/wallet-service/deploy/mysql/migrations/001_activity_reward_snapshots.sql @@ -0,0 +1,73 @@ +-- Activity reward snapshots are wallet-owned immutable grant facts. Every ALTER/INDEX is guarded so this +-- migration can run after fresh initdb and can be retried on later deployments without duplicate errors. +CREATE TABLE IF NOT EXISTS resource_group_snapshots ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + snapshot_id VARCHAR(96) NOT NULL COMMENT '不可变资源组快照 ID', + pin_key VARCHAR(192) NOT NULL COMMENT '发布方业务版本幂等键', + source_group_id BIGINT NOT NULL COMMENT '来源资源组 ID', + version_no BIGINT NOT NULL COMMENT '来源资源组递增快照版本', + snapshot_hash CHAR(64) NOT NULL COMMENT '完整快照 SHA-256', + snapshot_json JSON NOT NULL COMMENT '含资源详情、礼物语义和钱包资产的完整不可变快照', + source_group_updated_at_ms BIGINT NOT NULL COMMENT '锁定时来源资源组版本', + source_content_hash CHAR(64) NOT NULL COMMENT '资源组、组项和嵌套资源的规范化内容哈希', + created_by_user_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, snapshot_id), + UNIQUE KEY uk_resource_group_snapshot_pin (app_code, pin_key), + UNIQUE KEY uk_resource_group_snapshot_version (app_code, source_group_id, version_no), + KEY idx_resource_group_snapshot_source (app_code, source_group_id, created_at_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源组发布态不可变奖励快照'; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = 'source_snapshot_id') = 0, + 'ALTER TABLE user_resource_entitlements ADD COLUMN source_snapshot_id VARCHAR(96) NOT NULL DEFAULT '''' AFTER source_grant_id', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = 'resource_snapshot_hash') = 0, + 'ALTER TABLE user_resource_entitlements ADD COLUMN resource_snapshot_hash CHAR(64) NOT NULL DEFAULT '''' AFTER source_snapshot_id', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = 'resource_snapshot_json') = 0, + 'ALTER TABLE user_resource_entitlements ADD COLUMN resource_snapshot_json JSON NULL AFTER resource_snapshot_hash', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = 'gift_snapshot_hash') = 0, + 'ALTER TABLE user_resource_entitlements ADD COLUMN gift_snapshot_hash CHAR(64) NOT NULL DEFAULT '''' AFTER resource_snapshot_json', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = 'gift_snapshot_json') = 0, + 'ALTER TABLE user_resource_entitlements ADD COLUMN gift_snapshot_json JSON NULL AFTER gift_snapshot_hash', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @ddl := IF( + (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_resource_entitlements' AND INDEX_NAME = 'idx_user_resource_semantic') = 0, + 'CREATE INDEX idx_user_resource_semantic ON user_resource_entitlements (app_code, user_id, resource_id, resource_snapshot_hash, status, expires_at_ms)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/services/wallet-service/internal/client/binance/client.go b/services/wallet-service/internal/client/binance/client.go index df578f09..d87ef570 100644 --- a/services/wallet-service/internal/client/binance/client.go +++ b/services/wallet-service/internal/client/binance/client.go @@ -67,8 +67,8 @@ func newAccount(cfg config.BinanceAccountConfig) account { } } -// FindUSDTTransfer 先查链上 Deposit History,再在未命中时查 Funding Account 的 Pay C2C History。 -// 两个事实源的成功语义不同:链上入金必须校验网络、地址和状态;Pay C2C 必须校验正金额,证明是当前 API Key 账户收款而不是付款。 +// FindUSDTTransfer 按显式来源查 Binance 收款事实:C2C 只查 Pay,OFFCHAIN 只查 Deposit History; +// 历史 TRX/BSC 调用仍保留 Deposit 未命中后的 Pay 兼容路径。链上/站内入金必须校验网络、地址和状态,Pay C2C 必须证明是当前 API Key 账户正向收款。 func (c *Client) FindUSDTTransfer(ctx context.Context, req ports.BinanceTransferLookupRequest) (ports.BinanceTransferRecord, error) { if c == nil || c.apiBaseURL == "" { return ports.BinanceTransferRecord{}, xerr.New(xerr.Unavailable, "binance client is not configured") @@ -104,6 +104,11 @@ func (c *Client) FindUSDTTransfer(ctx context.Context, req ports.BinanceTransfer if err != nil { return ports.BinanceTransferRecord{}, err } + if req.Network == "OFFCHAIN" { + // 显式 Off-chain 只接受 Deposit History 中带该前缀的 TRX 站内转账;不能回退到 Pay, + // 否则同一个纯数字编号可能跨事实源误绑定另一笔 C2C 收款。 + return matchOffchainDepositRecord(req, records) + } matched, err := matchDepositRecord(req, records) if err == nil { return matched, nil @@ -120,6 +125,22 @@ func (c *Client) FindUSDTTransfer(ctx context.Context, req ports.BinanceTransfer return matchPayRecord(req, payRecords) } +func matchOffchainDepositRecord(req ports.BinanceTransferLookupRequest, records []depositRecord) (ports.BinanceTransferRecord, error) { + for _, record := range records { + if !depositTxIDMatches(record.TxID, req.ExternalID) { + continue + } + if !strings.HasPrefix(strings.ToLower(strings.TrimSpace(record.TxID)), "off-chain transfer") { + return ports.BinanceTransferRecord{}, xerr.New(xerr.Conflict, "binance deposit is not off-chain transfer") + } + // Binance 仍把站内入账记录标成实际充值网络 TRX;复用强校验时必须恢复真实网络, + // 地址、成功状态和金额校验均与普通 Deposit History 保持一致。 + req.Network = "TRX" + return matchDepositRecord(req, []depositRecord{record}) + } + return ports.BinanceTransferRecord{}, xerr.New(xerr.NotFound, "binance off-chain deposit not found") +} + func matchExplicitC2CPayRecord(req ports.BinanceTransferLookupRequest, records []payRecord) (ports.BinanceTransferRecord, error) { for _, record := range records { if !payExternalIDMatches(record, req.ExternalID) { diff --git a/services/wallet-service/internal/client/binance/client_test.go b/services/wallet-service/internal/client/binance/client_test.go index 5570422c..7a3ef5f0 100644 --- a/services/wallet-service/internal/client/binance/client_test.go +++ b/services/wallet-service/internal/client/binance/client_test.go @@ -88,6 +88,55 @@ func TestFindUSDTTransferMatchesDepositAndSignedRequest(t *testing.T) { } } +func TestFindUSDTTransferOffchainUsesDepositHistoryOnly(t *testing.T) { + const address = "TLv7wERsM42ZeobMrrKVC5C72d3gFUa44J" + var depositCalls int + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/api/v3/time": + _, _ = w.Write([]byte(`{"serverTime":1784034000000}`)) + case "/sapi/v1/capital/deposit/hisrec": + depositCalls++ + _, _ = w.Write([]byte(`[{ + "id":"deposit-aslan-offchain", + "amount":"300.14000000", + "coin":"USDT", + "network":"TRX", + "status":1, + "address":"` + address + `", + "txId":"Off-chain transfer 391252658053", + "insertTime":1784033439000 + }]`)) + case "/sapi/v1/pay/transactions": + t.Fatalf("explicit Off-chain verification must not query Pay History") + default: + http.NotFound(w, r) + } + })) + defer server.Close() + + client := New(config.BinanceConfig{ + Enabled: true, + APIBaseURL: server.URL, + HTTPTimeout: time.Second, + Aslan: config.BinanceAccountConfig{APIKey: "api-aslan", APISecretKey: "secret-aslan"}, + }) + record, err := client.FindUSDTTransfer(context.Background(), ports.BinanceTransferLookupRequest{ + AppCode: "aslan", + ExternalID: "391252658053", + Coin: "USDT", + Network: "OFFCHAIN", + ToAddress: address, + AmountMinor: 30014, + }) + if err != nil { + t.Fatalf("explicit Off-chain lookup failed: %v", err) + } + if depositCalls != 1 || record.Source != "deposit_history" || record.TxID != "Off-chain transfer 391252658053" || record.Network != "TRX" || record.AmountMinor != 30014 || record.Address != address { + t.Fatalf("Off-chain deposit mismatch: calls=%d record=%+v", depositCalls, record) + } +} + func TestFindUSDTTransferRejectsDepositMismatches(t *testing.T) { baseReq := ports.BinanceTransferLookupRequest{ AppCode: "lalu", diff --git a/services/wallet-service/internal/domain/ledger/constants.go b/services/wallet-service/internal/domain/ledger/constants.go index 8dc1c2e8..dce2bcb1 100644 --- a/services/wallet-service/internal/domain/ledger/constants.go +++ b/services/wallet-service/internal/domain/ledger/constants.go @@ -70,6 +70,9 @@ const ( PaymentProviderUSDTBEP20 = "usdt_bep20" // PaymentProviderUSDTC2C 是 Binance Pay C2C 收款订单;它不绑定公链,也不要求链上收款地址。 PaymentProviderUSDTC2C = "usdt_c2c" + // PaymentProviderUSDTOffchain 是 Binance Deposit History 中的站内 Off-chain transfer; + // 它使用 TRX 收款地址核对入账事实,但没有可提交给 TronGrid 的链上交易哈希。 + PaymentProviderUSDTOffchain = "usdt_offchain" // ThirdPartyPaymentStatusActive 表示渠道或支付方式可用于 H5 下单。 ThirdPartyPaymentStatusActive = "active" // ThirdPartyPaymentStatusDisabled 表示渠道或支付方式已被后台关闭。 diff --git a/services/wallet-service/internal/domain/ledger/recharge.go b/services/wallet-service/internal/domain/ledger/recharge.go index a3e055f5..ce9e5e6f 100644 --- a/services/wallet-service/internal/domain/ledger/recharge.go +++ b/services/wallet-service/internal/domain/ledger/recharge.go @@ -238,6 +238,8 @@ type VerifyCoinSellerRechargeReceiptCommand struct { ProviderCurrencyCode string ProviderAmountMinor int64 ProviderPayType string + // ReceiveAddress 只接受内部 admin-server 传入的当前 SQL 配置;为空时保留 H5/YAML 兼容路径。 + ReceiveAddress string } // CoinSellerRechargeReceiptVerification 是三方或链上返回的只读凭证快照。 @@ -418,6 +420,8 @@ func NormalizePaymentProvider(provider string) string { return PaymentProviderUSDTBEP20 case PaymentProviderUSDTC2C: return PaymentProviderUSDTC2C + case PaymentProviderUSDTOffchain: + return PaymentProviderUSDTOffchain case PaymentProviderGooglePlay: return PaymentProviderGooglePlay default: diff --git a/services/wallet-service/internal/domain/resource/constants.go b/services/wallet-service/internal/domain/resource/constants.go index 36cc7f89..cdbb8dda 100644 --- a/services/wallet-service/internal/domain/resource/constants.go +++ b/services/wallet-service/internal/domain/resource/constants.go @@ -14,7 +14,7 @@ const ( TypeEmojiPack = "emoji_pack" // TypeVIPTrialCard 是可在背包中独立计时、单选佩戴的 VIP 体验卡。 // VIP 等级和有效期事实仍由 user_vip_trial_cards 保存,资源目录只负责素材和通用背包展示。 - TypeVIPTrialCard = "vip_trial_card" + TypeVIPTrialCard = "vip_trial_card" StatusActive = "active" StatusDisabled = "disabled" @@ -26,8 +26,9 @@ const ( GrantStrategyIncreaseQuantity = "increase_quantity" GrantStrategySetActiveFlag = "set_active_flag" - GrantSubjectResource = "resource" - GrantSubjectGroup = "resource_group" + GrantSubjectResource = "resource" + GrantSubjectGroup = "resource_group" + GrantSubjectGroupSnapshot = "resource_group_snapshot" GrantSourceAdmin = "admin" GrantSourceManagerCenter = "manager_center" diff --git a/services/wallet-service/internal/domain/resource/entitlement.go b/services/wallet-service/internal/domain/resource/entitlement.go index fd8e908b..8fb02e9d 100644 --- a/services/wallet-service/internal/domain/resource/entitlement.go +++ b/services/wallet-service/internal/domain/resource/entitlement.go @@ -1,20 +1,26 @@ package resource type UserResourceEntitlement struct { - AppCode string - EntitlementID string - UserID int64 - ResourceID int64 - Resource Resource - Status string - Quantity int64 - RemainingQuantity int64 - EffectiveAtMS int64 - ExpiresAtMS int64 - SourceGrantID string - CreatedAtMS int64 - UpdatedAtMS int64 - Equipped bool + AppCode string + EntitlementID string + UserID int64 + ResourceID int64 + Resource Resource + Status string + Quantity int64 + RemainingQuantity int64 + EffectiveAtMS int64 + ExpiresAtMS int64 + SourceGrantID string + SourceSnapshotID string + ResourceSnapshotHash string + ResourceSnapshotJSON string + GiftSnapshotHash string + GiftSnapshotJSON string + PinnedGiftConfigs []GiftConfig + CreatedAtMS int64 + UpdatedAtMS int64 + Equipped bool } type ListUserResourcesQuery struct { diff --git a/services/wallet-service/internal/domain/resource/gift_snapshot.go b/services/wallet-service/internal/domain/resource/gift_snapshot.go new file mode 100644 index 00000000..4d0b3ba1 --- /dev/null +++ b/services/wallet-service/internal/domain/resource/gift_snapshot.go @@ -0,0 +1,50 @@ +package resource + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "sort" +) + +// CanonicalGiftConfigsJSON produces the immutable semantic bytes stored with a pinned gift entitlement. +// A resource can back more than one gift ID, so the promise contains every gift that was sendable at pin time. +func CanonicalGiftConfigsJSON(configs []GiftConfig) ([]byte, error) { + return json.Marshal(canonicalGiftConfigs(configs)) +} + +func GiftConfigsContentHash(configs []GiftConfig) (string, error) { + body, err := CanonicalGiftConfigsJSON(configs) + if err != nil { + return "", err + } + sum := sha256.Sum256(body) + return hex.EncodeToString(sum[:]), nil +} + +func canonicalGiftConfigs(configs []GiftConfig) []GiftConfig { + if len(configs) == 0 { + return nil + } + canonical := append([]GiftConfig(nil), configs...) + for index := range canonical { + canonical[index].EffectTypes = append([]string(nil), canonical[index].EffectTypes...) + sort.Strings(canonical[index].EffectTypes) + canonical[index].RegionIDs = append([]int64(nil), canonical[index].RegionIDs...) + sort.Slice(canonical[index].RegionIDs, func(left, right int) bool { + return canonical[index].RegionIDs[left] < canonical[index].RegionIDs[right] + }) + canonical[index].Resource.UsageScopes = append([]string(nil), canonical[index].Resource.UsageScopes...) + sort.Strings(canonical[index].Resource.UsageScopes) + } + sort.SliceStable(canonical, func(left, right int) bool { + if canonical[left].GiftID != canonical[right].GiftID { + return canonical[left].GiftID < canonical[right].GiftID + } + if canonical[left].ResourceID != canonical[right].ResourceID { + return canonical[left].ResourceID < canonical[right].ResourceID + } + return canonical[left].PriceVersion < canonical[right].PriceVersion + }) + return canonical +} diff --git a/services/wallet-service/internal/domain/resource/grant.go b/services/wallet-service/internal/domain/resource/grant.go index a1b21aab..d90640e6 100644 --- a/services/wallet-service/internal/domain/resource/grant.go +++ b/services/wallet-service/internal/domain/resource/grant.go @@ -54,6 +54,17 @@ type GrantResourceGroupCommand struct { GrantSource string } +type GrantPinnedResourceGroupCommand struct { + AppCode string + CommandID string + TargetUserID int64 + SnapshotID string + Reason string + OperatorUserID int64 + GrantSource string + ExpectedSnapshotHash string +} + type RevokeResourceGrantCommand struct { AppCode string RequestID string diff --git a/services/wallet-service/internal/domain/resource/group.go b/services/wallet-service/internal/domain/resource/group.go index 65963d04..0c82872b 100644 --- a/services/wallet-service/internal/domain/resource/group.go +++ b/services/wallet-service/internal/domain/resource/group.go @@ -1,6 +1,10 @@ package resource import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "sort" "strings" ) @@ -17,6 +21,9 @@ type ResourceGroupItem struct { SortOrder int32 CreatedAtMS int64 UpdatedAtMS int64 + // GiftConfigs is populated only for immutable group snapshots. omitempty preserves the canonical JSON + // of snapshots written before gift semantics became part of the wallet-owned reward promise. + GiftConfigs []GiftConfig `json:",omitempty"` } type ResourceGroup struct { @@ -34,6 +41,61 @@ type ResourceGroup struct { UpdatedAtMS int64 } +// ResourceGroupSnapshot is an immutable, owner-controlled reward promise. The embedded group contains +// complete resource and wallet-asset facts needed both for deterministic grant execution and client display. +type ResourceGroupSnapshot struct { + AppCode string + SnapshotID string + PinKey string + SourceGroupID int64 + VersionNo int64 + SnapshotHash string + Group ResourceGroup + CreatedByUserID int64 + CreatedAtMS int64 + SourceGroupUpdatedAtMS int64 + SourceContentHash string +} + +type PinResourceGroupSnapshotCommand struct { + AppCode string + PinKey string + GroupID int64 + OperatorUserID int64 + ExpectedGroupUpdatedAtMS int64 + ExpectedSourceContentHash string + RequiredRegionIDs []int64 + RequiredAllRegions bool +} + +// CanonicalResourceGroupJSON is the owner-side version identity used by both inspect and pin. +// It deliberately includes nested Resource bytes so an independently edited resource cannot reuse a stale pin. +func CanonicalResourceGroupJSON(group ResourceGroup) ([]byte, error) { + canonical := group + canonical.Items = append([]ResourceGroupItem(nil), group.Items...) + for index := range canonical.Items { + canonical.Items[index].Resource.UsageScopes = append([]string(nil), canonical.Items[index].Resource.UsageScopes...) + sort.Strings(canonical.Items[index].Resource.UsageScopes) + canonical.Items[index].GiftConfigs = canonicalGiftConfigs(canonical.Items[index].GiftConfigs) + } + sort.SliceStable(canonical.Items, func(left, right int) bool { + if canonical.Items[left].SortOrder != canonical.Items[right].SortOrder { + return canonical.Items[left].SortOrder < canonical.Items[right].SortOrder + } + return canonical.Items[left].GroupItemID < canonical.Items[right].GroupItemID + }) + return json.Marshal(canonical) +} + +func ResourceGroupContentHash(group ResourceGroup) (string, error) { + body, err := CanonicalResourceGroupJSON(group) + if err != nil { + return "", err + } + sum := sha256.Sum256(body) + return hex.EncodeToString(sum[:]), nil +} + type ResourceGroupItemInput struct { ItemType string ResourceID int64 diff --git a/services/wallet-service/internal/domain/resource/resource.go b/services/wallet-service/internal/domain/resource/resource.go index 3ee2be1b..236cc44e 100644 --- a/services/wallet-service/internal/domain/resource/resource.go +++ b/services/wallet-service/internal/domain/resource/resource.go @@ -1,7 +1,11 @@ package resource import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" "hyapp/services/wallet-service/internal/domain/ledger" + "sort" "strings" ) @@ -83,6 +87,24 @@ type BatchDeleteResourcesCommand struct { OperatorUserID int64 } +// CanonicalResourceJSON is the immutable entitlement projection. Usage scopes are set-like owner data, +// therefore sorting them prevents an order-only edit from creating a different grant semantic. +func CanonicalResourceJSON(resource Resource) ([]byte, error) { + canonical := resource + canonical.UsageScopes = append([]string(nil), resource.UsageScopes...) + sort.Strings(canonical.UsageScopes) + return json.Marshal(canonical) +} + +func ResourceContentHash(resource Resource) (string, error) { + body, err := CanonicalResourceJSON(resource) + if err != nil { + return "", err + } + sum := sha256.Sum256(body) + return hex.EncodeToString(sum[:]), nil +} + func NormalizeStatus(value string) string { value = strings.ToLower(strings.TrimSpace(value)) if value == "" { diff --git a/services/wallet-service/internal/service/wallet/external_recharge_receipt.go b/services/wallet-service/internal/service/wallet/external_recharge_receipt.go index 4db689d5..b76d6a4d 100644 --- a/services/wallet-service/internal/service/wallet/external_recharge_receipt.go +++ b/services/wallet-service/internal/service/wallet/external_recharge_receipt.go @@ -30,12 +30,16 @@ func (s *Service) VerifyCoinSellerRechargeReceipt(ctx context.Context, command l case ledger.PaymentProviderV5Pay: return s.verifyV5PayRechargeReceipt(ctx, command) case ledger.PaymentProviderUSDTTRC20: - return s.verifyUSDTRechargeReceipt(ctx, command, "trc20", s.externalRecharge.USDTTRC20Enabled, s.externalRecharge.usdtTRC20AddressForApp(command.AppCode), s.tronUSDT) + return s.verifyUSDTRechargeReceipt(ctx, command, "trc20", s.externalRecharge.USDTTRC20Enabled, firstNonEmpty(command.ReceiveAddress, s.externalRecharge.usdtTRC20AddressForApp(command.AppCode)), s.tronUSDT) case ledger.PaymentProviderUSDTBEP20: - return s.verifyUSDTRechargeReceipt(ctx, command, "bep20", s.externalRecharge.USDTBEP20Enabled, s.externalRecharge.usdtBEP20AddressForApp(command.AppCode), s.bscUSDT) + return s.verifyUSDTRechargeReceipt(ctx, command, "bep20", s.externalRecharge.USDTBEP20Enabled, firstNonEmpty(command.ReceiveAddress, s.externalRecharge.usdtBEP20AddressForApp(command.AppCode)), s.bscUSDT) case ledger.PaymentProviderUSDTC2C: // C2C 是 Binance 账户内收款事实,不属于 TRON/BSC;空地址和关闭的链上开关不影响只读查单。 return s.verifyUSDTRechargeReceipt(ctx, command, "c2c", false, "", nil) + case ledger.PaymentProviderUSDTOffchain: + // Binance Off-chain 是 Deposit History 中的 TRX 入账事实;后台 SQL 地址优先于 YAML, + // 但仍要求 TRC20 功能开启,避免已停用的收款链被人工入口绕过。 + return s.verifyUSDTRechargeReceipt(ctx, command, "offchain", s.externalRecharge.USDTTRC20Enabled, firstNonEmpty(command.ReceiveAddress, s.externalRecharge.usdtTRC20AddressForApp(command.AppCode)), nil) default: return ledger.CoinSellerRechargeReceiptVerification{}, xerr.New(xerr.InvalidArgument, "receipt provider is invalid") } @@ -50,6 +54,7 @@ func normalizeVerifyCoinSellerRechargeReceiptCommand(command ledger.VerifyCoinSe command.ProviderCountryCode = strings.ToUpper(strings.TrimSpace(command.ProviderCountryCode)) command.ProviderCurrencyCode = strings.ToUpper(strings.TrimSpace(command.ProviderCurrencyCode)) command.ProviderPayType = strings.TrimSpace(command.ProviderPayType) + command.ReceiveAddress = strings.TrimSpace(command.ReceiveAddress) return command } @@ -61,7 +66,7 @@ func validateVerifyCoinSellerRechargeReceiptCommand(command ledger.VerifyCoinSel return xerr.New(xerr.InvalidArgument, "external_order_no is too long") } switch command.ProviderCode { - case ledger.PaymentProviderUSDTTRC20, ledger.PaymentProviderUSDTBEP20: + case ledger.PaymentProviderUSDTTRC20, ledger.PaymentProviderUSDTBEP20, ledger.PaymentProviderUSDTOffchain: if command.USDMinorAmount <= 0 { return xerr.New(xerr.InvalidArgument, "usdt receipt amount is invalid") } @@ -349,6 +354,10 @@ func (s *Service) verifyUSDTRechargeReceipt(ctx context.Context, command ledger. if !enabled || snapshot.ReceiveAddress == "" { return ledger.CoinSellerRechargeReceiptVerification{}, xerr.New(xerr.Unavailable, "usdt "+chain+" receipt verification is not configured") } + if chain == "offchain" { + // Off-chain 编号不是公链 hash,只能走 Binance Deposit History;地址和金额仍必须与当前 App 配置精确一致。 + return s.verifyBinanceTransferReceipt(ctx, command, snapshot, binanceNetworkForReceiptChain(chain)) + } if !isLikelyChainTransactionHash(command.ExternalOrderNo) { // TRON/BSC 只接受标准交易哈希;非链上编号必须由运营明确改选 C2C,避免跨事实源误校验。 return ledger.CoinSellerRechargeReceiptVerification{}, xerr.New(xerr.InvalidArgument, "usdt "+chain+" receipt requires transaction hash") @@ -412,6 +421,8 @@ func binanceNetworkForReceiptChain(chain string) string { return "BSC" case "c2c": return "C2C" + case "offchain": + return "OFFCHAIN" default: return "TRX" } diff --git a/services/wallet-service/internal/service/wallet/external_recharge_receipt_test.go b/services/wallet-service/internal/service/wallet/external_recharge_receipt_test.go index a3a7b72a..bcbc8ddc 100644 --- a/services/wallet-service/internal/service/wallet/external_recharge_receipt_test.go +++ b/services/wallet-service/internal/service/wallet/external_recharge_receipt_test.go @@ -568,6 +568,30 @@ func TestVerifyCoinSellerRechargeReceiptUSDTTRC20HashUsesTronGrid(t *testing.T) } } +func TestVerifyCoinSellerRechargeReceiptUSDTTRC20PrefersSQLAddress(t *testing.T) { + tron := &fakeTronUSDTClient{rawJSON: `{"chain":true}`} + svc := walletservice.New(nil) + svc.SetTronUSDTClient(tron) + svc.SetExternalRechargeConfig(walletservice.ExternalRechargeConfig{ + USDTTRC20Enabled: true, + USDTTRC20Address: "TYAMLAddressMustNotWin", + }) + txHash := "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + receipt, err := svc.VerifyCoinSellerRechargeReceipt(context.Background(), ledger.VerifyCoinSellerRechargeReceiptCommand{ + AppCode: "aslan", + ProviderCode: ledger.PaymentProviderUSDTTRC20, + ExternalOrderNo: txHash, + USDMinorAmount: 30014, + ReceiveAddress: "TSQLAddressMustWin", + }) + if err != nil { + t.Fatalf("TRC20 SQL address override failed: %v", err) + } + if !receipt.Verified || receipt.ReceiveAddress != "TSQLAddressMustWin" || tron.lastToAddress != "TSQLAddressMustWin" { + t.Fatalf("current SQL address must drive verification immediately: receipt=%+v client=%+v", receipt, tron) + } +} + func TestVerifyCoinSellerRechargeReceiptUSDTTRC20RejectsC2COrderNumber(t *testing.T) { svc := walletservice.New(nil) svc.SetTronUSDTClient(&fakeTronUSDTClient{}) @@ -629,6 +653,44 @@ func TestVerifyCoinSellerRechargeReceiptUSDTC2CUsesBinance(t *testing.T) { } } +func TestVerifyCoinSellerRechargeReceiptUSDTOffchainUsesSQLTRONAddress(t *testing.T) { + const address = "TLv7wERsM42ZeobMrrKVC5C72d3gFUa44J" + binance := &fakeBinanceClient{record: walletservice.BinanceTransferRecord{ + Source: "deposit_history", + TxID: "Off-chain transfer 391252658053", + Coin: ledger.PaidCurrencyUSDT, + Network: "TRX", + Status: 1, + Address: address, + Amount: "300.14000000", + AmountMinor: 30014, + RawJSON: `{"txId":"Off-chain transfer 391252658053","status":1}`, + }} + svc := walletservice.New(nil) + svc.SetBinanceClient(binance) + svc.SetExternalRechargeConfig(walletservice.ExternalRechargeConfig{ + USDTTRC20Enabled: true, + USDTTRC20Address: "TYAMLAddressMustNotWin", + }) + receipt, err := svc.VerifyCoinSellerRechargeReceipt(context.Background(), ledger.VerifyCoinSellerRechargeReceiptCommand{ + AppCode: "aslan", + ProviderCode: ledger.PaymentProviderUSDTOffchain, + ExternalOrderNo: "391252658053", + USDMinorAmount: 30014, + OrderDateMS: 1784033439000, + ReceiveAddress: address, + }) + if err != nil { + t.Fatalf("explicit Off-chain receipt failed: %v", err) + } + if !receipt.Verified || receipt.Chain != "offchain" || receipt.ReceiveAddress != address || receipt.ProviderOrderID != "Off-chain transfer 391252658053" { + t.Fatalf("Off-chain receipt mismatch: %+v", receipt) + } + if binance.calls != 1 || binance.req.Network != "OFFCHAIN" || binance.req.ToAddress != address || binance.req.AmountMinor != 30014 { + t.Fatalf("Off-chain Binance request mismatch: calls=%d req=%+v", binance.calls, binance.req) + } +} + func TestVerifyCoinSellerRechargeReceiptUSDTC2CPayKeepsNoChainAddress(t *testing.T) { binance := &fakeBinanceClient{record: walletservice.BinanceTransferRecord{ Source: "pay_history", diff --git a/services/wallet-service/internal/service/wallet/resource.go b/services/wallet-service/internal/service/wallet/resource.go index 43a57bd7..808dd568 100644 --- a/services/wallet-service/internal/service/wallet/resource.go +++ b/services/wallet-service/internal/service/wallet/resource.go @@ -125,6 +125,18 @@ func (s *Service) SetResourceGroupStatus(ctx context.Context, command resourcedo return s.repository.SetResourceGroupStatus(ctx, command) } +func (s *Service) PinResourceGroupSnapshot(ctx context.Context, command resourcedomain.PinResourceGroupSnapshotCommand) (resourcedomain.ResourceGroupSnapshot, error) { + store, ok := s.repository.(interface { + PinResourceGroupSnapshot(context.Context, resourcedomain.PinResourceGroupSnapshotCommand) (resourcedomain.ResourceGroupSnapshot, error) + }) + if !ok { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Unavailable, "resource group snapshot repository is not configured") + } + command.AppCode = appcode.Normalize(command.AppCode) + ctx = appcode.WithContext(ctx, command.AppCode) + return store.PinResourceGroupSnapshot(ctx, command) +} + func (s *Service) ListGiftConfigs(ctx context.Context, query resourcedomain.ListGiftConfigsQuery) ([]resourcedomain.GiftConfig, int64, error) { if s.repository == nil { return nil, 0, xerr.New(xerr.Unavailable, "wallet repository is not configured") @@ -238,6 +250,18 @@ func (s *Service) GrantResourceGroup(ctx context.Context, command resourcedomain return s.repository.GrantResourceGroup(ctx, command) } +func (s *Service) GrantPinnedResourceGroup(ctx context.Context, command resourcedomain.GrantPinnedResourceGroupCommand) (resourcedomain.ResourceGrant, error) { + store, ok := s.repository.(interface { + GrantPinnedResourceGroup(context.Context, resourcedomain.GrantPinnedResourceGroupCommand) (resourcedomain.ResourceGrant, error) + }) + if !ok { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Unavailable, "pinned resource group grant repository is not configured") + } + command.AppCode = appcode.Normalize(command.AppCode) + ctx = appcode.WithContext(ctx, command.AppCode) + return store.GrantPinnedResourceGroup(ctx, command) +} + func (s *Service) RevokeResourceGrant(ctx context.Context, command resourcedomain.RevokeResourceGrantCommand) (resourcedomain.ResourceGrant, error) { if s.repository == nil { return resourcedomain.ResourceGrant{}, xerr.New(xerr.Unavailable, "wallet repository is not configured") @@ -265,11 +289,24 @@ func (s *Service) EquipUserResource(ctx context.Context, command resourcedomain. if command.UserID <= 0 || command.ResourceID <= 0 { return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InvalidArgument, "user_id and resource_id are required") } - resource, err := s.repository.GetResource(ctx, command.ResourceID) + command.EntitlementID = strings.TrimSpace(command.EntitlementID) + items, err := s.repository.ListUserResources(ctx, resourcedomain.ListUserResourcesQuery{ + AppCode: command.AppCode, UserID: command.UserID, ActiveOnly: true, + }) if err != nil { return resourcedomain.UserResourceEntitlement{}, err } - if resourcedomain.NormalizeResourceType(resource.ResourceType) == resourcedomain.TypeVIPTrialCard { + var selected *resourcedomain.UserResourceEntitlement + for index := range items { + if items[index].ResourceID == command.ResourceID && (command.EntitlementID == "" || items[index].EntitlementID == command.EntitlementID) { + selected = &items[index] + break + } + } + if selected == nil { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.NotFound, "user resource entitlement not found") + } + if resourcedomain.NormalizeResourceType(selected.Resource.ResourceType) == resourcedomain.TypeVIPTrialCard { // 体验卡在 UI 上仍是普通背包物品,但其装备动作会改变最终 VIP 权益。 // 因此通用入口必须委托专用状态机,不能直接写 equipment 而绕过 App 开关和 VipEffectiveChanged outbox。 command.RequestID = strings.TrimSpace(command.RequestID) @@ -277,23 +314,7 @@ func (s *Service) EquipUserResource(ctx context.Context, command resourcedomain. if command.RequestID == "" || command.EntitlementID == "" { return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InvalidArgument, "request_id and entitlement_id are required for vip_trial_card") } - items, listErr := s.repository.ListUserResources(ctx, resourcedomain.ListUserResourcesQuery{ - AppCode: command.AppCode, - UserID: command.UserID, - ResourceType: resourcedomain.TypeVIPTrialCard, - ActiveOnly: true, - }) - if listErr != nil { - return resourcedomain.UserResourceEntitlement{}, listErr - } - var selected *resourcedomain.UserResourceEntitlement - for index := range items { - if items[index].EntitlementID == command.EntitlementID && items[index].ResourceID == command.ResourceID { - selected = &items[index] - break - } - } - if selected == nil { + if selected.EntitlementID != command.EntitlementID { return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.NotFound, "vip trial card entitlement not found") } if _, _, err := s.EquipVipTrialCard(ctx, ledger.EquipVipTrialCardCommand{ diff --git a/services/wallet-service/internal/service/wallet/service_test.go b/services/wallet-service/internal/service/wallet/service_test.go index 077ed43b..431f2940 100644 --- a/services/wallet-service/internal/service/wallet/service_test.go +++ b/services/wallet-service/internal/service/wallet/service_test.go @@ -5101,6 +5101,342 @@ func TestGrantResourceGroupExpandsWalletAssetAndEntitlement(t *testing.T) { } } +func TestPinnedResourceGroupGrantPreservesResourceSemanticsAfterCatalogMutation(t *testing.T) { + repository := mysqltest.NewRepository(t) + svc := walletservice.New(repository) + ctx := context.Background() + + resource, err := svc.CreateResource(ctx, resourcedomain.ResourceCommand{ + ResourceCode: "activity_snapshot_badge", ResourceType: resourcedomain.TypeBadge, Name: "Season One Badge", + Status: resourcedomain.StatusActive, Grantable: true, GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, + UsageScopes: []string{"profile"}, AssetURL: "https://static.example.test/season-one.png", OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create snapshot resource: %v", err) + } + group, err := svc.CreateResourceGroup(ctx, resourcedomain.ResourceGroupCommand{ + GroupCode: "activity_snapshot_pack", Name: "Season One Reward", Status: resourcedomain.StatusActive, + Items: []resourcedomain.ResourceGroupItemInput{{ResourceID: resource.ResourceID, Quantity: 2}}, OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create snapshot group: %v", err) + } + sourceHash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil { + t.Fatalf("hash source group: %v", err) + } + pinned, err := svc.PinResourceGroupSnapshot(ctx, resourcedomain.PinResourceGroupSnapshotCommand{ + PinKey: "activity-template:test:v1", GroupID: group.GroupID, OperatorUserID: 90001, + ExpectedGroupUpdatedAtMS: group.UpdatedAtMS, ExpectedSourceContentHash: sourceHash, + }) + if err != nil { + t.Fatalf("pin source group: %v", err) + } + if pinned.SnapshotHash != sourceHash || pinned.SourceContentHash != sourceHash { + t.Fatalf("pinned source identity mismatch: %+v", pinned) + } + + // The resource is independently edited and disabled without touching resource_groups.updated_at_ms. + // A pinned activity reward must still execute and render the published bytes. + if _, err := svc.UpdateResource(ctx, resourcedomain.ResourceCommand{ + ResourceID: resource.ResourceID, ResourceCode: resource.ResourceCode, ResourceType: resourcedomain.TypeBadge, + Name: "Retired Badge", Status: resourcedomain.StatusDisabled, Grantable: false, + GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, UsageScopes: []string{"profile"}, + AssetURL: "https://static.example.test/retired.png", OperatorUserID: 90002, + }); err != nil { + t.Fatalf("mutate source resource: %v", err) + } + grant, err := svc.GrantPinnedResourceGroup(ctx, resourcedomain.GrantPinnedResourceGroupCommand{ + CommandID: "activity-template:test:v1:user:42009", TargetUserID: 42009, SnapshotID: pinned.SnapshotID, + ExpectedSnapshotHash: pinned.SnapshotHash, Reason: "activity rank reward", OperatorUserID: 42009, + GrantSource: resourcedomain.GrantSourceAdmin, + }) + if err != nil { + t.Fatalf("grant pinned group after source disable: %v", err) + } + items, err := svc.ListUserResources(ctx, resourcedomain.ListUserResourcesQuery{UserID: 42009, ActiveOnly: true}) + if err != nil { + t.Fatalf("list pinned entitlement: %v", err) + } + if len(items) != 1 || items[0].SourceSnapshotID != pinned.SnapshotID || items[0].ResourceSnapshotHash == "" || + items[0].Resource.Name != "Season One Badge" || items[0].Resource.AssetURL != "https://static.example.test/season-one.png" || items[0].Quantity != 2 { + t.Fatalf("entitlement drifted to mutable catalog: %+v", items) + } + equipped, err := svc.BatchGetUserEquippedResources(ctx, resourcedomain.BatchGetUserEquippedResourcesQuery{ + UserIDs: []int64{42009}, ResourceTypes: []string{resourcedomain.TypeBadge}, + }) + if err != nil || len(equipped) != 1 || len(equipped[0].Resources) != 1 || equipped[0].Resources[0].Resource.Name != "Season One Badge" { + t.Fatalf("pinned equipment depends on current resource status: items=%+v err=%v", equipped, err) + } + if got := repository.CountRows("wallet_outbox", "event_type = ? AND command_id = ?", "ResourceGroupGranted", "activity-template:test:v1:user:42009"); got != 1 { + t.Fatalf("pinned grant must reuse ResourceGroupGranted projection contract, got %d", got) + } + if grant.GrantSubjectType != resourcedomain.GrantSubjectGroupSnapshot || grant.GrantSubjectID != pinned.SnapshotID { + t.Fatalf("pinned grant provenance mismatch: %+v", grant) + } + + // A later active resource meaning gets a different owner content hash and must not merge into v1's entitlement. + updated, err := svc.UpdateResource(ctx, resourcedomain.ResourceCommand{ + ResourceID: resource.ResourceID, ResourceCode: resource.ResourceCode, ResourceType: resourcedomain.TypeBadge, + Name: "Season Two Badge", Status: resourcedomain.StatusActive, Grantable: true, + GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, UsageScopes: []string{"profile"}, + AssetURL: "https://static.example.test/season-two.png", OperatorUserID: 90003, + }) + if err != nil { + t.Fatalf("activate changed resource: %v", err) + } + group.Items[0].Resource = updated + newSourceHash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil || newSourceHash == sourceHash { + t.Fatalf("nested resource edit must change source hash: old=%s new=%s err=%v", sourceHash, newSourceHash, err) + } + pinnedV2, err := svc.PinResourceGroupSnapshot(ctx, resourcedomain.PinResourceGroupSnapshotCommand{ + PinKey: "activity-template:test:v2", GroupID: group.GroupID, OperatorUserID: 90003, + ExpectedGroupUpdatedAtMS: group.UpdatedAtMS, ExpectedSourceContentHash: newSourceHash, + }) + if err != nil { + t.Fatalf("pin changed nested resource: %v", err) + } + if _, err := svc.GrantPinnedResourceGroup(ctx, resourcedomain.GrantPinnedResourceGroupCommand{ + CommandID: "activity-template:test:v2:user:42009", TargetUserID: 42009, SnapshotID: pinnedV2.SnapshotID, + ExpectedSnapshotHash: pinnedV2.SnapshotHash, Reason: "activity rank reward", OperatorUserID: 42009, + GrantSource: resourcedomain.GrantSourceAdmin, + }); err != nil { + t.Fatalf("grant changed semantic snapshot: %v", err) + } + if got := repository.CountRows("user_resource_entitlements", "user_id = ? AND resource_id = ?", int64(42009), resource.ResourceID); got != 2 { + t.Fatalf("different pinned resource semantics must not merge, got %d rows", got) + } +} + +func TestPinnedGiftEntitlementUsesPinTimeCatalogAndRejectsTampering(t *testing.T) { + repository := mysqltest.NewRepository(t) + svc := walletservice.New(repository) + ctx := context.Background() + + giftResource, err := svc.CreateResource(ctx, resourcedomain.ResourceCommand{ + ResourceCode: "activity_pinned_gift", ResourceType: resourcedomain.TypeGift, Name: "Pinned Star Resource", + Status: resourcedomain.StatusActive, Grantable: true, GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, + PriceType: resourcedomain.PriceTypeCoin, CoinPrice: 7, UsageScopes: []string{"gift"}, + PreviewURL: "https://static.example.test/pinned-star-v1.png", AnimationURL: "https://static.example.test/pinned-star-v1.svga", + OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create pinned gift resource: %v", err) + } + if _, err := svc.CreateGiftConfig(ctx, resourcedomain.GiftConfigCommand{ + GiftID: "activity-pinned-star", ResourceID: giftResource.ResourceID, Status: resourcedomain.StatusActive, + Name: "Pinned Star V1", PresentationJSON: `{"theme":"season-one"}`, PriceVersion: "v1", CoinPrice: 7, + GiftTypeCode: resourcedomain.GiftTypeCP, CPRelationType: "brother", + EffectTypes: []string{resourcedomain.GiftEffectAnimation}, RegionIDs: []int64{0}, OperatorUserID: 90001, + }); err != nil { + t.Fatalf("create pinned gift config: %v", err) + } + group, err := svc.CreateResourceGroup(ctx, resourcedomain.ResourceGroupCommand{ + GroupCode: "activity_pinned_gift_pack", Name: "Pinned Gift Pack", Status: resourcedomain.StatusActive, + Items: []resourcedomain.ResourceGroupItemInput{{ResourceID: giftResource.ResourceID, Quantity: 3}}, OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create pinned gift group: %v", err) + } + if len(group.Items) != 1 || len(group.Items[0].GiftConfigs) != 1 { + t.Fatalf("gift group inspection must include wallet-owned pin semantics: %+v", group.Items) + } + sourceHash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil { + t.Fatalf("hash pinned gift group: %v", err) + } + pinned, err := svc.PinResourceGroupSnapshot(ctx, resourcedomain.PinResourceGroupSnapshotCommand{ + PinKey: "activity-template:pinned-gift:v1", GroupID: group.GroupID, OperatorUserID: 90001, + ExpectedGroupUpdatedAtMS: group.UpdatedAtMS, ExpectedSourceContentHash: sourceHash, RequiredAllRegions: true, + }) + if err != nil { + t.Fatalf("pin gift group: %v", err) + } + + updatedResource, err := svc.UpdateResource(ctx, resourcedomain.ResourceCommand{ + ResourceID: giftResource.ResourceID, ResourceCode: giftResource.ResourceCode, ResourceType: resourcedomain.TypeGift, + Name: "Mutable Star Resource V2", Status: resourcedomain.StatusActive, Grantable: true, + GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, PriceType: resourcedomain.PriceTypeCoin, CoinPrice: 31, + UsageScopes: []string{"gift"}, PreviewURL: "https://static.example.test/pinned-star-v2.png", + AnimationURL: "https://static.example.test/pinned-star-v2.pag", OperatorUserID: 90002, + }) + if err != nil { + t.Fatalf("edit mutable gift resource: %v", err) + } + if _, err := svc.UpdateGiftConfig(ctx, resourcedomain.GiftConfigCommand{ + GiftID: "activity-pinned-star", ResourceID: updatedResource.ResourceID, Status: resourcedomain.StatusActive, + Name: "Mutable Star V2", PresentationJSON: `{"theme":"season-two"}`, PriceVersion: "v2", CoinPrice: 31, + GiftTypeCode: resourcedomain.GiftTypeNormal, EffectTypes: []string{resourcedomain.GiftEffectMusic}, + RegionIDs: []int64{99}, OperatorUserID: 90002, + }); err != nil { + t.Fatalf("edit mutable gift config: %v", err) + } + if _, err := svc.SetGiftConfigStatus(ctx, resourcedomain.StatusCommand{ + StringID: "activity-pinned-star", Status: resourcedomain.StatusDisabled, OperatorUserID: 90002, + }); err != nil { + t.Fatalf("disable mutable gift config: %v", err) + } + if _, err := svc.SetResourceStatus(ctx, resourcedomain.StatusCommand{ + ID: giftResource.ResourceID, Status: resourcedomain.StatusDisabled, OperatorUserID: 90002, + }); err != nil { + t.Fatalf("disable mutable gift resource: %v", err) + } + + grantPinned := func(commandID string, userID int64) resourcedomain.ResourceGrant { + t.Helper() + grant, grantErr := svc.GrantPinnedResourceGroup(ctx, resourcedomain.GrantPinnedResourceGroupCommand{ + CommandID: commandID, TargetUserID: userID, SnapshotID: pinned.SnapshotID, + ExpectedSnapshotHash: pinned.SnapshotHash, Reason: "pinned activity gift reward", + OperatorUserID: 90003, GrantSource: resourcedomain.GrantSourceAdmin, + }) + if grantErr != nil { + t.Fatalf("grant pinned gift after catalog mutation: %v", grantErr) + } + if len(grant.Items) != 1 || grant.Items[0].EntitlementID == "" { + t.Fatalf("pinned gift grant must create entitlement: %+v", grant) + } + return grant + } + grant := grantPinned("activity-pinned-gift:user:63001", 63001) + entitlementID := grant.Items[0].EntitlementID + + // Cross-app lookup is resolved before any catalog fallback and must never consume the original tenant row. + if _, err := svc.DebitGift(ctx, ledger.DebitGiftCommand{ + AppCode: "hiyou", CommandID: "cross-app-pinned-gift", RoomID: "room-cross-app", SenderUserID: 63001, + TargetUserID: 63002, GiftID: "activity-pinned-star", GiftCount: 1, PriceVersion: "v2", + EntitlementID: entitlementID, ChargeSource: "bag", + }); err == nil { + t.Fatal("cross-app pinned gift entitlement must be rejected") + } + _, _, remaining := repository.ActiveResourceEntitlement(63001, giftResource.ResourceID) + if remaining != 3 { + t.Fatalf("cross-app attempt consumed pinned inventory: remaining=%d", remaining) + } + + command := ledger.DebitGiftCommand{ + CommandID: "send-pinned-gift-v1", RoomID: "room-pinned-gift", SenderUserID: 63001, TargetUserID: 63002, + GiftID: "activity-pinned-star", GiftCount: 2, PriceVersion: "caller-spoof-v999", + EntitlementID: entitlementID, ChargeSource: "bag", + } + receipt, err := svc.DebitGift(ctx, command) + if err != nil { + t.Fatalf("send disabled pinned gift: %v", err) + } + if receipt.CoinSpent != 14 || receipt.PriceVersion != "v1" || receipt.GiftName != "Pinned Star V1" || + receipt.GiftIconURL != "https://static.example.test/pinned-star-v1.png" || + receipt.GiftAnimationURL != "https://static.example.test/pinned-star-v1.svga" || + receipt.GiftTypeCode != resourcedomain.GiftTypeCP || receipt.CPRelationType != "brother" || + len(receipt.GiftEffectTypes) != 1 || receipt.GiftEffectTypes[0] != resourcedomain.GiftEffectAnimation { + t.Fatalf("pinned gift send drifted to mutable catalog or caller price: %+v", receipt) + } + replayCommand := command + replayCommand.PriceVersion = "another-caller-version" + replayed, err := svc.DebitGift(ctx, replayCommand) + if err != nil || replayed.TransactionID != receipt.TransactionID || replayed.CoinSpent != receipt.CoinSpent { + t.Fatalf("disabled pinned gift replay must return original receipt: replay=%+v err=%v", replayed, err) + } + _, _, remaining = repository.ActiveResourceEntitlement(63001, giftResource.ResourceID) + if remaining != 1 { + t.Fatalf("idempotent replay consumed inventory twice: remaining=%d", remaining) + } + + batchGrant := grantPinned("activity-pinned-gift:user:63005", 63005) + batchCommand := ledger.BatchDebitGiftCommand{ + CommandID: "batch-send-pinned-gift", RoomID: "room-pinned-gift", SenderUserID: 63005, + GiftID: "activity-pinned-star", GiftCount: 1, PriceVersion: "batch-spoof-v999", + EntitlementID: batchGrant.Items[0].EntitlementID, ChargeSource: "bag", + Targets: []ledger.DebitGiftTargetCommand{ + {CommandID: "batch-send-pinned-gift:63006", TargetUserID: 63006}, + {CommandID: "batch-send-pinned-gift:63007", TargetUserID: 63007}, + }, + } + batchReceipt, err := svc.BatchDebitGift(ctx, batchCommand) + if err != nil { + t.Fatalf("batch send disabled pinned gift: %v", err) + } + if len(batchReceipt.Targets) != 2 || batchReceipt.Aggregate.CoinSpent != 14 { + t.Fatalf("pinned batch gift aggregate mismatch: %+v", batchReceipt) + } + for _, target := range batchReceipt.Targets { + if target.Receipt.CoinSpent != 7 || target.Receipt.PriceVersion != "v1" || target.Receipt.GiftName != "Pinned Star V1" { + t.Fatalf("pinned batch target drifted to mutable catalog: %+v", target) + } + } + batchReplayCommand := batchCommand + batchReplayCommand.PriceVersion = "batch-another-caller-version" + batchReplayed, err := svc.BatchDebitGift(ctx, batchReplayCommand) + if err != nil || len(batchReplayed.Targets) != 2 || batchReplayed.Targets[0].Receipt.TransactionID != batchReceipt.Targets[0].Receipt.TransactionID { + t.Fatalf("pinned batch replay must ignore caller price version: replay=%+v err=%v", batchReplayed, err) + } + _, _, remaining = repository.ActiveResourceEntitlement(63005, giftResource.ResourceID) + if remaining != 1 { + t.Fatalf("pinned batch replay consumed inventory twice: remaining=%d", remaining) + } + + tamperedGrant := grantPinned("activity-pinned-gift:user:63003", 63003) + repository.TamperPinnedGiftSnapshot(tamperedGrant.Items[0].EntitlementID) + if _, err := svc.DebitGift(ctx, ledger.DebitGiftCommand{ + CommandID: "send-tampered-pinned-gift", RoomID: "room-pinned-gift", SenderUserID: 63003, TargetUserID: 63004, + GiftID: "activity-pinned-star", GiftCount: 1, EntitlementID: tamperedGrant.Items[0].EntitlementID, ChargeSource: "bag", + }); err == nil { + t.Fatal("tampered pinned gift snapshot must fail closed") + } + _, _, remaining = repository.ActiveResourceEntitlement(63003, giftResource.ResourceID) + if remaining != 3 { + t.Fatalf("tampered snapshot attempt consumed inventory: remaining=%d", remaining) + } +} + +func TestPinGiftResourceGroupRequiresActivityRegionCoverage(t *testing.T) { + repository := mysqltest.NewRepository(t) + svc := walletservice.New(repository) + ctx := context.Background() + resource, err := svc.CreateResource(ctx, resourcedomain.ResourceCommand{ + ResourceCode: "regional_reward_gift", ResourceType: resourcedomain.TypeGift, Name: "Regional Reward Gift", + Status: resourcedomain.StatusActive, Grantable: true, GrantStrategy: resourcedomain.GrantStrategyIncreaseQuantity, + PriceType: resourcedomain.PriceTypeCoin, CoinPrice: 9, UsageScopes: []string{"gift"}, OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create regional reward gift: %v", err) + } + if _, err := svc.CreateGiftConfig(ctx, resourcedomain.GiftConfigCommand{ + GiftID: "regional-reward-gift", ResourceID: resource.ResourceID, Status: resourcedomain.StatusActive, + Name: "Regional Reward Gift", PriceVersion: "v1", GiftTypeCode: resourcedomain.GiftTypeNormal, + RegionIDs: []int64{99}, OperatorUserID: 90001, + }); err != nil { + t.Fatalf("create region-99 gift config: %v", err) + } + group, err := svc.CreateResourceGroup(ctx, resourcedomain.ResourceGroupCommand{ + GroupCode: "regional_reward_pack", Name: "Regional Reward Pack", Status: resourcedomain.StatusActive, + Items: []resourcedomain.ResourceGroupItemInput{{ResourceID: resource.ResourceID, Quantity: 1}}, OperatorUserID: 90001, + }) + if err != nil { + t.Fatalf("create regional reward group: %v", err) + } + hash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil { + t.Fatalf("hash regional reward group: %v", err) + } + pin := func(key string, regions []int64, all bool) error { + _, pinErr := svc.PinResourceGroupSnapshot(ctx, resourcedomain.PinResourceGroupSnapshotCommand{ + PinKey: key, GroupID: group.GroupID, OperatorUserID: 90001, + ExpectedGroupUpdatedAtMS: group.UpdatedAtMS, ExpectedSourceContentHash: hash, + RequiredRegionIDs: regions, RequiredAllRegions: all, + }) + return pinErr + } + if err := pin("activity-region-missing", []int64{1}, false); err == nil { + t.Fatal("pin must reject gift reward unavailable in a targeted activity region") + } + if err := pin("activity-all-regions-missing-global", nil, true); err == nil { + t.Fatal("all-regions pin must require a global gift config") + } + if err := pin("activity-region-covered", []int64{99}, false); err != nil { + t.Fatalf("pin rejected covered target region: %v", err) + } +} + // TestRevokeResourceGroupGrantReversesWalletCreditAndEntitlement 锁定撤销只按原发放明细反向处理,不受资源组后续配置变化影响。 func TestRevokeResourceGroupGrantReversesWalletCreditAndEntitlement(t *testing.T) { repository := mysqltest.NewRepository(t) diff --git a/services/wallet-service/internal/storage/mysql/gift_batch_debit_repository.go b/services/wallet-service/internal/storage/mysql/gift_batch_debit_repository.go index 2c6af529..b41d6df6 100644 --- a/services/wallet-service/internal/storage/mysql/gift_batch_debit_repository.go +++ b/services/wallet-service/internal/storage/mysql/gift_batch_debit_repository.go @@ -34,46 +34,8 @@ func (r *Repository) BatchDebitGift(ctx context.Context, command ledger.BatchDeb if command.SenderRegionID < 0 { return ledger.BatchGiftReceipt{}, xerr.New(xerr.InvalidArgument, "sender_region_id is invalid") } - giftConfig, err := r.resolveActiveGiftConfig(ctx, tx, command.GiftID, command.RegionID) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - price, err := r.resolveGiftPrice(ctx, tx, command.GiftID, command.PriceVersion, nowMs) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - chargeSource := normalizeGiftChargeSource(command.ChargeSource, command.EntitlementID) - chargeAssetType := price.ChargeAssetType - if chargeSource == giftChargeSourceBag { - chargeAssetType = ledger.AssetBagGift - } - chargeAmount, err := checkedMul(price.CoinPrice, int64(command.GiftCount)) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - - roomContributionRatio, roomContributionRatioRegionID, err := r.resolveGlobalGiftDiamondRatio(ctx, tx, command.AppCode, giftConfig.GiftTypeCode) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - - heatValue, err := giftDiamondAmount(chargeAmount, roomContributionRatio.PPM) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - giftIncomeRatio, giftIncomeRatioRegionID, err := r.resolveGiftReturnCoinRatio(ctx, tx, command.AppCode, command.RegionID, giftConfig.GiftTypeCode) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - giftIncomeCoinAmount, err := giftDiamondAmount(chargeAmount, giftIncomeRatio.PPM) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - totalChargeAmount, err := checkedMul(chargeAmount, int64(len(command.Targets))) - if err != nil { - return ledger.BatchGiftReceipt{}, err - } - + // Replay must not depend on a catalog row that may have been disabled after the original transaction. + // Resolve all target idempotency records before locking entitlement/catalog state. existing := make(map[string]ledger.BatchGiftTargetReceipt, len(command.Targets)) for _, target := range command.Targets { targetCommand := debitGiftCommandFromBatchTarget(command, target) @@ -111,6 +73,46 @@ func (r *Repository) BatchDebitGift(ctx context.Context, command ledger.BatchDeb return ledger.BatchGiftReceipt{Aggregate: aggregate, Targets: targetReceipts}, nil } + totalGiftQuantity, err := checkedMul(int64(command.GiftCount), int64(len(command.Targets))) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + chargeSource := normalizeGiftChargeSource(command.ChargeSource, command.EntitlementID) + resolvedSource, err := r.resolveGiftDebitSource(ctx, tx, debitGiftCommandFromBatchCommand(command), totalGiftQuantity, nowMs) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + giftConfig := resolvedSource.GiftConfig + price := resolvedSource.Price + chargeAssetType := price.ChargeAssetType + if chargeSource == giftChargeSourceBag { + chargeAssetType = ledger.AssetBagGift + } + chargeAmount, err := checkedMul(price.CoinPrice, int64(command.GiftCount)) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + roomContributionRatio, roomContributionRatioRegionID, err := r.resolveGlobalGiftDiamondRatio(ctx, tx, command.AppCode, giftConfig.GiftTypeCode) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + heatValue, err := giftDiamondAmount(chargeAmount, roomContributionRatio.PPM) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + giftIncomeRatio, giftIncomeRatioRegionID, err := r.resolveGiftReturnCoinRatio(ctx, tx, command.AppCode, command.RegionID, giftConfig.GiftTypeCode) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + giftIncomeCoinAmount, err := giftDiamondAmount(chargeAmount, giftIncomeRatio.PPM) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + totalChargeAmount, err := checkedMul(chargeAmount, int64(len(command.Targets))) + if err != nil { + return ledger.BatchGiftReceipt{}, err + } + type targetHostPointPolicy struct { policy walletPolicyInstance amount int64 @@ -205,7 +207,10 @@ func (r *Repository) BatchDebitGift(ctx context.Context, command ledger.BatchDeb } events := make([]walletOutboxEvent, 0, len(command.Targets)*5+1) if chargeSource == giftChargeSourceBag { - resourceEvent, err := r.consumeGiftEntitlementForSend(ctx, tx, debitGiftCommandFromBatchCommand(command), giftConfig.ResourceID, int64(command.GiftCount)*int64(len(command.Targets)), giftMetadata{ + if resolvedSource.Entitlement == nil { + return ledger.BatchGiftReceipt{}, xerr.New(xerr.Internal, "bag gift entitlement lock is missing") + } + resourceEvent, err := r.consumeGiftEntitlementForSend(ctx, tx, debitGiftCommandFromBatchCommand(command), *resolvedSource.Entitlement, totalGiftQuantity, giftMetadata{ AppCode: command.AppCode, GiftID: command.GiftID, ResourceID: giftConfig.ResourceID, diff --git a/services/wallet-service/internal/storage/mysql/gift_debit_repository.go b/services/wallet-service/internal/storage/mysql/gift_debit_repository.go index ec7ee941..14e1d285 100644 --- a/services/wallet-service/internal/storage/mysql/gift_debit_repository.go +++ b/services/wallet-service/internal/storage/mysql/gift_debit_repository.go @@ -44,18 +44,16 @@ func (r *Repository) DebitGift(ctx context.Context, command ledger.DebitGiftComm if command.SenderRegionID < 0 { return ledger.Receipt{}, xerr.New(xerr.InvalidArgument, "sender_region_id is invalid") } - giftConfig, err := r.resolveActiveGiftConfig(ctx, tx, command.GiftID, command.RegionID) - if err != nil { - return ledger.Receipt{}, err - } - price, err := r.resolveGiftPrice(ctx, tx, command.GiftID, command.PriceVersion, nowMs) - if err != nil { - return ledger.Receipt{}, err - } chargeSource := normalizeGiftChargeSource(command.ChargeSource, command.EntitlementID) if command.RobotGift && chargeSource == giftChargeSourceBag { return ledger.Receipt{}, xerr.New(xerr.InvalidArgument, "robot gift cannot use bag entitlement") } + resolvedSource, err := r.resolveGiftDebitSource(ctx, tx, command, int64(command.GiftCount), nowMs) + if err != nil { + return ledger.Receipt{}, err + } + giftConfig := resolvedSource.GiftConfig + price := resolvedSource.Price chargeAssetType := price.ChargeAssetType if command.RobotGift { @@ -335,7 +333,10 @@ func (r *Repository) DebitGift(ctx context.Context, command ledger.DebitGiftComm sender = senderState.account } if chargeSource == giftChargeSourceBag { - resourceEvent, err := r.consumeGiftEntitlementForSend(ctx, tx, command, giftConfig.ResourceID, int64(command.GiftCount), metadata, nowMs) + if resolvedSource.Entitlement == nil { + return ledger.Receipt{}, xerr.New(xerr.Internal, "bag gift entitlement lock is missing") + } + resourceEvent, err := r.consumeGiftEntitlementForSend(ctx, tx, command, *resolvedSource.Entitlement, int64(command.GiftCount), metadata, nowMs) if err != nil { return ledger.Receipt{}, err } diff --git a/services/wallet-service/internal/storage/mysql/gift_entitlement_repository.go b/services/wallet-service/internal/storage/mysql/gift_entitlement_repository.go index 212a379b..48090e7d 100644 --- a/services/wallet-service/internal/storage/mysql/gift_entitlement_repository.go +++ b/services/wallet-service/internal/storage/mysql/gift_entitlement_repository.go @@ -4,11 +4,12 @@ import ( "context" "database/sql" "errors" + "strings" + "hyapp/pkg/appcode" "hyapp/pkg/xerr" "hyapp/services/wallet-service/internal/domain/ledger" resourcedomain "hyapp/services/wallet-service/internal/domain/resource" - "strings" ) func normalizeGiftChargeSource(source string, entitlementID string) string { @@ -19,50 +20,117 @@ func normalizeGiftChargeSource(source string, entitlementID string) string { return giftChargeSourceCoin } -func (r *Repository) consumeGiftEntitlementForSend(ctx context.Context, tx *sql.Tx, command ledger.DebitGiftCommand, giftResourceID int64, quantity int64, metadata giftMetadata, nowMs int64) (walletOutboxEvent, error) { +type resolvedGiftDebitSource struct { + GiftConfig resourcedomain.GiftConfig + Price giftPrice + Entitlement *resourcedomain.UserResourceEntitlement +} + +// resolveGiftDebitSource is the only price authority for send-gift. Coin/legacy bag gifts use the live catalog; +// pinned bag gifts use the wallet-owned entitlement bytes and deliberately ignore caller price_version. +func (r *Repository) resolveGiftDebitSource(ctx context.Context, tx *sql.Tx, command ledger.DebitGiftCommand, quantity int64, nowMS int64) (resolvedGiftDebitSource, error) { + chargeSource := normalizeGiftChargeSource(command.ChargeSource, command.EntitlementID) + if chargeSource != giftChargeSourceBag { + config, err := r.resolveActiveGiftConfig(ctx, tx, command.GiftID, command.RegionID) + if err != nil { + return resolvedGiftDebitSource{}, err + } + price, err := r.resolveGiftPrice(ctx, tx, command.GiftID, command.PriceVersion, nowMS) + return resolvedGiftDebitSource{GiftConfig: config, Price: price}, err + } + + entitlement, err := r.lockGiftEntitlementForSend(ctx, tx, command, quantity, nowMS) + if err != nil { + return resolvedGiftDebitSource{}, err + } + if entitlement.SourceSnapshotID != "" { + configs, err := decodePinnedGiftConfigs(entitlement) + if err != nil { + return resolvedGiftDebitSource{}, xerr.New(xerr.Internal, err.Error()) + } + for _, config := range configs { + if config.GiftID != strings.TrimSpace(command.GiftID) { + continue + } + if !pinnedGiftAvailableInRegion(config, command.RegionID) { + return resolvedGiftDebitSource{}, xerr.New(xerr.NotFound, "pinned bag gift is unavailable in region") + } + price := giftPrice{ + GiftID: config.GiftID, PriceVersion: config.PriceVersion, + ChargeAssetType: config.ChargeAssetType, CoinPrice: config.CoinPrice, + GiftPointAmount: 0, HeatValue: config.HeatValue, + } + return resolvedGiftDebitSource{GiftConfig: config, Price: price, Entitlement: &entitlement}, nil + } + return resolvedGiftDebitSource{}, xerr.New(xerr.InvalidArgument, "gift_id does not belong to pinned bag entitlement") + } + + // Legacy grants did not persist gift semantics. They remain bound to the current active catalog and current + // resource status, preserving their historical behaviour while new activity rewards are immutable. + if entitlement.Resource.Status != resourcedomain.StatusActive { + return resolvedGiftDebitSource{}, xerr.New(xerr.Conflict, "bag gift entitlement resource is not active") + } + config, err := r.resolveActiveGiftConfig(ctx, tx, command.GiftID, command.RegionID) + if err != nil { + return resolvedGiftDebitSource{}, err + } + if config.ResourceID != entitlement.ResourceID { + return resolvedGiftDebitSource{}, xerr.New(xerr.InvalidArgument, "bag gift entitlement resource mismatch") + } + // Legacy bag inventory also uses the latest server price. A caller-selected historical active version could + // otherwise spoof room contribution even though no coin is debited from the sender. + price, err := r.resolveGiftPrice(ctx, tx, command.GiftID, "", nowMS) + if err != nil { + return resolvedGiftDebitSource{}, err + } + return resolvedGiftDebitSource{GiftConfig: config, Price: price, Entitlement: &entitlement}, nil +} + +func (r *Repository) lockGiftEntitlementForSend(ctx context.Context, tx *sql.Tx, command ledger.DebitGiftCommand, quantity int64, nowMS int64) (resourcedomain.UserResourceEntitlement, error) { entitlementID := strings.TrimSpace(command.EntitlementID) if entitlementID == "" { - return walletOutboxEvent{}, xerr.New(xerr.InvalidArgument, "entitlement_id is required") + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InvalidArgument, "entitlement_id is required") } - if command.SenderUserID <= 0 || giftResourceID <= 0 || quantity <= 0 { - return walletOutboxEvent{}, xerr.New(xerr.InvalidArgument, "bag gift entitlement command is invalid") + if command.SenderUserID <= 0 || quantity <= 0 { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InvalidArgument, "bag gift entitlement command is invalid") } row := tx.QueryRowContext(ctx, userResourceSelectSQL()+` WHERE e.app_code = ? AND e.entitlement_id = ? - FOR UPDATE`, - appcode.FromContext(ctx), entitlementID, - ) + FOR UPDATE`, appcode.FromContext(ctx), entitlementID) entitlement, err := scanUserResourceEntitlement(row) if errors.Is(err, sql.ErrNoRows) { - return walletOutboxEvent{}, xerr.New(xerr.NotFound, "bag gift entitlement not found") + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.NotFound, "bag gift entitlement not found") } if err != nil { - return walletOutboxEvent{}, err + return resourcedomain.UserResourceEntitlement{}, err } if entitlement.UserID != command.SenderUserID { - return walletOutboxEvent{}, xerr.New(xerr.PermissionDenied, "bag gift entitlement does not belong to sender") + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.PermissionDenied, "bag gift entitlement does not belong to sender") } - if entitlement.ResourceID != giftResourceID { - return walletOutboxEvent{}, xerr.New(xerr.InvalidArgument, "bag gift entitlement resource mismatch") - } - if entitlement.Status != resourcedomain.StatusActive || entitlement.Resource.Status != resourcedomain.StatusActive { - return walletOutboxEvent{}, xerr.New(xerr.Conflict, "bag gift entitlement is not active") + if entitlement.Status != resourcedomain.StatusActive { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.Conflict, "bag gift entitlement is not active") } if resourcedomain.NormalizeResourceType(entitlement.Resource.ResourceType) != resourcedomain.TypeGift { - return walletOutboxEvent{}, xerr.New(xerr.InvalidArgument, "bag entitlement resource_type must be gift") + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InvalidArgument, "bag entitlement resource_type must be gift") } - if entitlement.EffectiveAtMS > nowMs || (entitlement.ExpiresAtMS > 0 && entitlement.ExpiresAtMS <= nowMs) { - return walletOutboxEvent{}, xerr.New(xerr.Conflict, "bag gift entitlement is expired") + if entitlement.EffectiveAtMS > nowMS || (entitlement.ExpiresAtMS > 0 && entitlement.ExpiresAtMS <= nowMS) { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.Conflict, "bag gift entitlement is expired") } if entitlement.RemainingQuantity < quantity { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.InsufficientBalance, "bag gift inventory is insufficient") + } + return entitlement, nil +} + +func (r *Repository) consumeGiftEntitlementForSend(ctx context.Context, tx *sql.Tx, command ledger.DebitGiftCommand, entitlement resourcedomain.UserResourceEntitlement, quantity int64, metadata giftMetadata, nowMS int64) (walletOutboxEvent, error) { + if entitlement.EntitlementID == "" || entitlement.UserID != command.SenderUserID || quantity <= 0 || entitlement.RemainingQuantity < quantity { return walletOutboxEvent{}, xerr.New(xerr.InsufficientBalance, "bag gift inventory is insufficient") } result, err := tx.ExecContext(ctx, ` UPDATE user_resource_entitlements SET remaining_quantity = remaining_quantity - ?, updated_at_ms = ? - WHERE app_code = ? AND entitlement_id = ? AND remaining_quantity >= ?`, - quantity, nowMs, appcode.FromContext(ctx), entitlementID, quantity, - ) + WHERE app_code = ? AND entitlement_id = ? AND user_id = ? AND status = 'active' AND remaining_quantity >= ?`, + quantity, nowMS, appcode.FromContext(ctx), entitlement.EntitlementID, command.SenderUserID, quantity) if err != nil { return walletOutboxEvent{}, err } @@ -71,25 +139,24 @@ func (r *Repository) consumeGiftEntitlementForSend(ctx context.Context, tx *sql. return walletOutboxEvent{}, err } if affected != 1 { - return walletOutboxEvent{}, xerr.New(xerr.InsufficientBalance, "bag gift inventory is insufficient") } entitlement.RemainingQuantity -= quantity - entitlement.UpdatedAtMS = nowMs - return resourceOutboxEvent("UserResourceChanged", command.CommandID, command.SenderUserID, giftResourceID, map[string]any{ + entitlement.UpdatedAtMS = nowMS + return resourceOutboxEvent("UserResourceChanged", command.CommandID, command.SenderUserID, entitlement.ResourceID, map[string]any{ "action": "consume_gift_send", "app_code": appcode.FromContext(ctx), "user_id": command.SenderUserID, - "resource_id": giftResourceID, + "resource_id": entitlement.ResourceID, "resource_type": entitlement.Resource.ResourceType, - "entitlement_id": entitlementID, + "entitlement_id": entitlement.EntitlementID, "consumed_quantity": quantity, "remaining_quantity": entitlement.RemainingQuantity, "room_id": command.RoomID, "gift_id": command.GiftID, "charge_source": giftChargeSourceBag, "gift_value_coins": metadata.CoinSpent, - "updated_at_ms": nowMs, + "updated_at_ms": nowMS, "entitlement": entitlement, - }, nowMs), nil + }, nowMS), nil } diff --git a/services/wallet-service/internal/storage/mysql/gift_ledger_helpers.go b/services/wallet-service/internal/storage/mysql/gift_ledger_helpers.go index 7a73cfc0..82a1a673 100644 --- a/services/wallet-service/internal/storage/mysql/gift_ledger_helpers.go +++ b/services/wallet-service/internal/storage/mysql/gift_ledger_helpers.go @@ -111,6 +111,12 @@ func aggregateGiftReceipts(targets []ledger.BatchGiftTargetReceipt) (ledger.Rece } func debitRequestHash(command ledger.DebitGiftCommand) string { + priceVersion := strings.TrimSpace(command.PriceVersion) + if normalizeGiftChargeSource(command.ChargeSource, command.EntitlementID) == giftChargeSourceBag { + // Bag pricing is always wallet-owned (pinned snapshot or latest legacy catalog). Caller price_version is + // non-semantic and must not create a replay conflict or let a client select a favourable historical price. + priceVersion = "" + } if command.DirectGift { // direct gift 没有 Room Cell 命令,必须把场景写进幂等摘要,避免和空 room_id 的内部兼容调用互相复用。 @@ -121,7 +127,7 @@ func debitRequestHash(command ledger.DebitGiftCommand) string { command.TargetUserID, command.GiftID, command.GiftCount, - strings.TrimSpace(command.PriceVersion), + priceVersion, command.RegionID, command.SenderRegionID, command.TargetIsHost, @@ -140,7 +146,7 @@ func debitRequestHash(command ledger.DebitGiftCommand) string { command.TargetUserID, command.GiftID, command.GiftCount, - strings.TrimSpace(command.PriceVersion), + priceVersion, command.RegionID, command.SenderRegionID, command.TargetIsHost, diff --git a/services/wallet-service/internal/storage/mysql/repository.go b/services/wallet-service/internal/storage/mysql/repository.go index 27258f6d..2763011c 100644 --- a/services/wallet-service/internal/storage/mysql/repository.go +++ b/services/wallet-service/internal/storage/mysql/repository.go @@ -63,6 +63,14 @@ func Open(ctx context.Context, dsn string) (*Repository, error) { _ = db.Close() return nil, err } + if err := ensureResourceGroupSnapshotSchema(ctx, db); err != nil { + _ = db.Close() + return nil, err + } + if err := ensureResourceEntitlementSnapshotSchema(ctx, db); err != nil { + _ = db.Close() + return nil, err + } if err := ensureGooglePaymentPaidDetailsSchema(ctx, db); err != nil { _ = db.Close() return nil, err diff --git a/services/wallet-service/internal/storage/mysql/resource_entitlement_repository.go b/services/wallet-service/internal/storage/mysql/resource_entitlement_repository.go index 6342f8b0..85d5c16b 100644 --- a/services/wallet-service/internal/storage/mysql/resource_entitlement_repository.go +++ b/services/wallet-service/internal/storage/mysql/resource_entitlement_repository.go @@ -3,6 +3,7 @@ package mysql import ( "context" "database/sql" + "encoding/json" "errors" "fmt" "hyapp/pkg/appcode" @@ -35,8 +36,6 @@ func (r *Repository) ListUserResources(ctx context.Context, query resourcedomain if isEquipableResourceType(resourceType) { pruneResourceTypes = []string{resourceType} } - where += ` AND r.resource_type = ?` - args = append(args, resourceType) } if err := r.pruneExpiredUserResourceEquipment(ctx, []int64{query.UserID}, pruneResourceTypes, nowMs); err != nil { return nil, err @@ -57,7 +56,9 @@ func (r *Repository) ListUserResources(ctx context.Context, query resourcedomain if err != nil { return nil, err } - items = append(items, item) + if strings.TrimSpace(query.ResourceType) == "" || resourcedomain.NormalizeResourceType(item.Resource.ResourceType) == resourcedomain.NormalizeResourceType(query.ResourceType) { + items = append(items, item) + } } return items, rows.Err() } @@ -220,7 +221,9 @@ func (r *Repository) BatchGetUserEquippedResources(ctx context.Context, query re rows, err := r.db.QueryContext(ctx, ` SELECT e.app_code, e.entitlement_id, e.user_id, e.resource_id, e.status, e.quantity, e.remaining_quantity, e.effective_at_ms, e.expires_at_ms, - e.source_grant_id, e.created_at_ms, e.updated_at_ms, + e.source_grant_id, e.source_snapshot_id, e.resource_snapshot_hash, + CAST(e.resource_snapshot_json AS CHAR), e.gift_snapshot_hash, + CAST(e.gift_snapshot_json AS CHAR), e.created_at_ms, e.updated_at_ms, TRUE AS equipped, `+resourceColumnsWithAlias("r")+` FROM user_resource_equipment eq @@ -233,7 +236,7 @@ func (r *Repository) BatchGetUserEquippedResources(ctx context.Context, query re AND e.status = 'active' AND e.effective_at_ms <= ? AND (e.expires_at_ms = 0 OR e.expires_at_ms > ?) AND e.remaining_quantity > 0 - AND r.status = 'active'`+typeFilter+` + AND (e.source_snapshot_id <> '' OR r.status = 'active')`+typeFilter+` ORDER BY eq.user_id ASC, eq.updated_at_ms DESC`, args..., ) @@ -265,7 +268,25 @@ func (r *Repository) BatchGetUserEquippedResources(ctx context.Context, query re return result, nil } -func (r *Repository) applyEntitlement(ctx context.Context, tx *sql.Tx, userID int64, resource resourcedomain.Resource, quantity int64, durationMS int64, grantID string, nowMs int64) (string, error) { +func (r *Repository) applyEntitlement(ctx context.Context, tx *sql.Tx, userID int64, resource resourcedomain.Resource, quantity int64, durationMS int64, grantID string, nowMs int64, snapshot resourceEntitlementSnapshot) (string, error) { + if snapshot.SourceSnapshotID != "" { + if !validSHA256(snapshot.ResourceSnapshotHash) || strings.TrimSpace(snapshot.ResourceSnapshotJSON) == "" { + return "", xerr.New(xerr.Internal, "pinned entitlement resource snapshot is incomplete") + } + var pinned resourcedomain.Resource + if err := json.Unmarshal([]byte(snapshot.ResourceSnapshotJSON), &pinned); err != nil || pinned.ResourceID != resource.ResourceID { + return "", xerr.New(xerr.Internal, "pinned entitlement resource snapshot is invalid") + } + contentHash, err := resourcedomain.ResourceContentHash(pinned) + if err != nil || contentHash != snapshot.ResourceSnapshotHash { + return "", xerr.New(xerr.Internal, "pinned entitlement resource snapshot hash mismatch") + } + if err := validatePinnedEntitlementGiftSnapshot(appcode.FromContext(ctx), pinned, snapshot.GiftSnapshotHash, snapshot.GiftSnapshotJSON); err != nil { + return "", err + } + } else { + snapshot = resourceEntitlementSnapshot{} + } expiresAt := int64(0) if durationMS > 0 { if durationMS > math.MaxInt64-nowMs { @@ -275,7 +296,7 @@ func (r *Repository) applyEntitlement(ctx context.Context, tx *sql.Tx, userID in } strategy := resourcedomain.NormalizeGrantStrategy(resource.GrantStrategy) if strategy == resourcedomain.GrantStrategyExtendExpiry || strategy == resourcedomain.GrantStrategyIncreaseQuantity || strategy == resourcedomain.GrantStrategySetActiveFlag { - existing, exists, err := r.queryActiveEntitlementForUpdate(ctx, tx, userID, resource.ResourceID, nowMs) + existing, exists, err := r.queryActiveEntitlementForUpdate(ctx, tx, userID, resource.ResourceID, snapshot.ResourceSnapshotHash, snapshot.GiftSnapshotHash, nowMs) if err != nil { return "", err } @@ -320,9 +341,12 @@ func (r *Repository) applyEntitlement(ctx context.Context, tx *sql.Tx, userID in if _, err := tx.ExecContext(ctx, ` INSERT INTO user_resource_entitlements ( app_code, entitlement_id, user_id, resource_id, status, quantity, remaining_quantity, - effective_at_ms, expires_at_ms, source_grant_id, created_at_ms, updated_at_ms - ) VALUES (?, ?, ?, ?, 'active', ?, ?, ?, ?, ?, ?, ?)`, - appcode.FromContext(ctx), entitlementID, userID, resource.ResourceID, quantity, quantity, nowMs, expiresAt, grantID, nowMs, nowMs, + effective_at_ms, expires_at_ms, source_grant_id, source_snapshot_id, resource_snapshot_hash, + resource_snapshot_json, gift_snapshot_hash, gift_snapshot_json, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, 'active', ?, ?, ?, ?, ?, ?, ?, NULLIF(?, ''), ?, NULLIF(?, ''), ?, ?)`, + appcode.FromContext(ctx), entitlementID, userID, resource.ResourceID, quantity, quantity, nowMs, expiresAt, grantID, + snapshot.SourceSnapshotID, snapshot.ResourceSnapshotHash, snapshot.ResourceSnapshotJSON, + snapshot.GiftSnapshotHash, snapshot.GiftSnapshotJSON, nowMs, nowMs, ); err != nil { return "", err } @@ -397,21 +421,24 @@ func (r *Repository) alignEntitlementExpiresAt(ctx context.Context, tx *sql.Tx, return err } -func (r *Repository) queryActiveEntitlementForUpdate(ctx context.Context, tx *sql.Tx, userID int64, resourceID int64, nowMs int64) (resourcedomain.UserResourceEntitlement, bool, error) { +func (r *Repository) queryActiveEntitlementForUpdate(ctx context.Context, tx *sql.Tx, userID int64, resourceID int64, resourceSnapshotHash string, giftSnapshotHash string, nowMs int64) (resourcedomain.UserResourceEntitlement, bool, error) { row := tx.QueryRowContext(ctx, ` SELECT e.app_code, e.entitlement_id, e.user_id, e.resource_id, e.status, e.quantity, e.remaining_quantity, e.effective_at_ms, e.expires_at_ms, - e.source_grant_id, e.created_at_ms, e.updated_at_ms, + e.source_grant_id, e.source_snapshot_id, e.resource_snapshot_hash, + CAST(e.resource_snapshot_json AS CHAR), e.gift_snapshot_hash, + CAST(e.gift_snapshot_json AS CHAR), e.created_at_ms, e.updated_at_ms, FALSE AS equipped, `+resourceColumnsWithAlias("r")+` FROM user_resource_entitlements e JOIN resources r ON r.app_code = e.app_code AND r.resource_id = e.resource_id WHERE e.app_code = ? AND e.user_id = ? AND e.resource_id = ? AND e.status = 'active' + AND e.resource_snapshot_hash = ? AND e.gift_snapshot_hash = ? AND e.effective_at_ms <= ? AND (e.expires_at_ms = 0 OR e.expires_at_ms > ?) ORDER BY e.expires_at_ms DESC, e.created_at_ms DESC LIMIT 1 FOR UPDATE`, - appcode.FromContext(ctx), userID, resourceID, nowMs, nowMs, + appcode.FromContext(ctx), userID, resourceID, resourceSnapshotHash, giftSnapshotHash, nowMs, nowMs, ) item, err := scanUserResourceEntitlement(row) if errors.Is(err, sql.ErrNoRows) { @@ -424,7 +451,7 @@ func (r *Repository) queryEquipableEntitlementForUpdate(ctx context.Context, tx where := ` WHERE e.app_code = ? AND e.user_id = ? AND e.resource_id = ? AND e.status = 'active' AND e.effective_at_ms <= ? AND (e.expires_at_ms = 0 OR e.expires_at_ms > ?) - AND e.remaining_quantity > 0 AND r.status = 'active'` + AND e.remaining_quantity > 0 AND (e.source_snapshot_id <> '' OR r.status = 'active')` args := []any{appcode.FromContext(ctx), command.UserID, command.ResourceID, nowMs, nowMs} if command.EntitlementID != "" { where += ` AND e.entitlement_id = ?` @@ -467,6 +494,8 @@ func scanUserResourceEntitlement(scanner scanTarget) (resourcedomain.UserResourc var item resourcedomain.UserResourceEntitlement var resource resourcedomain.Resource var scopesJSON string + var resourceSnapshotJSON sql.NullString + var giftSnapshotJSON sql.NullString if err := scanner.Scan( &item.AppCode, &item.EntitlementID, @@ -478,6 +507,11 @@ func scanUserResourceEntitlement(scanner scanTarget) (resourcedomain.UserResourc &item.EffectiveAtMS, &item.ExpiresAtMS, &item.SourceGrantID, + &item.SourceSnapshotID, + &item.ResourceSnapshotHash, + &resourceSnapshotJSON, + &item.GiftSnapshotHash, + &giftSnapshotJSON, &item.CreatedAtMS, &item.UpdatedAtMS, &item.Equipped, @@ -509,7 +543,35 @@ func scanUserResourceEntitlement(scanner scanTarget) (resourcedomain.UserResourc return resourcedomain.UserResourceEntitlement{}, err } resource.UsageScopes = parseStringArray(scopesJSON) - item.Resource = resource + item.ResourceSnapshotJSON = resourceSnapshotJSON.String + item.GiftSnapshotJSON = giftSnapshotJSON.String + if item.SourceSnapshotID != "" { + if !resourceSnapshotJSON.Valid || !validSHA256(item.ResourceSnapshotHash) { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.Internal, "pinned entitlement resource snapshot is incomplete") + } + var pinned resourcedomain.Resource + if err := json.Unmarshal([]byte(resourceSnapshotJSON.String), &pinned); err != nil { + return resourcedomain.UserResourceEntitlement{}, fmt.Errorf("decode entitlement resource snapshot: %w", err) + } + contentHash, err := resourcedomain.ResourceContentHash(pinned) + if err != nil || contentHash != item.ResourceSnapshotHash || pinned.ResourceID != item.ResourceID { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.Internal, "entitlement resource snapshot integrity check failed") + } + item.Resource = pinned + if err := validatePinnedEntitlementGiftSnapshot(item.AppCode, pinned, item.GiftSnapshotHash, item.GiftSnapshotJSON); err != nil { + return resourcedomain.UserResourceEntitlement{}, err + } + if resourcedomain.NormalizeResourceType(pinned.ResourceType) == resourcedomain.TypeGift { + if err := json.Unmarshal([]byte(item.GiftSnapshotJSON), &item.PinnedGiftConfigs); err != nil { + return resourcedomain.UserResourceEntitlement{}, fmt.Errorf("decode pinned gift configs: %w", err) + } + } + } else { + if item.GiftSnapshotHash != "" || giftSnapshotJSON.Valid { + return resourcedomain.UserResourceEntitlement{}, xerr.New(xerr.Internal, "legacy entitlement contains a pinned gift snapshot") + } + item.Resource = resource + } return item, nil } @@ -517,14 +579,15 @@ func userResourceSelectSQL() string { return ` SELECT e.app_code, e.entitlement_id, e.user_id, e.resource_id, e.status, e.quantity, e.remaining_quantity, e.effective_at_ms, e.expires_at_ms, - e.source_grant_id, e.created_at_ms, e.updated_at_ms, + e.source_grant_id, e.source_snapshot_id, e.resource_snapshot_hash, + CAST(e.resource_snapshot_json AS CHAR), e.gift_snapshot_hash, + CAST(e.gift_snapshot_json AS CHAR), e.created_at_ms, e.updated_at_ms, CASE WHEN eq.entitlement_id IS NULL THEN FALSE ELSE TRUE END AS equipped, ` + resourceColumnsWithAlias("r") + ` FROM user_resource_entitlements e JOIN resources r ON r.app_code = e.app_code AND r.resource_id = e.resource_id LEFT JOIN user_resource_equipment eq ON eq.app_code = e.app_code AND eq.user_id = e.user_id - AND eq.resource_type = r.resource_type AND eq.entitlement_id = e.entitlement_id ` } @@ -597,8 +660,7 @@ func (r *Repository) pruneExpiredUserResourceEquipment(ctx context.Context, user OR e.effective_at_ms > ? OR (e.expires_at_ms <> 0 AND e.expires_at_ms <= ?) OR e.remaining_quantity <= 0 - OR r.resource_id IS NULL - OR r.status <> 'active' + OR (e.source_snapshot_id = '' AND (r.resource_id IS NULL OR r.status <> 'active')) )`+typeFilter, args..., ) diff --git a/services/wallet-service/internal/storage/mysql/resource_entitlement_snapshot_schema.go b/services/wallet-service/internal/storage/mysql/resource_entitlement_snapshot_schema.go new file mode 100644 index 00000000..800cc538 --- /dev/null +++ b/services/wallet-service/internal/storage/mysql/resource_entitlement_snapshot_schema.go @@ -0,0 +1,51 @@ +package mysql + +import ( + "context" + "database/sql" +) + +// ensureResourceEntitlementSnapshotSchema upgrades pre-snapshot wallets without rewriting legacy mutable +// entitlements. Empty hash/id is the explicit legacy semantic; pinned grants always write all three fields. +func ensureResourceEntitlementSnapshotSchema(ctx context.Context, db *sql.DB) error { + var database string + if err := db.QueryRowContext(ctx, `SELECT DATABASE()`).Scan(&database); err != nil { + return err + } + columns := []struct { + name string + ddl string + }{ + {name: "source_snapshot_id", ddl: `ALTER TABLE user_resource_entitlements ADD COLUMN source_snapshot_id VARCHAR(96) NOT NULL DEFAULT '' AFTER source_grant_id`}, + {name: "resource_snapshot_hash", ddl: `ALTER TABLE user_resource_entitlements ADD COLUMN resource_snapshot_hash CHAR(64) NOT NULL DEFAULT '' AFTER source_snapshot_id`}, + {name: "resource_snapshot_json", ddl: `ALTER TABLE user_resource_entitlements ADD COLUMN resource_snapshot_json JSON NULL AFTER resource_snapshot_hash`}, + {name: "gift_snapshot_hash", ddl: `ALTER TABLE user_resource_entitlements ADD COLUMN gift_snapshot_hash CHAR(64) NOT NULL DEFAULT '' AFTER resource_snapshot_json`}, + {name: "gift_snapshot_json", ddl: `ALTER TABLE user_resource_entitlements ADD COLUMN gift_snapshot_json JSON NULL AFTER gift_snapshot_hash`}, + } + for _, column := range columns { + var count int + if err := db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'user_resource_entitlements' AND COLUMN_NAME = ?`, database, column.name).Scan(&count); err != nil { + return err + } + if count == 0 { + if _, err := db.ExecContext(ctx, column.ddl); err != nil { + return err + } + } + } + var indexCount int + if err := db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'user_resource_entitlements' AND INDEX_NAME = 'idx_user_resource_semantic'`, database).Scan(&indexCount); err != nil { + return err + } + if indexCount == 0 { + _, err := db.ExecContext(ctx, ` + CREATE INDEX idx_user_resource_semantic + ON user_resource_entitlements (app_code, user_id, resource_id, resource_snapshot_hash, status, expires_at_ms)`) + return err + } + return nil +} diff --git a/services/wallet-service/internal/storage/mysql/resource_grant_repository.go b/services/wallet-service/internal/storage/mysql/resource_grant_repository.go index 9d42a33e..81f998b5 100644 --- a/services/wallet-service/internal/storage/mysql/resource_grant_repository.go +++ b/services/wallet-service/internal/storage/mysql/resource_grant_repository.go @@ -144,6 +144,125 @@ func (r *Repository) GrantResourceGroup(ctx context.Context, command resourcedom return r.GetResourceGrant(ctx, grantID) } +// GrantPinnedResourceGroup executes only wallet-owned immutable snapshot bytes. Callers can choose a +// snapshot_id created by PinResourceGroupSnapshot, but can never submit arbitrary assets or amounts. +func (r *Repository) GrantPinnedResourceGroup(ctx context.Context, command resourcedomain.GrantPinnedResourceGroupCommand) (resourcedomain.ResourceGrant, error) { + if r == nil || r.db == nil { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + ctx = contextWithCommandApp(ctx, command.AppCode) + command.AppCode = appcode.FromContext(ctx) + command = normalizeGrantPinnedResourceGroupCommand(command) + if err := validateGrantPinnedResourceGroupCommand(command); err != nil { + return resourcedomain.ResourceGrant{}, err + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + defer func() { _ = tx.Rollback() }() + + requestHash := grantPinnedResourceGroupRequestHash(command) + if grantID, exists, err := r.lookupResourceGrant(ctx, tx, command.CommandID, requestHash); err != nil || exists { + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + return r.getResourceGrantTx(ctx, tx, grantID) + } + snapshot, found, err := getResourceGroupSnapshot(ctx, tx, command.AppCode, command.SnapshotID, true) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + if !found { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.NotFound, "resource group snapshot not found") + } + if snapshot.SnapshotHash != command.ExpectedSnapshotHash { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Conflict, "resource group snapshot hash mismatch") + } + group := snapshot.Group + if len(group.Items) == 0 { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "resource group snapshot has no items") + } + groupSnapshot, err := json.Marshal(group) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + nowMS := time.Now().UTC().UnixMilli() + grantID := resourceGrantID(command.AppCode, command.CommandID) + if err := r.insertResourceGrant(ctx, tx, grantID, command.CommandID, command.TargetUserID, command.GrantSource, + resourcedomain.GrantSubjectGroupSnapshot, snapshot.SnapshotID, requestHash, string(groupSnapshot), + command.Reason, command.OperatorUserID, nowMS); err != nil { + return resourcedomain.ResourceGrant{}, err + } + for _, item := range group.Items { + if resourcedomain.NormalizeGroupItemType(item.ItemType) == resourcedomain.GroupItemTypeWalletAsset { + if item.ResourceID != 0 || item.Quantity != 1 || item.DurationMS != 0 || !validGroupWalletAssetType(item.WalletAssetType) || item.WalletAssetAmount <= 0 { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "resource group snapshot contains an invalid wallet asset item") + } + if _, err := r.applyWalletAssetGrantItem(ctx, tx, grantID, command.CommandID, command.TargetUserID, item, nowMS); err != nil { + return resourcedomain.ResourceGrant{}, err + } + continue + } + if resourcedomain.NormalizeResourceType(item.Resource.ResourceType) == resourcedomain.TypeVIPTrialCard { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "resource group snapshot contains unsupported vip_trial_card") + } + if item.ResourceID <= 0 || item.Resource.ResourceID != item.ResourceID || item.Quantity <= 0 || item.DurationMS < 0 || item.WalletAssetType != "" || item.WalletAssetAmount != 0 { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "resource group snapshot contains an invalid resource item") + } + if err := validatePinnedResourceGroupResource(item.Resource); err != nil { + return resourcedomain.ResourceGrant{}, err + } + giftSnapshotJSON := "" + giftSnapshotHash := "" + if resourcedomain.NormalizeResourceType(item.Resource.ResourceType) == resourcedomain.TypeGift { + if err := validatePinnedGiftConfigs(command.AppCode, item.Resource, item.GiftConfigs); err != nil { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "resource group gift snapshot is invalid: "+err.Error()) + } + giftJSON, err := resourcedomain.CanonicalGiftConfigsJSON(item.GiftConfigs) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + giftSnapshotJSON = string(giftJSON) + giftSnapshotHash, err = resourcedomain.GiftConfigsContentHash(item.GiftConfigs) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + } else if len(item.GiftConfigs) != 0 { + return resourcedomain.ResourceGrant{}, xerr.New(xerr.Internal, "non-gift resource contains gift snapshot") + } + resourceSnapshotJSON, err := resourcedomain.CanonicalResourceJSON(item.Resource) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + resourceSnapshotHash, err := resourcedomain.ResourceContentHash(item.Resource) + if err != nil { + return resourcedomain.ResourceGrant{}, err + } + if _, err := r.applyGrantItemWithEntitlementSnapshot(ctx, tx, grantID, command.CommandID, command.TargetUserID, + item.Resource, item.Quantity, item.DurationMS, nowMS, resourceEntitlementSnapshot{ + SourceSnapshotID: snapshot.SnapshotID, ResourceSnapshotHash: resourceSnapshotHash, + ResourceSnapshotJSON: string(resourceSnapshotJSON), GiftSnapshotHash: giftSnapshotHash, + GiftSnapshotJSON: giftSnapshotJSON, + }); err != nil { + return resourcedomain.ResourceGrant{}, err + } + } + if err := r.insertWalletOutbox(ctx, tx, []walletOutboxEvent{ + resourceOutboxEvent("ResourceGroupGranted", command.CommandID, command.TargetUserID, snapshot.SourceGroupID, map[string]any{ + "grant_id": grantID, "snapshot_id": snapshot.SnapshotID, "snapshot_hash": snapshot.SnapshotHash, + "snapshot_version": snapshot.VersionNo, "grant_subject_type": resourcedomain.GrantSubjectGroupSnapshot, + "grant_subject_id": snapshot.SnapshotID, "group": group, + }, nowMS), + }); err != nil { + return resourcedomain.ResourceGrant{}, err + } + if err := tx.Commit(); err != nil { + return resourcedomain.ResourceGrant{}, err + } + return r.GetResourceGrant(ctx, grantID) +} + // RevokeResourceGrant 撤销一次成功的资源发放;钱包扣回、权益扣减、装备清理和发放状态更新必须同事务提交。 func (r *Repository) RevokeResourceGrant(ctx context.Context, command resourcedomain.RevokeResourceGrantCommand) (resourcedomain.ResourceGrant, error) { if r == nil || r.db == nil { @@ -311,6 +430,18 @@ func (r *Repository) GetResourceGrant(ctx context.Context, grantID string) (reso } func (r *Repository) applyGrantItem(ctx context.Context, tx *sql.Tx, grantID string, commandID string, targetUserID int64, resource resourcedomain.Resource, quantity int64, durationMS int64, nowMs int64) (resourcedomain.ResourceGrantItem, error) { + return r.applyGrantItemWithEntitlementSnapshot(ctx, tx, grantID, commandID, targetUserID, resource, quantity, durationMS, nowMs, resourceEntitlementSnapshot{}) +} + +type resourceEntitlementSnapshot struct { + SourceSnapshotID string + ResourceSnapshotHash string + ResourceSnapshotJSON string + GiftSnapshotHash string + GiftSnapshotJSON string +} + +func (r *Repository) applyGrantItemWithEntitlementSnapshot(ctx context.Context, tx *sql.Tx, grantID string, commandID string, targetUserID int64, resource resourcedomain.Resource, quantity int64, durationMS int64, nowMs int64, entitlementSnapshot resourceEntitlementSnapshot) (resourcedomain.ResourceGrantItem, error) { if quantity <= 0 { return resourcedomain.ResourceGrantItem{}, xerr.New(xerr.InvalidArgument, "quantity must be positive") } @@ -378,7 +509,7 @@ func (r *Repository) applyGrantItem(ctx context.Context, tx *sql.Tx, grantID str item.ResultType = resourcedomain.ResultWalletCredit item.WalletTransactionID = transactionID } else { - entitlementID, err := r.applyEntitlement(ctx, tx, targetUserID, resource, quantity, durationMS, grantID, nowMs) + entitlementID, err := r.applyEntitlement(ctx, tx, targetUserID, resource, quantity, durationMS, grantID, nowMs, entitlementSnapshot) if err != nil { return resourcedomain.ResourceGrantItem{}, err } @@ -812,6 +943,37 @@ func normalizeGrantResourceGroupCommand(command resourcedomain.GrantResourceGrou return command } +func normalizeGrantPinnedResourceGroupCommand(command resourcedomain.GrantPinnedResourceGroupCommand) resourcedomain.GrantPinnedResourceGroupCommand { + command.CommandID = strings.TrimSpace(command.CommandID) + command.SnapshotID = strings.TrimSpace(command.SnapshotID) + command.Reason = strings.TrimSpace(command.Reason) + command.GrantSource = resourcedomain.NormalizeGrantSource(command.GrantSource) + command.ExpectedSnapshotHash = strings.ToLower(strings.TrimSpace(command.ExpectedSnapshotHash)) + return command +} + +func validateGrantPinnedResourceGroupCommand(command resourcedomain.GrantPinnedResourceGroupCommand) error { + if command.CommandID == "" || command.TargetUserID <= 0 || command.SnapshotID == "" || command.OperatorUserID <= 0 || command.Reason == "" || !validSHA256(command.ExpectedSnapshotHash) { + return xerr.New(xerr.InvalidArgument, "pinned resource group grant command is incomplete") + } + if command.GrantSource == resourcedomain.GrantSourceManagerCenter { + return xerr.New(xerr.InvalidArgument, "manager center cannot grant pinned resource group") + } + return nil +} + +func validatePinnedResourceGroupResource(resource resourcedomain.Resource) error { + // Status is deliberately not re-read: the active/grantable owner facts were validated and pinned at + // publish time. Structural corruption still fails closed instead of producing an undefined asset. + if resource.ResourceID <= 0 || !resource.Grantable || !resourcedomain.ValidGrantStrategy(resource.GrantStrategy) { + return xerr.New(xerr.Internal, "resource group snapshot contains an invalid resource") + } + if resourcedomain.IsWalletCredit(resource) && !resourcedomain.IsCoinResource(resource) { + return xerr.New(xerr.Internal, "resource group snapshot contains an invalid wallet credit") + } + return nil +} + func validateGrantResourceGroupCommand(command resourcedomain.GrantResourceGroupCommand) error { if command.CommandID == "" || command.TargetUserID <= 0 || command.GroupID <= 0 || command.OperatorUserID <= 0 || command.Reason == "" { return xerr.New(xerr.InvalidArgument, "resource group grant command is incomplete") @@ -883,6 +1045,13 @@ func grantResourceGroupRequestHash(command resourcedomain.GrantResourceGroupComm )) } +func grantPinnedResourceGroupRequestHash(command resourcedomain.GrantPinnedResourceGroupCommand) string { + return stableHash(fmt.Sprintf("pinned_resource_group_grant|%s|%d|%s|%s|%s|%d|%s", + appcode.Normalize(command.AppCode), command.TargetUserID, command.SnapshotID, + command.ExpectedSnapshotHash, command.Reason, command.OperatorUserID, command.GrantSource, + )) +} + func resourceWalletCreditHash(grantID string, resourceID int64, quantity int64) string { return stableHash(fmt.Sprintf("resource_wallet_credit|%s|%d|%d", grantID, resourceID, quantity)) } diff --git a/services/wallet-service/internal/storage/mysql/resource_group_gift_snapshot.go b/services/wallet-service/internal/storage/mysql/resource_group_gift_snapshot.go new file mode 100644 index 00000000..cbe208ba --- /dev/null +++ b/services/wallet-service/internal/storage/mysql/resource_group_gift_snapshot.go @@ -0,0 +1,265 @@ +package mysql + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "strings" + + "hyapp/pkg/appcode" + "hyapp/services/wallet-service/internal/domain/ledger" + resourcedomain "hyapp/services/wallet-service/internal/domain/resource" +) + +type giftSnapshotQuerier interface { + sqlRowQuerier + sqlQuerier +} + +// enrichResourceGroupGiftSnapshots resolves every gift ID backed by a gift resource at one instant. Pinning +// calls this with row locks, so config, price and presentation cannot change between validation and persistence. +func (r *Repository) enrichResourceGroupGiftSnapshots(ctx context.Context, querier giftSnapshotQuerier, items []resourcedomain.ResourceGroupItem, nowMS int64, lock bool) error { + for index := range items { + if resourcedomain.NormalizeGroupItemType(items[index].ItemType) != resourcedomain.GroupItemTypeResource || + resourcedomain.NormalizeResourceType(items[index].Resource.ResourceType) != resourcedomain.TypeGift { + continue + } + configs, err := r.listPinnableGiftConfigs(ctx, querier, items[index].ResourceID, nowMS, lock) + if err != nil { + return err + } + items[index].GiftConfigs = configs + } + return nil +} + +func (r *Repository) listPinnableGiftConfigs(ctx context.Context, querier giftSnapshotQuerier, resourceID int64, nowMS int64, lock bool) ([]resourcedomain.GiftConfig, error) { + query := giftConfigSelectSQL() + ` + WHERE gc.app_code = ? AND gc.resource_id = ? + AND gc.status = 'active' AND r.status = 'active' AND r.resource_type = 'gift' + AND (COALESCE(gc.effective_from_ms, 0) = 0 OR gc.effective_from_ms <= ?) + AND (COALESCE(gc.effective_to_ms, 0) = 0 OR gc.effective_to_ms > ?) + ORDER BY gc.gift_id ASC` + if lock { + query += ` FOR UPDATE` + } + rows, err := querier.QueryContext(ctx, query, appcode.FromContext(ctx), resourceID, nowMS, nowMS) + if err != nil { + return nil, err + } + configs := make([]resourcedomain.GiftConfig, 0) + for rows.Next() { + config, scanErr := scanGiftConfig(rows) + if scanErr != nil { + _ = rows.Close() + return nil, scanErr + } + configs = append(configs, config) + } + if err := rows.Err(); err != nil { + _ = rows.Close() + return nil, err + } + if err := rows.Close(); err != nil { + return nil, err + } + + for index := range configs { + price, err := r.latestPinnableGiftPrice(ctx, querier, configs[index].GiftID, nowMS, lock) + if err != nil { + return nil, err + } + applyGiftPriceToConfig(&configs[index], price) + regions, err := listPinnableGiftRegions(ctx, querier, configs[index].GiftID, lock) + if err != nil { + return nil, err + } + configs[index].RegionIDs = regions + } + return configs, nil +} + +func (r *Repository) latestPinnableGiftPrice(ctx context.Context, querier giftSnapshotQuerier, giftID string, nowMS int64, lock bool) (giftPrice, error) { + if !lock { + return r.latestGiftPrice(ctx, querier, giftID, nowMS) + } + row := querier.QueryRowContext(ctx, ` + SELECT gift_id, price_version, COALESCE(charge_asset_type, 'COIN'), coin_price, gift_point_amount, heat_value + FROM wallet_gift_prices + WHERE app_code = ? AND gift_id = ? AND status = 'active' AND effective_at_ms <= ? + ORDER BY effective_at_ms DESC, price_version DESC + LIMIT 1 + FOR UPDATE`, appcode.FromContext(ctx), giftID, nowMS) + var price giftPrice + if err := row.Scan(&price.GiftID, &price.PriceVersion, &price.ChargeAssetType, &price.CoinPrice, &price.GiftPointAmount, &price.HeatValue); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return giftPrice{}, fmt.Errorf("gift %s has no active pin-time price", giftID) + } + return giftPrice{}, err + } + price.ChargeAssetType = ledger.NormalizeGiftChargeAssetType(price.ChargeAssetType) + return price, nil +} + +func listPinnableGiftRegions(ctx context.Context, querier giftSnapshotQuerier, giftID string, lock bool) ([]int64, error) { + query := ` + SELECT region_id FROM gift_config_regions + WHERE app_code = ? AND gift_id = ? + ORDER BY region_id ASC` + if lock { + query += ` FOR UPDATE` + } + rows, err := querier.QueryContext(ctx, query, appcode.FromContext(ctx), giftID) + if err != nil { + return nil, err + } + defer rows.Close() + regions := make([]int64, 0) + for rows.Next() { + var regionID int64 + if err := rows.Scan(®ionID); err != nil { + return nil, err + } + regions = append(regions, regionID) + } + return regions, rows.Err() +} + +func validatePinnedGiftConfigs(appCode string, resource resourcedomain.Resource, configs []resourcedomain.GiftConfig) error { + if resourcedomain.NormalizeResourceType(resource.ResourceType) != resourcedomain.TypeGift || len(configs) == 0 { + return errors.New("gift resource has no pinnable gift config") + } + resourceHash, err := resourcedomain.ResourceContentHash(resource) + if err != nil { + return err + } + seen := make(map[string]struct{}, len(configs)) + for _, config := range configs { + giftID := strings.TrimSpace(config.GiftID) + if giftID == "" || strings.TrimSpace(config.Name) == "" || strings.TrimSpace(config.PriceVersion) == "" || + appcode.Normalize(config.AppCode) != appcode.Normalize(appCode) || config.ResourceID != resource.ResourceID || + resourcedomain.NormalizeStatus(config.Status) != resourcedomain.StatusActive || config.CoinPrice < 0 || config.HeatValue < 0 || + !ledger.ValidGiftChargeAssetType(config.ChargeAssetType) || !resourcedomain.ValidGiftTypeCode(config.GiftTypeCode) { + return fmt.Errorf("gift %q pin-time config is invalid", giftID) + } + if _, exists := seen[giftID]; exists { + return fmt.Errorf("gift %q is duplicated in pin-time config", giftID) + } + seen[giftID] = struct{}{} + nestedHash, hashErr := resourcedomain.ResourceContentHash(config.Resource) + if hashErr != nil || nestedHash != resourceHash || config.Resource.ResourceID != resource.ResourceID { + return fmt.Errorf("gift %q resource snapshot does not match group item", giftID) + } + if config.EffectiveFromMS > 0 && config.EffectiveToMS > 0 && config.EffectiveToMS <= config.EffectiveFromMS { + return fmt.Errorf("gift %q effective range is invalid", giftID) + } + var presentation map[string]any + if err := json.Unmarshal([]byte(config.PresentationJSON), &presentation); err != nil || presentation == nil || + normalizeCPRelationType(config.CPRelationType) != cpRelationTypeFromPresentationJSON(config.PresentationJSON) { + return fmt.Errorf("gift %q presentation snapshot is invalid", giftID) + } + if len(config.RegionIDs) == 0 { + return fmt.Errorf("gift %q has no pin-time region", giftID) + } + for _, regionID := range config.RegionIDs { + if regionID < 0 { + return fmt.Errorf("gift %q has invalid region", giftID) + } + } + for _, effectType := range config.EffectTypes { + if !resourcedomain.ValidGiftEffectType(effectType) { + return fmt.Errorf("gift %q has invalid effect type", giftID) + } + } + } + return nil +} + +func validatePinnedEntitlementGiftSnapshot(appCode string, resource resourcedomain.Resource, snapshotHash string, snapshotJSON string) error { + if resourcedomain.NormalizeResourceType(resource.ResourceType) != resourcedomain.TypeGift { + if strings.TrimSpace(snapshotHash) != "" || strings.TrimSpace(snapshotJSON) != "" { + return fmt.Errorf("non-gift pinned entitlement contains gift semantics") + } + return nil + } + if !validSHA256(snapshotHash) || strings.TrimSpace(snapshotJSON) == "" { + return fmt.Errorf("pinned gift entitlement snapshot is incomplete") + } + var configs []resourcedomain.GiftConfig + if err := json.Unmarshal([]byte(snapshotJSON), &configs); err != nil { + return fmt.Errorf("decode pinned gift entitlement snapshot: %w", err) + } + contentHash, err := resourcedomain.GiftConfigsContentHash(configs) + if err != nil || contentHash != snapshotHash { + return fmt.Errorf("pinned gift entitlement snapshot integrity check failed") + } + if err := validatePinnedGiftConfigs(appCode, resource, configs); err != nil { + return fmt.Errorf("pinned gift entitlement snapshot is invalid: %w", err) + } + return nil +} + +func decodePinnedGiftConfigs(entitlement resourcedomain.UserResourceEntitlement) ([]resourcedomain.GiftConfig, error) { + if err := validatePinnedEntitlementGiftSnapshot(entitlement.AppCode, entitlement.Resource, entitlement.GiftSnapshotHash, entitlement.GiftSnapshotJSON); err != nil { + return nil, err + } + var configs []resourcedomain.GiftConfig + if err := json.Unmarshal([]byte(entitlement.GiftSnapshotJSON), &configs); err != nil { + return nil, err + } + return configs, nil +} + +func pinnedGiftAvailableInRegion(config resourcedomain.GiftConfig, regionID int64) bool { + for _, allowed := range config.RegionIDs { + if allowed == 0 || allowed == regionID { + return true + } + } + return false +} + +func validatePinnedGiftRegionCoverage(items []resourcedomain.ResourceGroupItem, requiredRegionIDs []int64, requiredAllRegions bool) error { + if !requiredAllRegions && len(requiredRegionIDs) == 0 { + return nil + } + for _, item := range items { + if resourcedomain.NormalizeGroupItemType(item.ItemType) != resourcedomain.GroupItemTypeResource || + resourcedomain.NormalizeResourceType(item.Resource.ResourceType) != resourcedomain.TypeGift { + continue + } + if requiredAllRegions { + global := false + for _, config := range item.GiftConfigs { + for _, regionID := range config.RegionIDs { + if regionID == 0 { + global = true + break + } + } + if global { + break + } + } + if !global { + return fmt.Errorf("gift resource %d has no global pin-time config for all-regions activity", item.ResourceID) + } + continue + } + for _, requiredRegionID := range requiredRegionIDs { + covered := false + for _, config := range item.GiftConfigs { + if pinnedGiftAvailableInRegion(config, requiredRegionID) { + covered = true + break + } + } + if !covered { + return fmt.Errorf("gift resource %d is unavailable in required region %d", item.ResourceID, requiredRegionID) + } + } + } + return nil +} diff --git a/services/wallet-service/internal/storage/mysql/resource_group_repository.go b/services/wallet-service/internal/storage/mysql/resource_group_repository.go index 17c73336..528836ab 100644 --- a/services/wallet-service/internal/storage/mysql/resource_group_repository.go +++ b/services/wallet-service/internal/storage/mysql/resource_group_repository.go @@ -67,7 +67,15 @@ func (r *Repository) GetResourceGroup(ctx context.Context, groupID int64) (resou return resourcedomain.ResourceGroup{}, err } group.Items, err = r.listResourceGroupItems(ctx, groupID) - return group, err + if err != nil { + return resourcedomain.ResourceGroup{}, err + } + // Gift catalog facts are not exposed as mutable group fields, but they participate in the owner content + // hash returned by GetResourceGroup and must therefore be resolved exactly like the later pin operation. + if err := r.enrichResourceGroupGiftSnapshots(ctx, r.db, group.Items, time.Now().UTC().UnixMilli(), false); err != nil { + return resourcedomain.ResourceGroup{}, err + } + return group, nil } func (r *Repository) CreateResourceGroup(ctx context.Context, command resourcedomain.ResourceGroupCommand) (resourcedomain.ResourceGroup, error) { diff --git a/services/wallet-service/internal/storage/mysql/resource_group_snapshot_repository.go b/services/wallet-service/internal/storage/mysql/resource_group_snapshot_repository.go new file mode 100644 index 00000000..ec598111 --- /dev/null +++ b/services/wallet-service/internal/storage/mysql/resource_group_snapshot_repository.go @@ -0,0 +1,318 @@ +package mysql + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "sort" + "strings" + "time" + + "hyapp/pkg/appcode" + "hyapp/pkg/xerr" + resourcedomain "hyapp/services/wallet-service/internal/domain/resource" +) + +func ensureResourceGroupSnapshotSchema(ctx context.Context, db *sql.DB) error { + if _, err := db.ExecContext(ctx, ` + CREATE TABLE IF NOT EXISTS resource_group_snapshots ( + app_code VARCHAR(32) NOT NULL COMMENT '应用编码', + snapshot_id VARCHAR(96) NOT NULL COMMENT '不可变资源组快照 ID', + pin_key VARCHAR(192) NOT NULL COMMENT '发布方业务版本幂等键', + source_group_id BIGINT NOT NULL COMMENT '来源资源组 ID', + version_no BIGINT NOT NULL COMMENT '来源资源组递增快照版本', + snapshot_hash CHAR(64) NOT NULL COMMENT '完整快照 SHA-256', + snapshot_json JSON NOT NULL COMMENT '含资源详情和钱包资产的完整不可变快照', + source_group_updated_at_ms BIGINT NOT NULL COMMENT '锁定时来源资源组版本', + source_content_hash CHAR(64) NOT NULL COMMENT '资源组、组项和嵌套资源的规范化内容哈希', + created_by_user_id BIGINT NOT NULL, + created_at_ms BIGINT NOT NULL, + PRIMARY KEY (app_code, snapshot_id), + UNIQUE KEY uk_resource_group_snapshot_pin (app_code, pin_key), + UNIQUE KEY uk_resource_group_snapshot_version (app_code, source_group_id, version_no), + KEY idx_resource_group_snapshot_source (app_code, source_group_id, created_at_ms) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源组发布态不可变奖励快照'`); err != nil { + return err + } + var database string + if err := db.QueryRowContext(ctx, `SELECT DATABASE()`).Scan(&database); err != nil { + return err + } + var sourceVersionColumn int + if err := db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'resource_group_snapshots' AND COLUMN_NAME = 'source_group_updated_at_ms'`, database). + Scan(&sourceVersionColumn); err != nil { + return err + } + if sourceVersionColumn == 0 { + if _, err := db.ExecContext(ctx, ` + ALTER TABLE resource_group_snapshots + ADD COLUMN source_group_updated_at_ms BIGINT NOT NULL DEFAULT 0 AFTER snapshot_json`); err != nil { + return err + } + if _, err := db.ExecContext(ctx, ` + UPDATE resource_group_snapshots + SET source_group_updated_at_ms = CAST(JSON_UNQUOTE(JSON_EXTRACT(snapshot_json, '$.UpdatedAtMS')) AS SIGNED) + WHERE source_group_updated_at_ms = 0 + AND JSON_EXTRACT(snapshot_json, '$.UpdatedAtMS') IS NOT NULL`); err != nil { + return err + } + } + var invalidSourceVersions int64 + if err := db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM resource_group_snapshots WHERE source_group_updated_at_ms <= 0`).Scan(&invalidSourceVersions); err != nil { + return err + } + if invalidSourceVersions > 0 { + return xerr.New(xerr.Internal, "resource group snapshots contain invalid source versions") + } + var sourceHashColumn int + if err := db.QueryRowContext(ctx, ` + SELECT COUNT(*) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'resource_group_snapshots' AND COLUMN_NAME = 'source_content_hash'`, database). + Scan(&sourceHashColumn); err != nil { + return err + } + if sourceHashColumn == 0 { + if _, err := db.ExecContext(ctx, ` + ALTER TABLE resource_group_snapshots + ADD COLUMN source_content_hash CHAR(64) NOT NULL DEFAULT '' AFTER source_group_updated_at_ms`); err != nil { + return err + } + // Existing snapshots were written from the same canonical group JSON. Backfill the integrity hash so old + // owner snapshots remain grantable after the stronger source-version contract is deployed. + if _, err := db.ExecContext(ctx, ` + UPDATE resource_group_snapshots SET source_content_hash = snapshot_hash + WHERE source_content_hash = ''`); err != nil { + return err + } + } + return nil +} + +// PinResourceGroupSnapshot locks and validates the mutable owner aggregate exactly once for a caller's +// business-version pin key. A retry returns the original bytes even when the source group was edited later. +func (r *Repository) PinResourceGroupSnapshot(ctx context.Context, command resourcedomain.PinResourceGroupSnapshotCommand) (resourcedomain.ResourceGroupSnapshot, error) { + if r == nil || r.db == nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + command.AppCode = appcode.Normalize(command.AppCode) + command.PinKey = strings.TrimSpace(command.PinKey) + command.RequiredRegionIDs = normalizeRequiredRegionIDs(command.RequiredRegionIDs) + if command.AppCode == "" || command.GroupID <= 0 || command.OperatorUserID <= 0 || command.ExpectedGroupUpdatedAtMS <= 0 || + !validSHA256(command.ExpectedSourceContentHash) || command.PinKey == "" || len(command.PinKey) > 192 { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.InvalidArgument, "resource group snapshot command is incomplete") + } + for _, regionID := range command.RequiredRegionIDs { + if regionID <= 0 { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.InvalidArgument, "required_region_ids must contain positive active region IDs") + } + } + ctx = appcode.WithContext(ctx, command.AppCode) + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + defer func() { _ = tx.Rollback() }() + + if existing, found, err := getResourceGroupSnapshotByPinKey(ctx, tx, command.AppCode, command.PinKey, true); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } else if found { + if existing.SourceGroupID != command.GroupID || existing.SourceContentHash != command.ExpectedSourceContentHash { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "resource group snapshot pin key belongs to another group") + } + if err := validatePinnedGiftRegionCoverage(existing.Group.Items, command.RequiredRegionIDs, command.RequiredAllRegions); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, err.Error()) + } + return existing, nil + } + group, err := r.getResourceGroup(ctx, tx, command.GroupID, true) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if group.Status != resourcedomain.StatusActive { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "resource group is disabled") + } + if group.UpdatedAtMS != command.ExpectedGroupUpdatedAtMS { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "resource group changed before snapshot pin") + } + group.Items, err = r.listResourceGroupItemsTx(ctx, tx, command.GroupID, true) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if len(group.Items) == 0 { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.InvalidArgument, "resource group has no items") + } + pinNowMS := time.Now().UTC().UnixMilli() + if err := r.enrichResourceGroupGiftSnapshots(ctx, tx, group.Items, pinNowMS, true); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "gift resource cannot be pinned: "+err.Error()) + } + if err := validateActiveResourceGroupItems(group.Items); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + for _, item := range group.Items { + if resourcedomain.NormalizeResourceType(item.Resource.ResourceType) != resourcedomain.TypeGift { + continue + } + if err := validatePinnedGiftConfigs(command.AppCode, item.Resource, item.GiftConfigs); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "gift resource cannot be pinned: "+err.Error()) + } + } + if err := validatePinnedGiftRegionCoverage(group.Items, command.RequiredRegionIDs, command.RequiredAllRegions); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, err.Error()) + } + snapshotJSON, err := resourcedomain.CanonicalResourceGroupJSON(group) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + sourceContentHash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if sourceContentHash != command.ExpectedSourceContentHash { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "resource group content changed before snapshot pin") + } + var versionNo int64 + if err := tx.QueryRowContext(ctx, ` + SELECT COALESCE(MAX(version_no), 0) + 1 FROM resource_group_snapshots + WHERE app_code = ? AND source_group_id = ?`, command.AppCode, command.GroupID).Scan(&versionNo); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + nowMS := pinNowMS + snapshot := resourcedomain.ResourceGroupSnapshot{ + AppCode: command.AppCode, SnapshotID: "rgs_" + stableHash(command.AppCode+"|"+command.PinKey), + PinKey: command.PinKey, SourceGroupID: command.GroupID, VersionNo: versionNo, + SnapshotHash: sourceContentHash, Group: group, + CreatedByUserID: command.OperatorUserID, CreatedAtMS: nowMS, SourceGroupUpdatedAtMS: group.UpdatedAtMS, + SourceContentHash: sourceContentHash, + } + result, err := tx.ExecContext(ctx, ` + INSERT IGNORE INTO resource_group_snapshots ( + app_code, snapshot_id, pin_key, source_group_id, version_no, snapshot_hash, snapshot_json, + source_group_updated_at_ms, source_content_hash, created_by_user_id, created_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, CAST(? AS JSON), ?, ?, ?, ?)`, + snapshot.AppCode, snapshot.SnapshotID, snapshot.PinKey, snapshot.SourceGroupID, snapshot.VersionNo, + snapshot.SnapshotHash, string(snapshotJSON), snapshot.SourceGroupUpdatedAtMS, snapshot.SourceContentHash, + snapshot.CreatedByUserID, snapshot.CreatedAtMS) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + affected, err := result.RowsAffected() + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if affected == 0 { + existing, found, err := getResourceGroupSnapshotByPinKey(ctx, tx, command.AppCode, command.PinKey, true) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if !found || existing.SourceGroupID != command.GroupID || existing.SourceContentHash != command.ExpectedSourceContentHash { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, "resource group snapshot pin conflict") + } + if err := validatePinnedGiftRegionCoverage(existing.Group.Items, command.RequiredRegionIDs, command.RequiredAllRegions); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Conflict, err.Error()) + } + return existing, nil + } + if err := tx.Commit(); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + return snapshot, nil +} + +func normalizeRequiredRegionIDs(values []int64) []int64 { + seen := make(map[int64]struct{}, len(values)) + out := make([]int64, 0, len(values)) + for _, value := range values { + if _, exists := seen[value]; exists { + continue + } + seen[value] = struct{}{} + out = append(out, value) + } + sort.Slice(out, func(left, right int) bool { return out[left] < out[right] }) + return out +} + +func (r *Repository) GetResourceGroupSnapshot(ctx context.Context, snapshotID string) (resourcedomain.ResourceGroupSnapshot, error) { + if r == nil || r.db == nil { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + item, found, err := getResourceGroupSnapshot(ctx, r.db, appcode.FromContext(ctx), strings.TrimSpace(snapshotID), false) + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, err + } + if !found { + return resourcedomain.ResourceGroupSnapshot{}, xerr.New(xerr.NotFound, "resource group snapshot not found") + } + return item, nil +} + +func getResourceGroupSnapshotByPinKey(ctx context.Context, q resourceSnapshotQuerier, appCode, pinKey string, forUpdate bool) (resourcedomain.ResourceGroupSnapshot, bool, error) { + query := `SELECT app_code, snapshot_id, pin_key, source_group_id, version_no, snapshot_hash, + CAST(snapshot_json AS CHAR), source_group_updated_at_ms, source_content_hash, created_by_user_id, created_at_ms + FROM resource_group_snapshots WHERE app_code = ? AND pin_key = ?` + if forUpdate { + query += " FOR UPDATE" + } + return scanResourceGroupSnapshot(q.QueryRowContext(ctx, query, appCode, pinKey)) +} + +func getResourceGroupSnapshot(ctx context.Context, q resourceSnapshotQuerier, appCode, snapshotID string, forUpdate bool) (resourcedomain.ResourceGroupSnapshot, bool, error) { + query := `SELECT app_code, snapshot_id, pin_key, source_group_id, version_no, snapshot_hash, + CAST(snapshot_json AS CHAR), source_group_updated_at_ms, source_content_hash, created_by_user_id, created_at_ms + FROM resource_group_snapshots WHERE app_code = ? AND snapshot_id = ?` + if forUpdate { + query += " FOR UPDATE" + } + return scanResourceGroupSnapshot(q.QueryRowContext(ctx, query, appCode, snapshotID)) +} + +func scanResourceGroupSnapshot(row resourceSnapshotScanner) (resourcedomain.ResourceGroupSnapshot, bool, error) { + var item resourcedomain.ResourceGroupSnapshot + var snapshotJSON string + err := row.Scan(&item.AppCode, &item.SnapshotID, &item.PinKey, &item.SourceGroupID, &item.VersionNo, + &item.SnapshotHash, &snapshotJSON, &item.SourceGroupUpdatedAtMS, &item.SourceContentHash, &item.CreatedByUserID, &item.CreatedAtMS) + if errors.Is(err, sql.ErrNoRows) { + return resourcedomain.ResourceGroupSnapshot{}, false, nil + } + if err != nil { + return resourcedomain.ResourceGroupSnapshot{}, false, err + } + if err := json.Unmarshal([]byte(snapshotJSON), &item.Group); err != nil { + return resourcedomain.ResourceGroupSnapshot{}, false, fmt.Errorf("decode resource group snapshot: %w", err) + } + canonicalJSON, marshalErr := resourcedomain.CanonicalResourceGroupJSON(item.Group) + if marshalErr != nil { + return resourcedomain.ResourceGroupSnapshot{}, false, marshalErr + } + if stableHash(string(canonicalJSON)) != item.SnapshotHash || item.SourceContentHash != item.SnapshotHash || + item.Group.GroupID != item.SourceGroupID || item.Group.UpdatedAtMS != item.SourceGroupUpdatedAtMS { + return resourcedomain.ResourceGroupSnapshot{}, false, xerr.New(xerr.Internal, "resource group snapshot integrity check failed") + } + return item, true, nil +} + +func validSHA256(value string) bool { + value = strings.TrimSpace(value) + if len(value) != 64 { + return false + } + for _, character := range value { + if (character < '0' || character > '9') && (character < 'a' || character > 'f') { + return false + } + } + return true +} + +type resourceSnapshotQuerier interface { + QueryRowContext(context.Context, string, ...any) *sql.Row +} + +type resourceSnapshotScanner interface { + Scan(...any) error +} diff --git a/services/wallet-service/internal/testutil/mysqltest/mysqltest.go b/services/wallet-service/internal/testutil/mysqltest/mysqltest.go index cc9a7226..d36760b5 100644 --- a/services/wallet-service/internal/testutil/mysqltest/mysqltest.go +++ b/services/wallet-service/internal/testutil/mysqltest/mysqltest.go @@ -115,6 +115,18 @@ func (r *Repository) ExpireEntitlement(entitlementID string, expiresAtMS int64) } } +// TamperPinnedGiftSnapshot mutates wallet-owned bytes without updating their hash so integrity fail-closed +// behaviour can be asserted through the public send-gift service. +func (r *Repository) TamperPinnedGiftSnapshot(entitlementID string) { + r.t.Helper() + if _, err := r.schema.DB.ExecContext(context.Background(), ` + UPDATE user_resource_entitlements + SET gift_snapshot_json = JSON_SET(gift_snapshot_json, '$[0].CoinPrice', 999999), updated_at_ms = ? + WHERE entitlement_id = ?`, time.Now().UnixMilli(), entitlementID); err != nil { + r.t.Fatalf("tamper pinned gift snapshot failed: %v", err) + } +} + // SetResourceGrantStatus lets service tests model legacy or abnormal grant rows without bypassing production grant creation. func (r *Repository) SetResourceGrantStatus(grantID string, status string) { r.t.Helper() @@ -946,9 +958,9 @@ func validateTableName(table string) string { "wallet_user_recharge_stats", "external_recharge_orders", "third_party_payment_methods", "host_period_diamond_accounts", "host_period_diamond_entries", "host_agency_salary_policies", "host_agency_salary_policy_levels", "host_salary_settlement_progress", "host_salary_settlement_records", - "coin_seller_stock_records", "gift_diamond_ratio_configs", "wallet_diamond_exchange_rules", + "coin_seller_stock_records", "gift_diamond_ratio_configs", "wallet_diamond_exchange_rules", "agency_point_share_entries", "vip_program_configs", "vip_levels", "vip_level_benefits", "user_vip_memberships", "user_vip_settings", "vip_purchase_orders", "user_vip_history", "user_vip_trial_cards", "vip_command_locks", "vip_daily_coin_rebate_runs", "vip_daily_coin_rebates", - "resources", "resource_groups", "resource_group_items", "resource_shop_items", "resource_shop_purchase_orders", "gift_type_configs", "gift_configs", "gift_config_regions", "user_gift_wall", "wallet_projection_events", + "resources", "resource_groups", "resource_group_items", "resource_shop_items", "resource_shop_purchase_orders", "gift_type_configs", "gift_configs", "gift_config_regions", "wallet_gift_prices", "user_gift_wall", "wallet_projection_events", "resource_grants", "resource_grant_items", "user_resource_entitlements", "user_resource_equipment": return table default: diff --git a/services/wallet-service/internal/transport/grpc/external_recharge.go b/services/wallet-service/internal/transport/grpc/external_recharge.go index 18556c4f..022a5be1 100644 --- a/services/wallet-service/internal/transport/grpc/external_recharge.go +++ b/services/wallet-service/internal/transport/grpc/external_recharge.go @@ -235,6 +235,7 @@ func (s *Server) VerifyCoinSellerRechargeReceipt(ctx context.Context, req *walle ProviderCurrencyCode: req.GetProviderCurrencyCode(), ProviderAmountMinor: req.GetProviderAmountMinor(), ProviderPayType: req.GetProviderPayType(), + ReceiveAddress: req.GetReceiveAddress(), }) if err != nil { return nil, xerr.ToGRPCError(err) diff --git a/services/wallet-service/internal/transport/grpc/resource.go b/services/wallet-service/internal/transport/grpc/resource.go index 361c3e1c..08442f16 100644 --- a/services/wallet-service/internal/transport/grpc/resource.go +++ b/services/wallet-service/internal/transport/grpc/resource.go @@ -117,7 +117,11 @@ func (s *Server) GetResourceGroup(ctx context.Context, req *walletv1.GetResource if err != nil { return nil, xerr.ToGRPCError(err) } - return &walletv1.GetResourceGroupResponse{Group: resourceGroupToProto(group)}, nil + contentHash, err := resourcedomain.ResourceGroupContentHash(group) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return &walletv1.GetResourceGroupResponse{Group: resourceGroupToProto(group), SourceContentHash: contentHash}, nil } func (s *Server) CreateResourceGroup(ctx context.Context, req *walletv1.CreateResourceGroupRequest) (*walletv1.ResourceGroupResponse, error) { @@ -307,6 +311,30 @@ func (s *Server) GrantResourceGroup(ctx context.Context, req *walletv1.GrantReso return &walletv1.ResourceGrantResponse{Grant: resourceGrantToProto(grant)}, nil } +func (s *Server) PinResourceGroupSnapshot(ctx context.Context, req *walletv1.PinResourceGroupSnapshotRequest) (*walletv1.PinResourceGroupSnapshotResponse, error) { + item, err := s.svc.PinResourceGroupSnapshot(ctx, resourcedomain.PinResourceGroupSnapshotCommand{ + AppCode: req.GetAppCode(), GroupID: req.GetGroupId(), PinKey: req.GetPinKey(), OperatorUserID: req.GetOperatorUserId(), + ExpectedGroupUpdatedAtMS: req.GetExpectedGroupUpdatedAtMs(), ExpectedSourceContentHash: req.GetExpectedSourceContentHash(), + RequiredRegionIDs: req.GetRequiredRegionIds(), RequiredAllRegions: req.GetRequiredAllRegions(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return &walletv1.PinResourceGroupSnapshotResponse{Snapshot: resourceGroupSnapshotToProto(item)}, nil +} + +func (s *Server) GrantPinnedResourceGroup(ctx context.Context, req *walletv1.GrantPinnedResourceGroupRequest) (*walletv1.ResourceGrantResponse, error) { + grant, err := s.svc.GrantPinnedResourceGroup(ctx, resourcedomain.GrantPinnedResourceGroupCommand{ + AppCode: req.GetAppCode(), CommandID: req.GetCommandId(), TargetUserID: req.GetTargetUserId(), + SnapshotID: req.GetSnapshotId(), Reason: req.GetReason(), OperatorUserID: req.GetOperatorUserId(), + GrantSource: req.GetGrantSource(), ExpectedSnapshotHash: req.GetExpectedSnapshotHash(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return &walletv1.ResourceGrantResponse{Grant: resourceGrantToProto(grant)}, nil +} + func (s *Server) RevokeResourceGrant(ctx context.Context, req *walletv1.RevokeResourceGrantRequest) (*walletv1.ResourceGrantResponse, error) { grant, err := s.svc.RevokeResourceGrant(ctx, resourcedomain.RevokeResourceGrantCommand{ AppCode: req.GetAppCode(), diff --git a/services/wallet-service/internal/transport/grpc/resource_mapper.go b/services/wallet-service/internal/transport/grpc/resource_mapper.go index 04b67009..310a9605 100644 --- a/services/wallet-service/internal/transport/grpc/resource_mapper.go +++ b/services/wallet-service/internal/transport/grpc/resource_mapper.go @@ -129,6 +129,15 @@ func resourceGroupToProto(group resourcedomain.ResourceGroup) *walletv1.Resource } } +func resourceGroupSnapshotToProto(item resourcedomain.ResourceGroupSnapshot) *walletv1.ResourceGroupSnapshot { + return &walletv1.ResourceGroupSnapshot{ + AppCode: item.AppCode, SnapshotId: item.SnapshotID, PinKey: item.PinKey, + SourceGroupId: item.SourceGroupID, VersionNo: item.VersionNo, SnapshotHash: item.SnapshotHash, + Group: resourceGroupToProto(item.Group), CreatedByUserId: item.CreatedByUserID, CreatedAtMs: item.CreatedAtMS, + SourceGroupUpdatedAtMs: item.SourceGroupUpdatedAtMS, SourceContentHash: item.SourceContentHash, + } +} + func giftConfigToProto(gift resourcedomain.GiftConfig) *walletv1.GiftConfig { return &walletv1.GiftConfig{ AppCode: appcode.Normalize(gift.AppCode), @@ -173,22 +182,28 @@ func giftTypeConfigToProto(item resourcedomain.GiftTypeConfig) *walletv1.GiftTyp } func userResourceToProto(item resourcedomain.UserResourceEntitlement) *walletv1.UserResourceEntitlement { - return &walletv1.UserResourceEntitlement{ - AppCode: appcode.Normalize(item.AppCode), - EntitlementId: item.EntitlementID, - UserId: item.UserID, - ResourceId: item.ResourceID, - Resource: resourceToProto(item.Resource), - Status: item.Status, - Quantity: item.Quantity, - RemainingQuantity: item.RemainingQuantity, - EffectiveAtMs: item.EffectiveAtMS, - ExpiresAtMs: item.ExpiresAtMS, - SourceGrantId: item.SourceGrantID, - CreatedAtMs: item.CreatedAtMS, - UpdatedAtMs: item.UpdatedAtMS, - Equipped: item.Equipped, + out := &walletv1.UserResourceEntitlement{ + AppCode: appcode.Normalize(item.AppCode), + EntitlementId: item.EntitlementID, + UserId: item.UserID, + ResourceId: item.ResourceID, + Resource: resourceToProto(item.Resource), + Status: item.Status, + Quantity: item.Quantity, + RemainingQuantity: item.RemainingQuantity, + EffectiveAtMs: item.EffectiveAtMS, + ExpiresAtMs: item.ExpiresAtMS, + SourceGrantId: item.SourceGrantID, + CreatedAtMs: item.CreatedAtMS, + UpdatedAtMs: item.UpdatedAtMS, + Equipped: item.Equipped, + SourceSnapshotId: item.SourceSnapshotID, + ResourceSnapshotHash: item.ResourceSnapshotHash, } + for _, gift := range item.PinnedGiftConfigs { + out.PinnedGiftConfigs = append(out.PinnedGiftConfigs, giftConfigToProto(gift)) + } + return out } func resourceGrantToProto(grant resourcedomain.ResourceGrant) *walletv1.ResourceGrant { diff --git a/services/wallet-service/internal/transport/grpc/resource_test.go b/services/wallet-service/internal/transport/grpc/resource_test.go index 4e12ac3f..39c5c70f 100644 --- a/services/wallet-service/internal/transport/grpc/resource_test.go +++ b/services/wallet-service/internal/transport/grpc/resource_test.go @@ -4,6 +4,7 @@ import ( "testing" walletv1 "hyapp.local/api/proto/wallet/v1" + resourcedomain "hyapp/services/wallet-service/internal/domain/resource" ) func TestResourceCommandDefaultsManagerGrantDisabled(t *testing.T) { @@ -20,6 +21,20 @@ func TestResourceCommandDefaultsManagerGrantDisabled(t *testing.T) { } } +func TestUserResourceMapperExposesVerifiedPinnedGiftConfigs(t *testing.T) { + item := userResourceToProto(resourcedomain.UserResourceEntitlement{ + EntitlementID: "ent-pinned", SourceSnapshotID: "rgs-pinned", ResourceID: 501, + PinnedGiftConfigs: []resourcedomain.GiftConfig{{ + GiftID: "pinned-star", ResourceID: 501, Name: "Pinned Star V1", PriceVersion: "v1", CoinPrice: 7, + RegionIDs: []int64{1}, Resource: resourcedomain.Resource{ResourceID: 501, ResourceType: resourcedomain.TypeGift}, + }}, + }) + if len(item.GetPinnedGiftConfigs()) != 1 || item.GetPinnedGiftConfigs()[0].GetGiftId() != "pinned-star" || + item.GetPinnedGiftConfigs()[0].GetPriceVersion() != "v1" || item.GetPinnedGiftConfigs()[0].GetRegionIds()[0] != 1 { + t.Fatalf("pinned gift configs missing from entitlement proto: %+v", item) + } +} + func TestResourceCommandKeepsExplicitManagerGrantEnabled(t *testing.T) { enabled := true command := resourceCommandFromCreate(&walletv1.CreateResourceRequest{