diff --git a/api/deployment/v1/message.go-helpers.pb.go b/api/deployment/v1/message.go-helpers.pb.go index d236486978d..7cc164342b8 100644 --- a/api/deployment/v1/message.go-helpers.pb.go +++ b/api/deployment/v1/message.go-helpers.pb.go @@ -991,6 +991,80 @@ func (this *SyncVersionStateActivityResult) Equal(that interface{}) bool { return proto.Equal(this, that1) } +// Marshal an object of type IsVersionMissingTaskQueuesArgs to the protobuf v3 wire format +func (val *IsVersionMissingTaskQueuesArgs) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type IsVersionMissingTaskQueuesArgs from the protobuf v3 wire format +func (val *IsVersionMissingTaskQueuesArgs) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *IsVersionMissingTaskQueuesArgs) Size() int { + return proto.Size(val) +} + +// Equal returns whether two IsVersionMissingTaskQueuesArgs values are equivalent by recursively +// comparing the message's fields. +// For more information see the documentation for +// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal +func (this *IsVersionMissingTaskQueuesArgs) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *IsVersionMissingTaskQueuesArgs + switch t := that.(type) { + case *IsVersionMissingTaskQueuesArgs: + that1 = t + case IsVersionMissingTaskQueuesArgs: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + +// Marshal an object of type IsVersionMissingTaskQueuesResult to the protobuf v3 wire format +func (val *IsVersionMissingTaskQueuesResult) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type IsVersionMissingTaskQueuesResult from the protobuf v3 wire format +func (val *IsVersionMissingTaskQueuesResult) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *IsVersionMissingTaskQueuesResult) Size() int { + return proto.Size(val) +} + +// Equal returns whether two IsVersionMissingTaskQueuesResult values are equivalent by recursively +// comparing the message's fields. +// For more information see the documentation for +// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal +func (this *IsVersionMissingTaskQueuesResult) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *IsVersionMissingTaskQueuesResult + switch t := that.(type) { + case *IsVersionMissingTaskQueuesResult: + that1 = t + case IsVersionMissingTaskQueuesResult: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + // Marshal an object of type WorkerDeploymentWorkflowMemo to the protobuf v3 wire format func (val *WorkerDeploymentWorkflowMemo) Marshal() ([]byte, error) { return proto.Marshal(val) diff --git a/api/deployment/v1/message.pb.go b/api/deployment/v1/message.pb.go index 63a1dcdd0a2..f2cbdf5ef23 100644 --- a/api/deployment/v1/message.pb.go +++ b/api/deployment/v1/message.pb.go @@ -1146,8 +1146,9 @@ type SetCurrentVersionArgs struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + IgnoreMissingTaskQueues bool `protobuf:"varint,3,opt,name=ignore_missing_task_queues,json=ignoreMissingTaskQueues,proto3" json:"ignore_missing_task_queues,omitempty"` } func (x *SetCurrentVersionArgs) Reset() { @@ -1196,6 +1197,13 @@ func (x *SetCurrentVersionArgs) GetVersion() string { return "" } +func (x *SetCurrentVersionArgs) GetIgnoreMissingTaskQueues() bool { + if x != nil { + return x.IgnoreMissingTaskQueues + } + return false +} + // used as Worker Deployment update response: type SetCurrentVersionResponse struct { state protoimpl.MessageState @@ -1378,8 +1386,8 @@ type CheckTaskQueuesHaveNoPollersActivityArgs struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TaskQueues []*v12.TaskQueue `protobuf:"bytes,1,rep,name=task_queues,json=taskQueues,proto3" json:"task_queues,omitempty"` - BuildId string `protobuf:"bytes,3,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + TaskQueues []*v12.TaskQueue `protobuf:"bytes,1,rep,name=task_queues,json=taskQueues,proto3" json:"task_queues,omitempty"` + WorkerDeploymentVersion *WorkerDeploymentVersion `protobuf:"bytes,2,opt,name=worker_deployment_version,json=workerDeploymentVersion,proto3" json:"worker_deployment_version,omitempty"` } func (x *CheckTaskQueuesHaveNoPollersActivityArgs) Reset() { @@ -1421,11 +1429,11 @@ func (x *CheckTaskQueuesHaveNoPollersActivityArgs) GetTaskQueues() []*v12.TaskQu return nil } -func (x *CheckTaskQueuesHaveNoPollersActivityArgs) GetBuildId() string { +func (x *CheckTaskQueuesHaveNoPollersActivityArgs) GetWorkerDeploymentVersion() *WorkerDeploymentVersion { if x != nil { - return x.BuildId + return x.WorkerDeploymentVersion } - return "" + return nil } // used as Worker Deployment workflow update input: @@ -1546,9 +1554,10 @@ type SetRampingVersionArgs struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Percentage float32 `protobuf:"fixed32,3,opt,name=percentage,proto3" json:"percentage,omitempty"` + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Percentage float32 `protobuf:"fixed32,3,opt,name=percentage,proto3" json:"percentage,omitempty"` + IgnoreMissingTaskQueues bool `protobuf:"varint,4,opt,name=ignore_missing_task_queues,json=ignoreMissingTaskQueues,proto3" json:"ignore_missing_task_queues,omitempty"` } func (x *SetRampingVersionArgs) Reset() { @@ -1604,6 +1613,13 @@ func (x *SetRampingVersionArgs) GetPercentage() float32 { return 0 } +func (x *SetRampingVersionArgs) GetIgnoreMissingTaskQueues() bool { + if x != nil { + return x.IgnoreMissingTaskQueues + } + return false +} + // used as Worker Deployment activity input: type SyncVersionStateActivityArgs struct { state protoimpl.MessageState @@ -1725,6 +1741,110 @@ func (x *SyncVersionStateActivityResult) GetVersionState() *VersionLocalState { return nil } +// used as Worker Deployment activity input: +type IsVersionMissingTaskQueuesArgs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PrevCurrentVersion string `protobuf:"bytes,1,opt,name=prev_current_version,json=prevCurrentVersion,proto3" json:"prev_current_version,omitempty"` + NewCurrentVersion string `protobuf:"bytes,2,opt,name=new_current_version,json=newCurrentVersion,proto3" json:"new_current_version,omitempty"` +} + +func (x *IsVersionMissingTaskQueuesArgs) Reset() { + *x = IsVersionMissingTaskQueuesArgs{} + if protoimpl.UnsafeEnabled { + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsVersionMissingTaskQueuesArgs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsVersionMissingTaskQueuesArgs) ProtoMessage() {} + +func (x *IsVersionMissingTaskQueuesArgs) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsVersionMissingTaskQueuesArgs.ProtoReflect.Descriptor instead. +func (*IsVersionMissingTaskQueuesArgs) Descriptor() ([]byte, []int) { + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{26} +} + +func (x *IsVersionMissingTaskQueuesArgs) GetPrevCurrentVersion() string { + if x != nil { + return x.PrevCurrentVersion + } + return "" +} + +func (x *IsVersionMissingTaskQueuesArgs) GetNewCurrentVersion() string { + if x != nil { + return x.NewCurrentVersion + } + return "" +} + +// used as Worker Deployment activity output: +type IsVersionMissingTaskQueuesResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsMissingTaskQueues bool `protobuf:"varint,1,opt,name=is_missing_task_queues,json=isMissingTaskQueues,proto3" json:"is_missing_task_queues,omitempty"` +} + +func (x *IsVersionMissingTaskQueuesResult) Reset() { + *x = IsVersionMissingTaskQueuesResult{} + if protoimpl.UnsafeEnabled { + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsVersionMissingTaskQueuesResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsVersionMissingTaskQueuesResult) ProtoMessage() {} + +func (x *IsVersionMissingTaskQueuesResult) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsVersionMissingTaskQueuesResult.ProtoReflect.Descriptor instead. +func (*IsVersionMissingTaskQueuesResult) Descriptor() ([]byte, []int) { + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{27} +} + +func (x *IsVersionMissingTaskQueuesResult) GetIsMissingTaskQueues() bool { + if x != nil { + return x.IsMissingTaskQueues + } + return false +} + // used as Worker Deployment workflow memo: type WorkerDeploymentWorkflowMemo struct { state protoimpl.MessageState @@ -1739,7 +1859,7 @@ type WorkerDeploymentWorkflowMemo struct { func (x *WorkerDeploymentWorkflowMemo) Reset() { *x = WorkerDeploymentWorkflowMemo{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1752,7 +1872,7 @@ func (x *WorkerDeploymentWorkflowMemo) String() string { func (*WorkerDeploymentWorkflowMemo) ProtoMessage() {} func (x *WorkerDeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1765,7 +1885,7 @@ func (x *WorkerDeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentWorkflowMemo.ProtoReflect.Descriptor instead. func (*WorkerDeploymentWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{26} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{28} } func (x *WorkerDeploymentWorkflowMemo) GetDeploymentName() string { @@ -1803,7 +1923,7 @@ type WorkerDeploymentSummary struct { func (x *WorkerDeploymentSummary) Reset() { *x = WorkerDeploymentSummary{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1816,7 +1936,7 @@ func (x *WorkerDeploymentSummary) String() string { func (*WorkerDeploymentSummary) ProtoMessage() {} func (x *WorkerDeploymentSummary) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1829,7 +1949,7 @@ func (x *WorkerDeploymentSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentSummary.ProtoReflect.Descriptor instead. func (*WorkerDeploymentSummary) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{27} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{29} } func (x *WorkerDeploymentSummary) GetName() string { @@ -1868,7 +1988,7 @@ type AddVersionToWorkerDeploymentRequest struct { func (x *AddVersionToWorkerDeploymentRequest) Reset() { *x = AddVersionToWorkerDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1881,7 +2001,7 @@ func (x *AddVersionToWorkerDeploymentRequest) String() string { func (*AddVersionToWorkerDeploymentRequest) ProtoMessage() {} func (x *AddVersionToWorkerDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1894,7 +2014,7 @@ func (x *AddVersionToWorkerDeploymentRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use AddVersionToWorkerDeploymentRequest.ProtoReflect.Descriptor instead. func (*AddVersionToWorkerDeploymentRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{28} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{30} } func (x *AddVersionToWorkerDeploymentRequest) GetDeploymentName() string { @@ -1928,7 +2048,7 @@ type AddVersionToWorkerDeploymentResponse struct { func (x *AddVersionToWorkerDeploymentResponse) Reset() { *x = AddVersionToWorkerDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1941,7 +2061,7 @@ func (x *AddVersionToWorkerDeploymentResponse) String() string { func (*AddVersionToWorkerDeploymentResponse) ProtoMessage() {} func (x *AddVersionToWorkerDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1954,7 +2074,7 @@ func (x *AddVersionToWorkerDeploymentResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use AddVersionToWorkerDeploymentResponse.ProtoReflect.Descriptor instead. func (*AddVersionToWorkerDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{29} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{31} } // //////////////////////////////////////////////////////////////////////// @@ -1974,7 +2094,7 @@ type TaskQueueData struct { func (x *TaskQueueData) Reset() { *x = TaskQueueData{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +2107,7 @@ func (x *TaskQueueData) String() string { func (*TaskQueueData) ProtoMessage() {} func (x *TaskQueueData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +2120,7 @@ func (x *TaskQueueData) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskQueueData.ProtoReflect.Descriptor instead. func (*TaskQueueData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{30} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{32} } func (x *TaskQueueData) GetFirstPollerTime() *timestamppb.Timestamp { @@ -2034,7 +2154,7 @@ type DeploymentLocalState struct { func (x *DeploymentLocalState) Reset() { *x = DeploymentLocalState{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2047,7 +2167,7 @@ func (x *DeploymentLocalState) String() string { func (*DeploymentLocalState) ProtoMessage() {} func (x *DeploymentLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2060,7 +2180,7 @@ func (x *DeploymentLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentLocalState.ProtoReflect.Descriptor instead. func (*DeploymentLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{31} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33} } func (x *DeploymentLocalState) GetDeployment() *v1.Deployment { @@ -2126,7 +2246,7 @@ type DeploymentWorkflowArgs struct { func (x *DeploymentWorkflowArgs) Reset() { *x = DeploymentWorkflowArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2139,7 +2259,7 @@ func (x *DeploymentWorkflowArgs) String() string { func (*DeploymentWorkflowArgs) ProtoMessage() {} func (x *DeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2152,7 +2272,7 @@ func (x *DeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentWorkflowArgs.ProtoReflect.Descriptor instead. func (*DeploymentWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{32} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{34} } func (x *DeploymentWorkflowArgs) GetNamespaceName() string { @@ -2191,7 +2311,7 @@ type DeploymentSeriesWorkflowArgs struct { func (x *DeploymentSeriesWorkflowArgs) Reset() { *x = DeploymentSeriesWorkflowArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2204,7 +2324,7 @@ func (x *DeploymentSeriesWorkflowArgs) String() string { func (*DeploymentSeriesWorkflowArgs) ProtoMessage() {} func (x *DeploymentSeriesWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2217,7 +2337,7 @@ func (x *DeploymentSeriesWorkflowArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentSeriesWorkflowArgs.ProtoReflect.Descriptor instead. func (*DeploymentSeriesWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{35} } func (x *DeploymentSeriesWorkflowArgs) GetNamespaceName() string { @@ -2260,7 +2380,7 @@ type SeriesLocalState struct { func (x *SeriesLocalState) Reset() { *x = SeriesLocalState{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2273,7 +2393,7 @@ func (x *SeriesLocalState) String() string { func (*SeriesLocalState) ProtoMessage() {} func (x *SeriesLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2286,7 +2406,7 @@ func (x *SeriesLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use SeriesLocalState.ProtoReflect.Descriptor instead. func (*SeriesLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{34} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{36} } func (x *SeriesLocalState) GetCurrentBuildId() string { @@ -2318,7 +2438,7 @@ type RegisterWorkerInDeploymentArgs struct { func (x *RegisterWorkerInDeploymentArgs) Reset() { *x = RegisterWorkerInDeploymentArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2331,7 +2451,7 @@ func (x *RegisterWorkerInDeploymentArgs) String() string { func (*RegisterWorkerInDeploymentArgs) ProtoMessage() {} func (x *RegisterWorkerInDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2344,7 +2464,7 @@ func (x *RegisterWorkerInDeploymentArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterWorkerInDeploymentArgs.ProtoReflect.Descriptor instead. func (*RegisterWorkerInDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{35} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{37} } func (x *RegisterWorkerInDeploymentArgs) GetTaskQueueName() string { @@ -2390,7 +2510,7 @@ type SyncDeploymentStateArgs struct { func (x *SyncDeploymentStateArgs) Reset() { *x = SyncDeploymentStateArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2403,7 +2523,7 @@ func (x *SyncDeploymentStateArgs) String() string { func (*SyncDeploymentStateArgs) ProtoMessage() {} func (x *SyncDeploymentStateArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2416,7 +2536,7 @@ func (x *SyncDeploymentStateArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateArgs.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{36} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{38} } func (x *SyncDeploymentStateArgs) GetSetCurrent() *SyncDeploymentStateArgs_SetCurrent { @@ -2445,7 +2565,7 @@ type SyncDeploymentStateResponse struct { func (x *SyncDeploymentStateResponse) Reset() { *x = SyncDeploymentStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2458,7 +2578,7 @@ func (x *SyncDeploymentStateResponse) String() string { func (*SyncDeploymentStateResponse) ProtoMessage() {} func (x *SyncDeploymentStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2471,7 +2591,7 @@ func (x *SyncDeploymentStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateResponse.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{37} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{39} } func (x *SyncDeploymentStateResponse) GetDeploymentLocalState() *DeploymentLocalState { @@ -2493,7 +2613,7 @@ type QueryDescribeDeploymentResponse struct { func (x *QueryDescribeDeploymentResponse) Reset() { *x = QueryDescribeDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2506,7 +2626,7 @@ func (x *QueryDescribeDeploymentResponse) String() string { func (*QueryDescribeDeploymentResponse) ProtoMessage() {} func (x *QueryDescribeDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2519,7 +2639,7 @@ func (x *QueryDescribeDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryDescribeDeploymentResponse.ProtoReflect.Descriptor instead. func (*QueryDescribeDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{38} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{40} } func (x *QueryDescribeDeploymentResponse) GetDeploymentLocalState() *DeploymentLocalState { @@ -2543,7 +2663,7 @@ type DeploymentWorkflowMemo struct { func (x *DeploymentWorkflowMemo) Reset() { *x = DeploymentWorkflowMemo{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2556,7 +2676,7 @@ func (x *DeploymentWorkflowMemo) String() string { func (*DeploymentWorkflowMemo) ProtoMessage() {} func (x *DeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2569,7 +2689,7 @@ func (x *DeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentWorkflowMemo.ProtoReflect.Descriptor instead. func (*DeploymentWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{39} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{41} } func (x *DeploymentWorkflowMemo) GetDeployment() *v1.Deployment { @@ -2606,7 +2726,7 @@ type StartDeploymentSeriesRequest struct { func (x *StartDeploymentSeriesRequest) Reset() { *x = StartDeploymentSeriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2619,7 +2739,7 @@ func (x *StartDeploymentSeriesRequest) String() string { func (*StartDeploymentSeriesRequest) ProtoMessage() {} func (x *StartDeploymentSeriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2632,7 +2752,7 @@ func (x *StartDeploymentSeriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartDeploymentSeriesRequest.ProtoReflect.Descriptor instead. func (*StartDeploymentSeriesRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{40} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{42} } func (x *StartDeploymentSeriesRequest) GetSeriesName() string { @@ -2662,7 +2782,7 @@ type SyncUserDataRequest struct { func (x *SyncUserDataRequest) Reset() { *x = SyncUserDataRequest{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2675,7 +2795,7 @@ func (x *SyncUserDataRequest) String() string { func (*SyncUserDataRequest) ProtoMessage() {} func (x *SyncUserDataRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2688,7 +2808,7 @@ func (x *SyncUserDataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataRequest.ProtoReflect.Descriptor instead. func (*SyncUserDataRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{41} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{43} } func (x *SyncUserDataRequest) GetDeployment() *v1.Deployment { @@ -2717,7 +2837,7 @@ type SyncUserDataResponse struct { func (x *SyncUserDataResponse) Reset() { *x = SyncUserDataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2730,7 +2850,7 @@ func (x *SyncUserDataResponse) String() string { func (*SyncUserDataResponse) ProtoMessage() {} func (x *SyncUserDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2743,7 +2863,7 @@ func (x *SyncUserDataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataResponse.ProtoReflect.Descriptor instead. func (*SyncUserDataResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{42} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{44} } func (x *SyncUserDataResponse) GetTaskQueueMaxVersions() map[string]int64 { @@ -2765,7 +2885,7 @@ type CheckUserDataPropagationRequest struct { func (x *CheckUserDataPropagationRequest) Reset() { *x = CheckUserDataPropagationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2778,7 +2898,7 @@ func (x *CheckUserDataPropagationRequest) String() string { func (*CheckUserDataPropagationRequest) ProtoMessage() {} func (x *CheckUserDataPropagationRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2791,7 +2911,7 @@ func (x *CheckUserDataPropagationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckUserDataPropagationRequest.ProtoReflect.Descriptor instead. func (*CheckUserDataPropagationRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{43} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{45} } func (x *CheckUserDataPropagationRequest) GetTaskQueueMaxVersions() map[string]int64 { @@ -2816,7 +2936,7 @@ type SetCurrentDeploymentArgs struct { func (x *SetCurrentDeploymentArgs) Reset() { *x = SetCurrentDeploymentArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2829,7 +2949,7 @@ func (x *SetCurrentDeploymentArgs) String() string { func (*SetCurrentDeploymentArgs) ProtoMessage() {} func (x *SetCurrentDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2842,7 +2962,7 @@ func (x *SetCurrentDeploymentArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentDeploymentArgs.ProtoReflect.Descriptor instead. func (*SetCurrentDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{44} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{46} } func (x *SetCurrentDeploymentArgs) GetIdentity() string { @@ -2886,7 +3006,7 @@ type SetCurrentDeploymentResponse struct { func (x *SetCurrentDeploymentResponse) Reset() { *x = SetCurrentDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2899,7 +3019,7 @@ func (x *SetCurrentDeploymentResponse) String() string { func (*SetCurrentDeploymentResponse) ProtoMessage() {} func (x *SetCurrentDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2912,7 +3032,7 @@ func (x *SetCurrentDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentDeploymentResponse.ProtoReflect.Descriptor instead. func (*SetCurrentDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{45} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47} } func (x *SetCurrentDeploymentResponse) GetCurrentDeploymentState() *DeploymentLocalState { @@ -2943,7 +3063,7 @@ type SyncDeploymentStateActivityArgs struct { func (x *SyncDeploymentStateActivityArgs) Reset() { *x = SyncDeploymentStateActivityArgs{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2956,7 +3076,7 @@ func (x *SyncDeploymentStateActivityArgs) String() string { func (*SyncDeploymentStateActivityArgs) ProtoMessage() {} func (x *SyncDeploymentStateActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2969,7 +3089,7 @@ func (x *SyncDeploymentStateActivityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateActivityArgs.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{46} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48} } func (x *SyncDeploymentStateActivityArgs) GetDeployment() *v1.Deployment { @@ -3005,7 +3125,7 @@ type SyncDeploymentStateActivityResult struct { func (x *SyncDeploymentStateActivityResult) Reset() { *x = SyncDeploymentStateActivityResult{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3018,7 +3138,7 @@ func (x *SyncDeploymentStateActivityResult) String() string { func (*SyncDeploymentStateActivityResult) ProtoMessage() {} func (x *SyncDeploymentStateActivityResult) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3031,7 +3151,7 @@ func (x *SyncDeploymentStateActivityResult) ProtoReflect() protoreflect.Message // Deprecated: Use SyncDeploymentStateActivityResult.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateActivityResult) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{49} } func (x *SyncDeploymentStateActivityResult) GetState() *DeploymentLocalState { @@ -3055,7 +3175,7 @@ type DeploymentSeriesWorkflowMemo struct { func (x *DeploymentSeriesWorkflowMemo) Reset() { *x = DeploymentSeriesWorkflowMemo{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3068,7 +3188,7 @@ func (x *DeploymentSeriesWorkflowMemo) String() string { func (*DeploymentSeriesWorkflowMemo) ProtoMessage() {} func (x *DeploymentSeriesWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,7 +3201,7 @@ func (x *DeploymentSeriesWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentSeriesWorkflowMemo.ProtoReflect.Descriptor instead. func (*DeploymentSeriesWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{50} } func (x *DeploymentSeriesWorkflowMemo) GetSeriesName() string { @@ -3119,7 +3239,7 @@ type VersionLocalState_TaskQueueFamilyData struct { func (x *VersionLocalState_TaskQueueFamilyData) Reset() { *x = VersionLocalState_TaskQueueFamilyData{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3132,7 +3252,7 @@ func (x *VersionLocalState_TaskQueueFamilyData) String() string { func (*VersionLocalState_TaskQueueFamilyData) ProtoMessage() {} func (x *VersionLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3168,7 +3288,7 @@ type SyncDeploymentVersionUserDataRequest_SyncUserData struct { func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) Reset() { *x = SyncDeploymentVersionUserDataRequest_SyncUserData{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3181,7 +3301,7 @@ func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) String() string { func (*SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoMessage() {} func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3232,7 +3352,7 @@ type DeploymentLocalState_TaskQueueFamilyData struct { func (x *DeploymentLocalState_TaskQueueFamilyData) Reset() { *x = DeploymentLocalState_TaskQueueFamilyData{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3245,7 +3365,7 @@ func (x *DeploymentLocalState_TaskQueueFamilyData) String() string { func (*DeploymentLocalState_TaskQueueFamilyData) ProtoMessage() {} func (x *DeploymentLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3258,7 +3378,7 @@ func (x *DeploymentLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.M // Deprecated: Use DeploymentLocalState_TaskQueueFamilyData.ProtoReflect.Descriptor instead. func (*DeploymentLocalState_TaskQueueFamilyData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{31, 2} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33, 2} } func (x *DeploymentLocalState_TaskQueueFamilyData) GetTaskQueues() map[int32]*TaskQueueData { @@ -3282,7 +3402,7 @@ type SyncDeploymentStateArgs_SetCurrent struct { func (x *SyncDeploymentStateArgs_SetCurrent) Reset() { *x = SyncDeploymentStateArgs_SetCurrent{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3295,7 +3415,7 @@ func (x *SyncDeploymentStateArgs_SetCurrent) String() string { func (*SyncDeploymentStateArgs_SetCurrent) ProtoMessage() {} func (x *SyncDeploymentStateArgs_SetCurrent) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3308,7 +3428,7 @@ func (x *SyncDeploymentStateArgs_SetCurrent) ProtoReflect() protoreflect.Message // Deprecated: Use SyncDeploymentStateArgs_SetCurrent.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateArgs_SetCurrent) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{36, 0} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{38, 0} } func (x *SyncDeploymentStateArgs_SetCurrent) GetLastBecameCurrentTime() *timestamppb.Timestamp { @@ -3331,7 +3451,7 @@ type SyncUserDataRequest_SyncUserData struct { func (x *SyncUserDataRequest_SyncUserData) Reset() { *x = SyncUserDataRequest_SyncUserData{} if protoimpl.UnsafeEnabled { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3344,7 +3464,7 @@ func (x *SyncUserDataRequest_SyncUserData) String() string { func (*SyncUserDataRequest_SyncUserData) ProtoMessage() {} func (x *SyncUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3357,7 +3477,7 @@ func (x *SyncUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataRequest_SyncUserData.ProtoReflect.Descriptor instead. func (*SyncUserDataRequest_SyncUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{41, 0} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{43, 0} } func (x *SyncUserDataRequest_SyncUserData) GetName() string { @@ -3398,707 +3518,735 @@ var file_temporal_server_api_deployment_v1_message_proto_rawDesc = []byte{ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x65, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1d, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd6, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd6, 0x03, 0x0a, 0x15, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x61, 0x6d, 0x70, 0x5f, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, - 0x72, 0x61, 0x6d, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xe4, 0x09, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x58, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x72, 0x61, 0x6d, 0x70, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x6e, 0x63, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x61, - 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x61, 0x6d, 0x70, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x58, 0x0a, 0x0d, + 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x61, 0x6d, 0x70, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x50, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0c, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x52, 0x0c, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x12, 0x42, 0x0a, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x02, 0x68, 0x00, 0x12, 0x7f, 0x0a, 0x13, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x02, 0x68, 0x00, 0x12, 0x7f, 0x0a, 0x13, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x11, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, - 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x96, 0x01, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x11, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, + 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x96, 0x01, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x62, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, - 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, - 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x95, 0x02, 0x0a, 0x13, 0x54, 0x61, 0x73, 0x6b, 0x51, + 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x95, 0x02, 0x0a, 0x13, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x7d, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, + 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x7f, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x52, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x52, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x01, 0x0a, 0x23, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, - 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, + 0x25, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf6, 0x01, - 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf6, + 0x01, 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, + 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x57, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x57, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd3, 0x01, 0x0a, 0x1a, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd3, 0x01, 0x0a, 0x1a, 0x57, + 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1e, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0x93, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x41, - 0x72, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x0f, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x2a, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, - 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0xb5, 0x02, 0x0a, - 0x1a, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, - 0x4c, 0x0a, 0x12, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6e, - 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x61, 0x6d, - 0x70, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x42, 0x02, 0x68, 0x00, 0x22, 0x79, 0x0a, 0x18, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, - 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x7d, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x22, 0x80, 0x01, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, - 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x61, 0x0a, - 0x13, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, - 0x65, 0x6d, 0x6f, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1d, - 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x6e, 0x0a, 0x1c, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd2, 0x03, 0x0a, 0x24, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x6c, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x54, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x02, 0x68, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x66, 0x6f, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x02, 0x68, 0x00, 0x1a, 0xb6, 0x01, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, - 0x68, 0x00, 0x22, 0x98, 0x02, 0x0a, 0x25, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x17, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x62, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, - 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, - 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, - 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, - 0x02, 0x0a, 0x2f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0xa7, 0x01, 0x0a, 0x17, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x6c, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1e, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0x93, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x41, 0x72, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x73, + 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, + 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, + 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x2a, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, + 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0xb5, 0x02, + 0x0a, 0x1a, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x6f, + 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, + 0x12, 0x4c, 0x0a, 0x12, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x69, + 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x61, + 0x6d, 0x70, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x79, 0x0a, 0x18, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x7d, 0x0a, 0x1c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, + 0x68, 0x00, 0x22, 0x80, 0x01, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, + 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x61, + 0x0a, 0x13, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, + 0x1d, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x6e, 0x0a, 0x1c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0xd2, 0x03, 0x0a, 0x24, 0x53, 0x79, 0x6e, 0x63, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, + 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x6c, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x54, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x68, - 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x55, - 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, - 0x22, 0x4a, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, + 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x02, 0x68, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x66, + 0x6f, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x02, 0x68, 0x00, 0x1a, 0xb6, 0x01, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3c, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, + 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x02, 0x68, 0x00, 0x22, 0x98, 0x02, 0x0a, 0x25, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x17, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x62, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, + 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xac, 0x02, 0x0a, 0x2f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0xa7, 0x01, 0x0a, 0x17, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x6c, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, + 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x96, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, + 0x00, 0x22, 0x4a, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x22, 0x51, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x22, 0xa9, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0x94, 0x01, 0x0a, 0x28, 0x43, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf1, 0x01, 0x0a, 0x28, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x48, 0x61, 0x76, 0x65, 0x4e, 0x6f, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, + 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, + 0x65, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x0a, 0x74, - 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1d, 0x0a, 0x08, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x36, 0x0a, 0x14, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, - 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x22, - 0xaa, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x52, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x33, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x12, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, - 0x02, 0x68, 0x00, 0x22, 0x79, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x12, 0x7a, 0x0a, 0x19, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, + 0x68, 0x00, 0x22, 0x36, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x22, 0xaa, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x52, + 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, + 0x12, 0x33, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x22, 0xba, 0x01, 0x0a, 0x15, + 0x53, 0x65, 0x74, 0x52, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, + 0x22, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, + 0x00, 0x12, 0x3f, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, + 0x67, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf0, + 0x01, 0x0a, 0x1c, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2b, + 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf0, 0x01, 0x0a, 0x1c, 0x53, 0x79, 0x6e, 0x63, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x62, - 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0x7f, - 0x0a, 0x1e, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5d, - 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xe2, 0x01, 0x0a, 0x1c, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, - 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x68, - 0x00, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, + 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65, 0x6d, 0x70, + 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0x7f, 0x0a, 0x1e, 0x53, 0x79, 0x6e, 0x63, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, + 0x8a, 0x01, 0x0a, 0x1e, 0x49, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x41, 0x72, 0x67, + 0x73, 0x12, 0x34, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, + 0x72, 0x65, 0x76, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x32, 0x0a, 0x13, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x6e, 0x65, 0x77, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x02, 0x68, 0x00, 0x22, 0x5b, 0x0a, 0x20, 0x49, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0xe2, 0x01, + 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x2b, 0x0a, + 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x42, 0x02, 0x68, 0x00, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x16, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x68, 0x00, 0x22, 0x93, 0x01, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, + 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x26, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x0d, + 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, 0x11, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, - 0x12, 0x54, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, - 0x68, 0x00, 0x22, 0x93, 0x01, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x1c, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x68, 0x00, 0x12, - 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, - 0x22, 0x26, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x70, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x54, 0x69, 0x6d, + 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, + 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x15, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xdd, 0x08, 0x0a, 0x14, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x11, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, + 0x69, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x65, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3a, 0x0a, 0x17, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x99, 0x01, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x65, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x0d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x39, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x91, 0x02, 0x0a, 0x13, 0x54, 0x61, + 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x80, 0x01, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, + 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x77, 0x0a, + 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xbd, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, + 0x68, 0x00, 0x12, 0x25, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xe4, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, + 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, + 0x02, 0x68, 0x00, 0x12, 0x23, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4e, 0x61, + 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, + 0x00, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, + 0x12, 0x50, 0x0a, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x96, + 0x02, 0x0a, 0x1e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x49, 0x6e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, + 0x2a, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x0f, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, - 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6c, 0x61, 0x73, 0x74, - 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x42, 0x02, 0x68, 0x00, 0x22, 0xdd, 0x08, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x4e, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, - 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x74, 0x61, 0x73, - 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x42, 0x02, - 0x68, 0x00, 0x12, 0x21, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, 0x61, 0x6d, - 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6c, - 0x61, 0x73, 0x74, 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x65, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2a, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x22, 0xcf, 0x02, 0x0a, 0x17, 0x53, 0x79, 0x6e, + 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, + 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, + 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x65, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, + 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x90, 0x01, 0x0a, 0x1b, 0x53, 0x79, + 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x14, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x94, 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x02, 0x68, 0x00, 0x1a, - 0x99, 0x01, 0x0a, 0x16, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x65, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, - 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x91, 0x02, 0x0a, 0x13, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x80, 0x01, 0x0a, 0x0b, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x5b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x46, - 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x77, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x4a, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbd, 0x01, 0x0a, 0x16, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x41, - 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, 0x0a, 0x0c, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, - 0x22, 0xe4, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, - 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x25, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x23, 0x0a, - 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, - 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x14, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x42, 0x02, 0x68, 0x00, 0x22, 0xdd, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x4a, + 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x36, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x13, 0x69, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x22, 0x66, 0x0a, 0x1c, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0xef, 0x02, 0x0a, 0x13, + 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x92, 0x01, 0x0a, 0x10, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x2c, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x14, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x96, 0x02, 0x0a, 0x1e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x0f, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x68, - 0x00, 0x12, 0x4a, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2a, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x42, - 0x02, 0x68, 0x00, 0x22, 0xcf, 0x02, 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x6a, 0x0a, - 0x0b, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, - 0x68, 0x00, 0x1a, 0x65, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x57, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x42, - 0x65, 0x63, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x22, 0x90, 0x01, 0x0a, 0x1b, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x71, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x14, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0x94, - 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x71, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x14, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xdd, - 0x01, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x4a, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, - 0x3f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x36, 0x0a, - 0x15, 0x69, 0x73, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, - 0x68, 0x00, 0x22, 0x66, 0x0a, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0xef, 0x02, 0x0a, 0x13, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x5b, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x02, 0x68, 0x00, 0x1a, 0xae, 0x01, 0x0a, - 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, - 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x48, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x42, 0x02, 0x68, 0x00, 0x22, 0xf6, 0x01, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x17, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x5b, 0x0a, 0x04, 0x73, 0x79, + 0x6e, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, + 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x02, + 0x68, 0x00, 0x1a, 0xae, 0x01, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x42, 0x02, 0x68, 0x00, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x22, 0xf6, 0x01, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, - 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x8c, 0x02, 0x0a, 0x1f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x97, 0x01, 0x0a, 0x17, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, + 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, + 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x42, 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xdf, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x1d, 0x0a, 0x08, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0x8e, 0x02, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x18, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x16, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x77, 0x0a, 0x19, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8c, 0x02, 0x0a, 0x1f, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x97, 0x01, 0x0a, 0x17, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, + 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x68, 0x00, 0x1a, 0x4f, 0x0a, 0x19, 0x54, 0x61, + 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x02, 0x68, 0x00, 0x12, 0x18, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x02, 0x68, 0x00, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdf, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x02, 0x68, + 0x00, 0x12, 0x1d, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, + 0x61, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 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, 0x42, 0x02, 0x68, 0x00, 0x22, 0x8e, + 0x02, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, + 0x18, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x16, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x77, + 0x0a, 0x19, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x17, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, + 0x00, 0x22, 0xe4, 0x01, 0x0a, 0x1f, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x02, 0x68, 0x00, 0x12, 0x52, 0x0a, 0x04, 0x61, + 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x17, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xe4, 0x01, 0x0a, 0x1f, 0x53, - 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x4a, 0x0a, 0x0a, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x52, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, - 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x76, 0x0a, 0x21, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xc3, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x23, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x12, 0x2c, 0x0a, 0x10, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, - 0x02, 0x68, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x6f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x6c, 0x2e, 0x69, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, + 0x73, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x42, 0x02, 0x68, 0x00, 0x12, 0x21, 0x0a, 0x0a, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x22, 0x76, 0x0a, 0x21, + 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x51, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x02, 0x68, 0x00, 0x22, 0xc3, + 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x23, 0x0a, + 0x0b, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, + 0x12, 0x2c, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x02, 0x68, 0x00, 0x12, 0x50, 0x0a, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x02, 0x68, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x6f, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x2e, 0x69, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4113,7 +4261,7 @@ func file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP() []byte { return file_temporal_server_api_deployment_v1_message_proto_rawDescData } -var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 63) +var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 65) var file_temporal_server_api_deployment_v1_message_proto_goTypes = []interface{}{ (*WorkerDeploymentVersion)(nil), // 0: temporal.server.api.deployment.v1.WorkerDeploymentVersion (*DeploymentVersionData)(nil), // 1: temporal.server.api.deployment.v1.DeploymentVersionData @@ -4141,136 +4289,139 @@ var file_temporal_server_api_deployment_v1_message_proto_goTypes = []interface{} (*SetRampingVersionArgs)(nil), // 23: temporal.server.api.deployment.v1.SetRampingVersionArgs (*SyncVersionStateActivityArgs)(nil), // 24: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs (*SyncVersionStateActivityResult)(nil), // 25: temporal.server.api.deployment.v1.SyncVersionStateActivityResult - (*WorkerDeploymentWorkflowMemo)(nil), // 26: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo - (*WorkerDeploymentSummary)(nil), // 27: temporal.server.api.deployment.v1.WorkerDeploymentSummary - (*AddVersionToWorkerDeploymentRequest)(nil), // 28: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest - (*AddVersionToWorkerDeploymentResponse)(nil), // 29: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentResponse - (*TaskQueueData)(nil), // 30: temporal.server.api.deployment.v1.TaskQueueData - (*DeploymentLocalState)(nil), // 31: temporal.server.api.deployment.v1.DeploymentLocalState - (*DeploymentWorkflowArgs)(nil), // 32: temporal.server.api.deployment.v1.DeploymentWorkflowArgs - (*DeploymentSeriesWorkflowArgs)(nil), // 33: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs - (*SeriesLocalState)(nil), // 34: temporal.server.api.deployment.v1.SeriesLocalState - (*RegisterWorkerInDeploymentArgs)(nil), // 35: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs - (*SyncDeploymentStateArgs)(nil), // 36: temporal.server.api.deployment.v1.SyncDeploymentStateArgs - (*SyncDeploymentStateResponse)(nil), // 37: temporal.server.api.deployment.v1.SyncDeploymentStateResponse - (*QueryDescribeDeploymentResponse)(nil), // 38: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse - (*DeploymentWorkflowMemo)(nil), // 39: temporal.server.api.deployment.v1.DeploymentWorkflowMemo - (*StartDeploymentSeriesRequest)(nil), // 40: temporal.server.api.deployment.v1.StartDeploymentSeriesRequest - (*SyncUserDataRequest)(nil), // 41: temporal.server.api.deployment.v1.SyncUserDataRequest - (*SyncUserDataResponse)(nil), // 42: temporal.server.api.deployment.v1.SyncUserDataResponse - (*CheckUserDataPropagationRequest)(nil), // 43: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest - (*SetCurrentDeploymentArgs)(nil), // 44: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs - (*SetCurrentDeploymentResponse)(nil), // 45: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse - (*SyncDeploymentStateActivityArgs)(nil), // 46: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs - (*SyncDeploymentStateActivityResult)(nil), // 47: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult - (*DeploymentSeriesWorkflowMemo)(nil), // 48: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo - nil, // 49: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry - (*VersionLocalState_TaskQueueFamilyData)(nil), // 50: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData - nil, // 51: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry - (*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 52: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData - nil, // 53: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry - nil, // 54: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry - nil, // 55: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry - nil, // 56: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry - (*DeploymentLocalState_TaskQueueFamilyData)(nil), // 57: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData - nil, // 58: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry - (*SyncDeploymentStateArgs_SetCurrent)(nil), // 59: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent - (*SyncUserDataRequest_SyncUserData)(nil), // 60: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData - nil, // 61: temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry - nil, // 62: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry - (*timestamppb.Timestamp)(nil), // 63: google.protobuf.Timestamp - (*v1.VersionDrainageInfo)(nil), // 64: temporal.api.deployment.v1.VersionDrainageInfo - (*v1.VersionMetadata)(nil), // 65: temporal.api.deployment.v1.VersionMetadata - (*v1.RoutingConfig)(nil), // 66: temporal.api.deployment.v1.RoutingConfig - (v11.TaskQueueType)(0), // 67: temporal.api.enums.v1.TaskQueueType - (*v12.TaskQueue)(nil), // 68: temporal.api.taskqueue.v1.TaskQueue - (*v1.Deployment)(nil), // 69: temporal.api.deployment.v1.Deployment - (*v1.UpdateDeploymentMetadata)(nil), // 70: temporal.api.deployment.v1.UpdateDeploymentMetadata - (*v13.Payload)(nil), // 71: temporal.api.common.v1.Payload + (*IsVersionMissingTaskQueuesArgs)(nil), // 26: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesArgs + (*IsVersionMissingTaskQueuesResult)(nil), // 27: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesResult + (*WorkerDeploymentWorkflowMemo)(nil), // 28: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo + (*WorkerDeploymentSummary)(nil), // 29: temporal.server.api.deployment.v1.WorkerDeploymentSummary + (*AddVersionToWorkerDeploymentRequest)(nil), // 30: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest + (*AddVersionToWorkerDeploymentResponse)(nil), // 31: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentResponse + (*TaskQueueData)(nil), // 32: temporal.server.api.deployment.v1.TaskQueueData + (*DeploymentLocalState)(nil), // 33: temporal.server.api.deployment.v1.DeploymentLocalState + (*DeploymentWorkflowArgs)(nil), // 34: temporal.server.api.deployment.v1.DeploymentWorkflowArgs + (*DeploymentSeriesWorkflowArgs)(nil), // 35: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs + (*SeriesLocalState)(nil), // 36: temporal.server.api.deployment.v1.SeriesLocalState + (*RegisterWorkerInDeploymentArgs)(nil), // 37: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs + (*SyncDeploymentStateArgs)(nil), // 38: temporal.server.api.deployment.v1.SyncDeploymentStateArgs + (*SyncDeploymentStateResponse)(nil), // 39: temporal.server.api.deployment.v1.SyncDeploymentStateResponse + (*QueryDescribeDeploymentResponse)(nil), // 40: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse + (*DeploymentWorkflowMemo)(nil), // 41: temporal.server.api.deployment.v1.DeploymentWorkflowMemo + (*StartDeploymentSeriesRequest)(nil), // 42: temporal.server.api.deployment.v1.StartDeploymentSeriesRequest + (*SyncUserDataRequest)(nil), // 43: temporal.server.api.deployment.v1.SyncUserDataRequest + (*SyncUserDataResponse)(nil), // 44: temporal.server.api.deployment.v1.SyncUserDataResponse + (*CheckUserDataPropagationRequest)(nil), // 45: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest + (*SetCurrentDeploymentArgs)(nil), // 46: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs + (*SetCurrentDeploymentResponse)(nil), // 47: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse + (*SyncDeploymentStateActivityArgs)(nil), // 48: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs + (*SyncDeploymentStateActivityResult)(nil), // 49: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult + (*DeploymentSeriesWorkflowMemo)(nil), // 50: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo + nil, // 51: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry + (*VersionLocalState_TaskQueueFamilyData)(nil), // 52: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData + nil, // 53: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry + (*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 54: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData + nil, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry + nil, // 56: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry + nil, // 57: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry + nil, // 58: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry + (*DeploymentLocalState_TaskQueueFamilyData)(nil), // 59: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData + nil, // 60: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry + (*SyncDeploymentStateArgs_SetCurrent)(nil), // 61: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent + (*SyncUserDataRequest_SyncUserData)(nil), // 62: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData + nil, // 63: temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry + nil, // 64: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry + (*timestamppb.Timestamp)(nil), // 65: google.protobuf.Timestamp + (*v1.VersionDrainageInfo)(nil), // 66: temporal.api.deployment.v1.VersionDrainageInfo + (*v1.VersionMetadata)(nil), // 67: temporal.api.deployment.v1.VersionMetadata + (*v1.RoutingConfig)(nil), // 68: temporal.api.deployment.v1.RoutingConfig + (v11.TaskQueueType)(0), // 69: temporal.api.enums.v1.TaskQueueType + (*v12.TaskQueue)(nil), // 70: temporal.api.taskqueue.v1.TaskQueue + (*v1.Deployment)(nil), // 71: temporal.api.deployment.v1.Deployment + (*v1.UpdateDeploymentMetadata)(nil), // 72: temporal.api.deployment.v1.UpdateDeploymentMetadata + (*v13.Payload)(nil), // 73: temporal.api.common.v1.Payload } var file_temporal_server_api_deployment_v1_message_proto_depIdxs = []int32{ 0, // 0: temporal.server.api.deployment.v1.DeploymentVersionData.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 63, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp - 63, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp - 63, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp - 63, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.first_poller_time:type_name -> google.protobuf.Timestamp + 65, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp + 65, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp + 65, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp + 65, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.first_poller_time:type_name -> google.protobuf.Timestamp 0, // 5: temporal.server.api.deployment.v1.VersionLocalState.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 63, // 6: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp - 63, // 7: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp - 63, // 8: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp - 63, // 9: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp - 64, // 10: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 65, // 11: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata - 49, // 12: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry + 65, // 6: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp + 65, // 7: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp + 65, // 8: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp + 65, // 9: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp + 66, // 10: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 67, // 11: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata + 51, // 12: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry 2, // 13: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState 5, // 14: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 63, // 15: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp - 66, // 16: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 67, // 17: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 63, // 18: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.first_poller_time:type_name -> google.protobuf.Timestamp - 63, // 19: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp - 63, // 20: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp - 63, // 21: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp + 65, // 15: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp + 68, // 16: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 69, // 17: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 65, // 18: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.first_poller_time:type_name -> google.protobuf.Timestamp + 65, // 19: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp + 65, // 20: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp + 65, // 21: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp 2, // 22: temporal.server.api.deployment.v1.SyncVersionStateResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState 2, // 23: temporal.server.api.deployment.v1.QueryDescribeVersionResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState 5, // 24: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState 0, // 25: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 52, // 26: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData - 53, // 27: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry - 54, // 28: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry - 68, // 29: temporal.server.api.deployment.v1.CheckTaskQueuesHaveNoPollersActivityArgs.task_queues:type_name -> temporal.api.taskqueue.v1.TaskQueue - 7, // 30: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - 2, // 31: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 63, // 32: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp - 66, // 33: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 63, // 34: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp - 66, // 35: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 63, // 36: temporal.server.api.deployment.v1.TaskQueueData.first_poller_time:type_name -> google.protobuf.Timestamp - 63, // 37: temporal.server.api.deployment.v1.TaskQueueData.last_became_current_time:type_name -> google.protobuf.Timestamp - 69, // 38: temporal.server.api.deployment.v1.DeploymentLocalState.deployment:type_name -> temporal.api.deployment.v1.Deployment - 55, // 39: temporal.server.api.deployment.v1.DeploymentLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry - 63, // 40: temporal.server.api.deployment.v1.DeploymentLocalState.last_became_current_time:type_name -> google.protobuf.Timestamp - 63, // 41: temporal.server.api.deployment.v1.DeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp - 56, // 42: temporal.server.api.deployment.v1.DeploymentLocalState.metadata:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry - 31, // 43: temporal.server.api.deployment.v1.DeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 34, // 44: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.SeriesLocalState - 63, // 45: temporal.server.api.deployment.v1.SeriesLocalState.current_changed_time:type_name -> google.protobuf.Timestamp - 67, // 46: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 63, // 47: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.first_poller_time:type_name -> google.protobuf.Timestamp - 59, // 48: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.set_current:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent - 70, // 49: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata - 31, // 50: temporal.server.api.deployment.v1.SyncDeploymentStateResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 31, // 51: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 69, // 52: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.deployment:type_name -> temporal.api.deployment.v1.Deployment - 63, // 53: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp - 69, // 54: temporal.server.api.deployment.v1.SyncUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment - 60, // 55: temporal.server.api.deployment.v1.SyncUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData - 61, // 56: temporal.server.api.deployment.v1.SyncUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry - 62, // 57: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry - 70, // 58: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata - 31, // 59: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.current_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 31, // 60: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.previous_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 69, // 61: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.deployment:type_name -> temporal.api.deployment.v1.Deployment - 36, // 62: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.args:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs - 31, // 63: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 63, // 64: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo.current_changed_time:type_name -> google.protobuf.Timestamp - 50, // 65: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData - 51, // 66: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry - 1, // 67: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 67, // 68: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType - 1, // 69: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 57, // 70: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData - 71, // 71: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry.value:type_name -> temporal.api.common.v1.Payload - 58, // 72: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry - 30, // 73: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 63, // 74: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent.last_became_current_time:type_name -> google.protobuf.Timestamp - 67, // 75: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType - 30, // 76: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 77, // [77:77] is the sub-list for method output_type - 77, // [77:77] is the sub-list for method input_type - 77, // [77:77] is the sub-list for extension type_name - 77, // [77:77] is the sub-list for extension extendee - 0, // [0:77] is the sub-list for field type_name + 54, // 26: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData + 55, // 27: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry + 56, // 28: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry + 70, // 29: temporal.server.api.deployment.v1.CheckTaskQueuesHaveNoPollersActivityArgs.task_queues:type_name -> temporal.api.taskqueue.v1.TaskQueue + 0, // 30: temporal.server.api.deployment.v1.CheckTaskQueuesHaveNoPollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 7, // 31: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + 2, // 32: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 65, // 33: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp + 68, // 34: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 65, // 35: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp + 68, // 36: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 65, // 37: temporal.server.api.deployment.v1.TaskQueueData.first_poller_time:type_name -> google.protobuf.Timestamp + 65, // 38: temporal.server.api.deployment.v1.TaskQueueData.last_became_current_time:type_name -> google.protobuf.Timestamp + 71, // 39: temporal.server.api.deployment.v1.DeploymentLocalState.deployment:type_name -> temporal.api.deployment.v1.Deployment + 57, // 40: temporal.server.api.deployment.v1.DeploymentLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry + 65, // 41: temporal.server.api.deployment.v1.DeploymentLocalState.last_became_current_time:type_name -> google.protobuf.Timestamp + 65, // 42: temporal.server.api.deployment.v1.DeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp + 58, // 43: temporal.server.api.deployment.v1.DeploymentLocalState.metadata:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry + 33, // 44: temporal.server.api.deployment.v1.DeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 36, // 45: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.SeriesLocalState + 65, // 46: temporal.server.api.deployment.v1.SeriesLocalState.current_changed_time:type_name -> google.protobuf.Timestamp + 69, // 47: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 65, // 48: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.first_poller_time:type_name -> google.protobuf.Timestamp + 61, // 49: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.set_current:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent + 72, // 50: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata + 33, // 51: temporal.server.api.deployment.v1.SyncDeploymentStateResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 33, // 52: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 71, // 53: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.deployment:type_name -> temporal.api.deployment.v1.Deployment + 65, // 54: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp + 71, // 55: temporal.server.api.deployment.v1.SyncUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment + 62, // 56: temporal.server.api.deployment.v1.SyncUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData + 63, // 57: temporal.server.api.deployment.v1.SyncUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry + 64, // 58: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry + 72, // 59: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata + 33, // 60: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.current_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 33, // 61: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.previous_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 71, // 62: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.deployment:type_name -> temporal.api.deployment.v1.Deployment + 38, // 63: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.args:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs + 33, // 64: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 65, // 65: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo.current_changed_time:type_name -> google.protobuf.Timestamp + 52, // 66: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData + 53, // 67: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry + 1, // 68: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 69, // 69: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType + 1, // 70: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 59, // 71: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData + 73, // 72: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry.value:type_name -> temporal.api.common.v1.Payload + 60, // 73: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry + 32, // 74: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 65, // 75: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent.last_became_current_time:type_name -> google.protobuf.Timestamp + 69, // 76: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType + 32, // 77: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 78, // [78:78] is the sub-list for method output_type + 78, // [78:78] is the sub-list for method input_type + 78, // [78:78] is the sub-list for extension type_name + 78, // [78:78] is the sub-list for extension extendee + 0, // [0:78] is the sub-list for field type_name } func init() { file_temporal_server_api_deployment_v1_message_proto_init() } @@ -4592,7 +4743,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkerDeploymentWorkflowMemo); i { + switch v := v.(*IsVersionMissingTaskQueuesArgs); i { case 0: return &v.state case 1: @@ -4604,7 +4755,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkerDeploymentSummary); i { + switch v := v.(*IsVersionMissingTaskQueuesResult); i { case 0: return &v.state case 1: @@ -4616,7 +4767,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddVersionToWorkerDeploymentRequest); i { + switch v := v.(*WorkerDeploymentWorkflowMemo); i { case 0: return &v.state case 1: @@ -4628,7 +4779,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddVersionToWorkerDeploymentResponse); i { + switch v := v.(*WorkerDeploymentSummary); i { case 0: return &v.state case 1: @@ -4640,7 +4791,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskQueueData); i { + switch v := v.(*AddVersionToWorkerDeploymentRequest); i { case 0: return &v.state case 1: @@ -4652,7 +4803,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentLocalState); i { + switch v := v.(*AddVersionToWorkerDeploymentResponse); i { case 0: return &v.state case 1: @@ -4664,7 +4815,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentWorkflowArgs); i { + switch v := v.(*TaskQueueData); i { case 0: return &v.state case 1: @@ -4676,7 +4827,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentSeriesWorkflowArgs); i { + switch v := v.(*DeploymentLocalState); i { case 0: return &v.state case 1: @@ -4688,7 +4839,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SeriesLocalState); i { + switch v := v.(*DeploymentWorkflowArgs); i { case 0: return &v.state case 1: @@ -4700,7 +4851,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterWorkerInDeploymentArgs); i { + switch v := v.(*DeploymentSeriesWorkflowArgs); i { case 0: return &v.state case 1: @@ -4712,7 +4863,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncDeploymentStateArgs); i { + switch v := v.(*SeriesLocalState); i { case 0: return &v.state case 1: @@ -4724,7 +4875,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncDeploymentStateResponse); i { + switch v := v.(*RegisterWorkerInDeploymentArgs); i { case 0: return &v.state case 1: @@ -4736,7 +4887,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryDescribeDeploymentResponse); i { + switch v := v.(*SyncDeploymentStateArgs); i { case 0: return &v.state case 1: @@ -4748,7 +4899,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentWorkflowMemo); i { + switch v := v.(*SyncDeploymentStateResponse); i { case 0: return &v.state case 1: @@ -4760,7 +4911,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartDeploymentSeriesRequest); i { + switch v := v.(*QueryDescribeDeploymentResponse); i { case 0: return &v.state case 1: @@ -4772,7 +4923,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncUserDataRequest); i { + switch v := v.(*DeploymentWorkflowMemo); i { case 0: return &v.state case 1: @@ -4784,7 +4935,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncUserDataResponse); i { + switch v := v.(*StartDeploymentSeriesRequest); i { case 0: return &v.state case 1: @@ -4796,7 +4947,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckUserDataPropagationRequest); i { + switch v := v.(*SyncUserDataRequest); i { case 0: return &v.state case 1: @@ -4808,7 +4959,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetCurrentDeploymentArgs); i { + switch v := v.(*SyncUserDataResponse); i { case 0: return &v.state case 1: @@ -4820,7 +4971,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetCurrentDeploymentResponse); i { + switch v := v.(*CheckUserDataPropagationRequest); i { case 0: return &v.state case 1: @@ -4832,7 +4983,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncDeploymentStateActivityArgs); i { + switch v := v.(*SetCurrentDeploymentArgs); i { case 0: return &v.state case 1: @@ -4844,7 +4995,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncDeploymentStateActivityResult); i { + switch v := v.(*SetCurrentDeploymentResponse); i { case 0: return &v.state case 1: @@ -4856,7 +5007,19 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentSeriesWorkflowMemo); i { + switch v := v.(*SyncDeploymentStateActivityArgs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_temporal_server_api_deployment_v1_message_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncDeploymentStateActivityResult); i { case 0: return &v.state case 1: @@ -4868,7 +5031,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionLocalState_TaskQueueFamilyData); i { + switch v := v.(*DeploymentSeriesWorkflowMemo); i { case 0: return &v.state case 1: @@ -4880,6 +5043,18 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { } } file_temporal_server_api_deployment_v1_message_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VersionLocalState_TaskQueueFamilyData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_temporal_server_api_deployment_v1_message_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncDeploymentVersionUserDataRequest_SyncUserData); i { case 0: return &v.state @@ -4891,7 +5066,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { return nil } } - file_temporal_server_api_deployment_v1_message_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_temporal_server_api_deployment_v1_message_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeploymentLocalState_TaskQueueFamilyData); i { case 0: return &v.state @@ -4903,7 +5078,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { return nil } } - file_temporal_server_api_deployment_v1_message_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_temporal_server_api_deployment_v1_message_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncDeploymentStateArgs_SetCurrent); i { case 0: return &v.state @@ -4915,7 +5090,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { return nil } } - file_temporal_server_api_deployment_v1_message_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_temporal_server_api_deployment_v1_message_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncUserDataRequest_SyncUserData); i { case 0: return &v.state @@ -4934,7 +5109,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_temporal_server_api_deployment_v1_message_proto_rawDesc, NumEnums: 0, - NumMessages: 63, + NumMessages: 65, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/internal/temporal/server/api/deployment/v1/message.proto b/proto/internal/temporal/server/api/deployment/v1/message.proto index 427f46fbb11..1a89ee5cfcb 100644 --- a/proto/internal/temporal/server/api/deployment/v1/message.proto +++ b/proto/internal/temporal/server/api/deployment/v1/message.proto @@ -233,6 +233,7 @@ message CheckWorkerDeploymentUserDataPropagationRequest { message SetCurrentVersionArgs { string identity = 1; string version = 2; + bool ignore_missing_task_queues = 3; } // used as Worker Deployment update response: @@ -257,7 +258,7 @@ message DeleteVersionActivityArgs { // used as Worker Deployment Activity input: message CheckTaskQueuesHaveNoPollersActivityArgs { repeated temporal.api.taskqueue.v1.TaskQueue task_queues = 1; - string build_id = 3; + WorkerDeploymentVersion worker_deployment_version = 2; } // used as Worker Deployment workflow update input: @@ -277,6 +278,7 @@ message SetRampingVersionArgs { string identity = 1; string version = 2; float percentage = 3; + bool ignore_missing_task_queues = 4; } // used as Worker Deployment activity input: @@ -293,6 +295,17 @@ message SyncVersionStateActivityResult { VersionLocalState version_state = 1; } +// used as Worker Deployment activity input: +message IsVersionMissingTaskQueuesArgs { + string prev_current_version = 1; + string new_current_version = 2; +} + +// used as Worker Deployment activity output: +message IsVersionMissingTaskQueuesResult { + bool is_missing_task_queues = 1; +} + // used as Worker Deployment workflow memo: message WorkerDeploymentWorkflowMemo { string deployment_name = 1; diff --git a/service/frontend/workflow_handler.go b/service/frontend/workflow_handler.go index edf5d6ebdae..2dd9dd3ff87 100644 --- a/service/frontend/workflow_handler.go +++ b/service/frontend/workflow_handler.go @@ -3400,9 +3400,11 @@ func (wh *WorkflowHandler) SetWorkerDeploymentCurrentVersion(ctx context.Context return nil, err } - // TODO (Shivam): error out if build_ID is empty + if request.GetVersion() == "" { + return nil, serviceerror.NewInvalidArgument("version cannot be empty") + } - resp, err := wh.workerDeploymentClient.SetCurrentVersion(ctx, namespaceEntry, request.DeploymentName, request.Version, request.Identity) + resp, err := wh.workerDeploymentClient.SetCurrentVersion(ctx, namespaceEntry, request.DeploymentName, request.Version, request.Identity, request.IgnoreMissingTaskQueues) if err != nil { return nil, err } @@ -3434,7 +3436,7 @@ func (wh *WorkflowHandler) SetWorkerDeploymentRampingVersion(ctx context.Context if request.GetVersion() == "" { if request.GetPercentage() != 0 { - return nil, serviceerror.NewInvalidArgument("Empty value for build_id must be paired with percentage=0") + return nil, serviceerror.NewInvalidArgument("Empty value for version must be paired with percentage=0") } } @@ -3442,7 +3444,7 @@ func (wh *WorkflowHandler) SetWorkerDeploymentRampingVersion(ctx context.Context return nil, serviceerror.NewInvalidArgument("Percentage must be between 0 and 100 (inclusive)") } - resp, err := wh.workerDeploymentClient.SetRampingVersion(ctx, namespaceEntry, request.DeploymentName, request.Version, request.GetPercentage(), request.GetIdentity()) + resp, err := wh.workerDeploymentClient.SetRampingVersion(ctx, namespaceEntry, request.DeploymentName, request.Version, request.GetPercentage(), request.GetIdentity(), request.IgnoreMissingTaskQueues) if err != nil { return nil, err } diff --git a/service/matching/task_queue_partition_manager.go b/service/matching/task_queue_partition_manager.go index bf0f5c58f4a..703d006d1b9 100644 --- a/service/matching/task_queue_partition_manager.go +++ b/service/matching/task_queue_partition_manager.go @@ -521,30 +521,61 @@ func (pm *taskQueuePartitionManagerImpl) LegacyDescribeTaskQueue(includeTaskQueu return resp, nil } +// In order to accommodate the changes brought in by versioning-3.1, `buildIDs` will now also accept versionID's that represent worker-deployment versions. func (pm *taskQueuePartitionManagerImpl) Describe( ctx context.Context, buildIds map[string]bool, includeAllActive, reportStats, reportPollers, internalTaskQueueStatus bool) (*matchingservice.DescribeTaskQueuePartitionResponse, error) { pm.versionedQueuesLock.RLock() + + versions := make(map[PhysicalTaskQueueVersion]bool) + // Active means that the physical queue for that version is loaded. // An empty string refers to the unversioned queue, which is always loaded. // In the future, active will mean that the physical queue for that version has had a task added recently or a recent poller. if includeAllActive { for k := range pm.versionedQueues { - // TODO: add deployment info to DescribeTaskQueue - if b := k.BuildId(); b != "" { - buildIds[b] = true + versions[k] = true + } + } + + for b := range buildIds { + if b == "" { + versions[pm.defaultQueue.QueueKey().Version()] = true + } else { + found := false + for k := range pm.versionedQueues { + // Storing the versioned queue if the buildID is a v2 based buildID or a versionID representing a worker-deployment version. + if k.BuildId() == b || worker_versioning.WorkerDeploymentVersionToString(worker_versioning.DeploymentVersionFromDeployment(k.Deployment())) == b { + versions[k] = true + found = true + break + } + } + if !found { + // still add it as a v2 version because user explicitly asked for the stats, we'd + // make sure to load the TQ. + versions[PhysicalTaskQueueVersion{buildId: b}] = true } } } + pm.versionedQueuesLock.RUnlock() versionsInfo := make(map[string]*taskqueuespb.TaskQueueVersionInfoInternal, 0) - for bid := range buildIds { + for v := range versions { vInfo := &taskqueuespb.TaskQueueVersionInfoInternal{ PhysicalTaskQueueInfo: &taskqueuespb.PhysicalTaskQueueInfo{}, } - physicalQueue, err := pm.getPhysicalQueue(ctx, bid) + + // `getPhysicalQueue` always needs the right buildID passed to function correctly. If the version is a worker-deployment version and an empty buildID is passed, + // the function returns the default queue which is not what we want. + // The following assigns buildID to either a v2 based buildID or a buildID part of a worker-deployment version. + buildID := v.BuildId() + if v.Deployment() != nil { + buildID = v.Deployment().BuildId + } + physicalQueue, err := pm.getPhysicalQueue(ctx, buildID, v.Deployment()) if err != nil { return nil, err } @@ -557,6 +588,15 @@ func (pm *taskQueuePartitionManagerImpl) Describe( if internalTaskQueueStatus { vInfo.PhysicalTaskQueueInfo.InternalTaskQueueStatus = physicalQueue.GetInternalTaskQueueStatus() } + + // The following assigns buildID to either a v2 based buildID or a versionID representing a worker-deployment version. + // This is required to populate the right value inside the versionsInfo map. If a user is requesting information for a worker-deployment version, + // the full worker-deployment version string is used as an entry in the versionsInfo map. Moreover, to keep things backwards compatible, users requesting + // information for non-deployment related builds will only see the buildID as an entry in the versionsInfo map. + bid := v.BuildId() + if v.Deployment() != nil { + bid = worker_versioning.WorkerDeploymentVersionToString(worker_versioning.DeploymentVersionFromDeployment(v.Deployment())) + } versionsInfo[bid] = vInfo } @@ -678,11 +718,12 @@ func (pm *taskQueuePartitionManagerImpl) unloadFromEngine(unloadCause unloadCaus pm.engine.unloadTaskQueuePartition(pm, unloadCause) } -func (pm *taskQueuePartitionManagerImpl) getPhysicalQueue(ctx context.Context, buildId string) (physicalTaskQueueManager, error) { +func (pm *taskQueuePartitionManagerImpl) getPhysicalQueue(ctx context.Context, buildId string, deployment *deploymentpb.Deployment) (physicalTaskQueueManager, error) { if buildId == "" { return pm.defaultQueue, nil } - return pm.getVersionedQueue(ctx, "", buildId, nil, true) + + return pm.getVersionedQueue(ctx, "", buildId, deployment, true) } // Pass either versionSet or build ID @@ -979,12 +1020,12 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( return nil, nil, nil, err } } else { - syncMatchQueue, err = pm.getPhysicalQueue(ctx, redirectBuildId) + syncMatchQueue, err = pm.getPhysicalQueue(ctx, redirectBuildId, nil) if err != nil { return nil, nil, nil, err } // redirect rules are not applied when spooling a task. They'll be applied when dispatching the spool task. - spoolQueue, err = pm.getPhysicalQueue(ctx, buildId) + spoolQueue, err = pm.getPhysicalQueue(ctx, buildId, nil) if err != nil { return nil, nil, nil, err } diff --git a/service/worker/workerdeployment/activities.go b/service/worker/workerdeployment/activities.go index bac94d95ee3..be38a48b5ac 100644 --- a/service/worker/workerdeployment/activities.go +++ b/service/worker/workerdeployment/activities.go @@ -58,6 +58,21 @@ func (a *Activities) SyncWorkerDeploymentVersion(ctx context.Context, args *depl }, nil } +func (a *Activities) IsVersionMissingTaskQueues(ctx context.Context, args *deploymentspb.IsVersionMissingTaskQueuesArgs) (*deploymentspb.IsVersionMissingTaskQueuesResult, error) { + res, err := a.deploymentClient.IsVersionMissingTaskQueues( + ctx, + a.namespace, + args.PrevCurrentVersion, + args.NewCurrentVersion, + ) + if err != nil { + return nil, err + } + return &deploymentspb.IsVersionMissingTaskQueuesResult{ + IsMissingTaskQueues: res, + }, nil +} + func (a *Activities) DeleteWorkerDeploymentVersion(ctx context.Context, args *deploymentspb.DeleteVersionActivityArgs) error { identity := "worker-deployment workflow " + activity.GetInfo(ctx).WorkflowExecution.ID err := a.deploymentClient.DeleteVersionFromWorkerDeployment( diff --git a/service/worker/workerdeployment/client.go b/service/worker/workerdeployment/client.go index 88f035a94d1..24fbbad552a 100644 --- a/service/worker/workerdeployment/client.go +++ b/service/worker/workerdeployment/client.go @@ -30,6 +30,10 @@ import ( "fmt" "time" + "go.temporal.io/sdk/temporal" + + "go.temporal.io/api/workflowservice/v1" + "github.com/pborman/uuid" commonpb "go.temporal.io/api/common/v1" deploymentpb "go.temporal.io/api/deployment/v1" @@ -38,9 +42,9 @@ import ( "go.temporal.io/api/serviceerror" taskqueuepb "go.temporal.io/api/taskqueue/v1" updatepb "go.temporal.io/api/update/v1" - "go.temporal.io/api/workflowservice/v1" deploymentspb "go.temporal.io/server/api/deployment/v1" "go.temporal.io/server/api/historyservice/v1" + "go.temporal.io/server/api/matchingservice/v1" "go.temporal.io/server/common/backoff" "go.temporal.io/server/common/dynamicconfig" "go.temporal.io/server/common/log" @@ -49,6 +53,7 @@ import ( "go.temporal.io/server/common/payload" "go.temporal.io/server/common/persistence/visibility/manager" "go.temporal.io/server/common/primitives" + "go.temporal.io/server/common/resource" "go.temporal.io/server/common/sdk" "go.temporal.io/server/common/searchattribute" "go.temporal.io/server/common/worker_versioning" @@ -85,6 +90,7 @@ type Client interface { deploymentName string, version string, identity string, + ignoreMissingTaskQueues bool, ) (*deploymentspb.SetCurrentVersionResponse, error) ListWorkerDeployments( @@ -107,6 +113,7 @@ type Client interface { version string, percentage float32, identity string, + ignoreMissingTaskQueues bool, ) (*deploymentspb.SetRampingVersionResponse, error) // Used internally by the Worker Deployment workflow in its StartWorkerDeployment Activity @@ -152,7 +159,15 @@ type Client interface { GetVersionDrainageStatus( ctx context.Context, namespaceEntry *namespace.Namespace, - deploymentName, buildID string) (enumspb.VersionDrainageStatus, error) + deploymentName, version string) (enumspb.VersionDrainageStatus, error) + + // Used internally by the Worker Deployment workflow in its IsVersionMissingTaskQueues Activity + // to verify if there are missing task queues in the new current/ramping version. + IsVersionMissingTaskQueues( + ctx context.Context, + namespaceEntry *namespace.Namespace, + prevCurrentVersion, newVersion string, + ) (bool, error) } type ErrMaxTaskQueuesInDeployment struct{ error } @@ -164,6 +179,7 @@ type ClientImpl struct { logger log.Logger historyClient historyservice.HistoryServiceClient visibilityManager manager.VisibilityManager + matchingClient resource.MatchingClient maxIDLengthLimit dynamicconfig.IntPropertyFn visibilityMaxPageSize dynamicconfig.IntPropertyFnWithNamespaceFilter maxTaskQueuesInDeployment dynamicconfig.IntPropertyFnWithNamespaceFilter @@ -363,6 +379,7 @@ func (d *ClientImpl) SetCurrentVersion( deploymentName string, version string, identity string, + ignoreMissingTaskQueues bool, ) (_ *deploymentspb.SetCurrentVersionResponse, retErr error) { //revive:disable-next-line:defer defer d.record("SetCurrentVersion", &retErr, namespaceEntry.Name(), version, identity)() @@ -376,8 +393,9 @@ func (d *ClientImpl) SetCurrentVersion( } updatePayload, err := sdk.PreferProtoDataConverter.ToPayloads(&deploymentspb.SetCurrentVersionArgs{ - Identity: identity, - Version: version, + Identity: identity, + Version: version, + IgnoreMissingTaskQueues: ignoreMissingTaskQueues, }) if err != nil { return nil, err @@ -425,6 +443,7 @@ func (d *ClientImpl) SetRampingVersion( version string, percentage float32, identity string, + ignoreMissingTaskQueues bool, ) (_ *deploymentspb.SetRampingVersionResponse, retErr error) { //revive:disable-next-line:defer defer d.record("SetWorkerDeploymentRampingVersion", &retErr, namespaceEntry.Name(), version, percentage, identity)() @@ -447,9 +466,10 @@ func (d *ClientImpl) SetRampingVersion( } updatePayload, err := sdk.PreferProtoDataConverter.ToPayloads(&deploymentspb.SetRampingVersionArgs{ - Identity: identity, - Version: version, - Percentage: percentage, + Identity: identity, + Version: version, + Percentage: percentage, + IgnoreMissingTaskQueues: ignoreMissingTaskQueues, }) if err != nil { return nil, err @@ -520,6 +540,7 @@ func (d *ClientImpl) DeleteWorkerDeploymentVersion( if err != nil { return err } + outcome, err := d.updateWithStartWorkerDeployment( ctx, namespaceEntry, @@ -686,6 +707,11 @@ func (d *ClientImpl) DeleteVersionFromWorkerDeployment( } if failure := outcome.GetFailure(); failure != nil { + if failure.Message == errVersionNotDrained { + return temporal.NewNonRetryableApplicationError(errVersionNotDrained, "Delete on version failed", nil) // non-retryable error to stop multiple activity attempts + } else if failure.Message == errVersionHasPollers { + return temporal.NewNonRetryableApplicationError(errVersionHasPollers, "Delete on version failed", nil) // non-retryable error to stop multiple activity attempts + } return serviceerror.NewInternal(failure.Message) } @@ -726,11 +752,11 @@ func (d *ClientImpl) updateWithStartWorkerDeploymentVersion( }, CreateTime: now, RoutingUpdateTime: now, - CurrentSinceTime: nil, // not current - RampingSinceTime: nil, // not ramping - RampPercentage: 0, // not ramping - DrainageInfo: nil, // not draining or drained - Metadata: nil, // todo + CurrentSinceTime: nil, // not current + RampingSinceTime: nil, // not ramping + RampPercentage: 0, // not ramping + DrainageInfo: &deploymentpb.VersionDrainageInfo{}, // not draining or drained + Metadata: nil, // todo }, }) if err != nil { @@ -1100,3 +1126,126 @@ func makeDeploymentQuery(deploymentName, buildID string) string { statusFilter = "= 'Running'" return fmt.Sprintf("%s %s AND %s %s", searchattribute.BuildIds, deploymentFilter, searchattribute.ExecutionStatus, statusFilter) } + +func (d *ClientImpl) IsVersionMissingTaskQueues(ctx context.Context, namespaceEntry *namespace.Namespace, prevCurrentVersion, newVersion string) (bool, error) { + // Check if all the task-queues in the prevCurrentVersion are present in the newCurrentVersion (newVersion is either the new ramping version or the new current version) + prevCurrentVersionInfo, err := d.DescribeVersion(ctx, namespaceEntry, prevCurrentVersion) + if err != nil { + return false, err + } + + newVersionInfo, err := d.DescribeVersion(ctx, namespaceEntry, newVersion) + if err != nil { + return false, err + } + + missingTaskQueues, err := d.checkForMissingTaskQueues(prevCurrentVersionInfo, newVersionInfo) + if err != nil { + return false, err + } + + if len(missingTaskQueues) == 0 { + return false, nil + } + + // Verify that all the missing task-queues have been added to another deployment or do not have backlogged tasks/add-rate > 0 + for _, missingTaskQueue := range missingTaskQueues { + isExpectedInNewVersion, err := d.isTaskQueueExpectedInNewVersion(ctx, namespaceEntry, missingTaskQueue, prevCurrentVersionInfo) + if err != nil { + return false, err + } + if isExpectedInNewVersion { + // one of the missing task queues is expected in the new version + return true, nil + } + } + + // all expected task queues are present in the new version + return false, nil +} + +// isTaskQueueExpectedInNewVersion checks if a task queue is expected in the new version. A task queue is expected in the new version if: +// 1. It is not assigned to a deployment different from the deployment's current version. +// 2. It has backlogged tasks or add-rate > 0. +func (d *ClientImpl) isTaskQueueExpectedInNewVersion( + ctx context.Context, + namespaceEntry *namespace.Namespace, + taskQueue *deploymentpb.WorkerDeploymentVersionInfo_VersionTaskQueueInfo, + prevCurrentVersionInfo *deploymentpb.WorkerDeploymentVersionInfo, +) (bool, error) { + // First check if task queue is assigned to another deployment + response, err := d.matchingClient.DescribeTaskQueue(ctx, &matchingservice.DescribeTaskQueueRequest{ + NamespaceId: namespaceEntry.ID().String(), + DescRequest: &workflowservice.DescribeTaskQueueRequest{ + TaskQueue: &taskqueuepb.TaskQueue{ + Name: taskQueue.Name, + Kind: enumspb.TaskQueueKind(enumspb.TASK_QUEUE_KIND_NORMAL), + }, + TaskQueueType: enumspb.TaskQueueType(taskQueue.Type), + }, + }) + if err != nil { + return false, err + } + + // Task Queue has been moved to another Worker Deployment + if response.DescResponse.VersioningInfo != nil && + response.DescResponse.VersioningInfo.GetCurrentVersion() != prevCurrentVersionInfo.GetVersion() { + return false, nil + } + + // Check if task queue has backlogged tasks or add-rate > 0 + response, err = d.matchingClient.DescribeTaskQueue(ctx, &matchingservice.DescribeTaskQueueRequest{ + NamespaceId: namespaceEntry.ID().String(), + DescRequest: &workflowservice.DescribeTaskQueueRequest{ + ApiMode: enumspb.DESCRIBE_TASK_QUEUE_MODE_ENHANCED, + TaskQueue: &taskqueuepb.TaskQueue{ + Name: taskQueue.Name, + Kind: enumspb.TaskQueueKind(enumspb.TASK_QUEUE_KIND_NORMAL), + }, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TaskQueueType(taskQueue.Type)}, + Versions: &taskqueuepb.TaskQueueVersionSelection{ + BuildIds: []string{prevCurrentVersionInfo.GetVersion()}, // pretending the version string is a build id + }, + TaskQueueType: enumspb.TaskQueueType(taskQueue.Type), // since request doesn't pass through frontend, this field is not automatically populated + ReportStats: true, + }, + }) + if err != nil { + d.logger.Error("error fetching AddRate for task-queue", tag.Error(err)) + return false, err + } + + typesInfo := response.GetDescResponse().GetVersionsInfo()[prevCurrentVersionInfo.GetVersion()].GetTypesInfo() + if typesInfo != nil { + typeStats := typesInfo[int32(enumspb.TaskQueueType(taskQueue.Type))] + if typeStats != nil && typeStats.GetStats() != nil && + (typeStats.GetStats().GetTasksAddRate() != 0 || typeStats.GetStats().GetApproximateBacklogCount() != 0) { + return true, nil + } + } + + return false, nil +} + +// checkForMissingTaskQueues checks if all the task-queues in the previous version are present in the new version +func (d *ClientImpl) checkForMissingTaskQueues(prevCurrentVersionInfo, newCurrentVersionInfo *deploymentpb.WorkerDeploymentVersionInfo) ([]*deploymentpb.WorkerDeploymentVersionInfo_VersionTaskQueueInfo, error) { + prevCurrentVersionTaskQueues := prevCurrentVersionInfo.GetTaskQueueInfos() + newCurrentVersionTaskQueues := newCurrentVersionInfo.GetTaskQueueInfos() + + missingTaskQueues := []*deploymentpb.WorkerDeploymentVersionInfo_VersionTaskQueueInfo{} + for _, prevTaskQueue := range prevCurrentVersionTaskQueues { + found := false + for _, newTaskQueue := range newCurrentVersionTaskQueues { + if prevTaskQueue.GetName() == newTaskQueue.GetName() && prevTaskQueue.GetType() == newTaskQueue.GetType() { + found = true + break + } + } + if !found { + missingTaskQueues = append(missingTaskQueues, prevTaskQueue) + } + } + + return missingTaskQueues, nil +} diff --git a/service/worker/workerdeployment/fx.go b/service/worker/workerdeployment/fx.go index c5169f7b190..66fa366ca03 100644 --- a/service/worker/workerdeployment/fx.go +++ b/service/worker/workerdeployment/fx.go @@ -68,6 +68,7 @@ var Module = fx.Options( func ClientProvider( logger log.Logger, historyClient resource.HistoryClient, + matchingClient resource.MatchingClient, visibilityManager manager.VisibilityManager, dc *dynamicconfig.Collection, ) Client { @@ -75,6 +76,7 @@ func ClientProvider( logger: logger, historyClient: historyClient, visibilityManager: visibilityManager, + matchingClient: matchingClient, maxIDLengthLimit: dynamicconfig.MaxIDLengthLimit.Get(dc), visibilityMaxPageSize: dynamicconfig.FrontendVisibilityMaxPageSize.Get(dc), maxTaskQueuesInDeployment: dynamicconfig.MatchingMaxTaskQueuesInDeployment.Get(dc), diff --git a/service/worker/workerdeployment/util.go b/service/worker/workerdeployment/util.go index 031e8821f90..4aa5d712970 100644 --- a/service/worker/workerdeployment/util.go +++ b/service/worker/workerdeployment/util.go @@ -81,6 +81,9 @@ const ( errVersionAlreadyExistsType = "errVersionAlreadyExists" errMaxTaskQueuesInVersionType = "errMaxTaskQueuesInVersion" errVersionAlreadyCurrentType = "errVersionAlreadyCurrent" + errVersionNotDrained = "Version cannot be deleted since it is not drained." + errVersionHasPollers = "Version cannot be deleted since it has active pollers." + errVersionIsCurrentOrRamping = "Version cannot be deleted since it is current or ramping." ) var ( diff --git a/service/worker/workerdeployment/version_activities.go b/service/worker/workerdeployment/version_activities.go index a7a90e2fcd6..13b5f2f1556 100644 --- a/service/worker/workerdeployment/version_activities.go +++ b/service/worker/workerdeployment/version_activities.go @@ -28,17 +28,17 @@ import ( "cmp" "context" "fmt" - enumspb "go.temporal.io/api/enums/v1" - taskqueuepb "go.temporal.io/api/taskqueue/v1" - "go.temporal.io/server/common/tqid" "sync" + enumspb "go.temporal.io/api/enums/v1" + taskqueuepb "go.temporal.io/api/taskqueue/v1" "go.temporal.io/api/workflowservice/v1" "go.temporal.io/sdk/activity" deploymentspb "go.temporal.io/server/api/deployment/v1" "go.temporal.io/server/api/matchingservice/v1" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/resource" + "go.temporal.io/server/common/worker_versioning" ) type ( @@ -149,33 +149,32 @@ func (a *VersionActivities) CheckWorkerDeploymentUserDataPropagation(ctx context // CheckIfTaskQueuesHavePollers returns true if any of the given task queues has any pollers func (a *VersionActivities) CheckIfTaskQueuesHavePollers(ctx context.Context, args *deploymentspb.CheckTaskQueuesHaveNoPollersActivityArgs) (bool, error) { for _, tq := range args.TaskQueues { - if testRootPartition, err := tqid.PartitionFromProto(tq, a.namespace.Name().String(), enumspb.TASK_QUEUE_TYPE_WORKFLOW); err != nil { - return false, fmt.Errorf("task queue partition for tq with name %s was invalid", tq.GetName()) - } else if !testRootPartition.IsRoot() { - return false, fmt.Errorf("task queue partition for tq with name %s was not root", tq.GetName()) - } res, err := a.matchingClient.DescribeTaskQueue(ctx, &matchingservice.DescribeTaskQueueRequest{ NamespaceId: a.namespace.ID().String(), DescRequest: &workflowservice.DescribeTaskQueueRequest{ - Namespace: a.namespace.Name().String(), - TaskQueue: tq, - ApiMode: enumspb.DESCRIBE_TASK_QUEUE_MODE_ENHANCED, - Versions: &taskqueuepb.TaskQueueVersionSelection{BuildIds: []string{args.BuildId}}, - ReportPollers: true, - TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + Namespace: a.namespace.Name().String(), + TaskQueue: tq, + ApiMode: enumspb.DESCRIBE_TASK_QUEUE_MODE_ENHANCED, + Versions: &taskqueuepb.TaskQueueVersionSelection{BuildIds: []string{worker_versioning.WorkerDeploymentVersionToString(args.WorkerDeploymentVersion)}}, + ReportPollers: true, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, }, }) if err != nil { return false, fmt.Errorf("error describing task queue with name %s: %s", tq.GetName(), err) } - typesInfo := res.GetDescResponse().GetVersionsInfo()[args.BuildId].GetTypesInfo() + typesInfo := res.GetDescResponse().GetVersionsInfo()[worker_versioning.WorkerDeploymentVersionToString(args.WorkerDeploymentVersion)].GetTypesInfo() if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetPollers()) > 0 { return true, nil } if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_ACTIVITY)].GetPollers()) > 0 { return true, nil } + if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_NEXUS)].GetPollers()) > 0 { + return true, nil + } } return false, nil } diff --git a/service/worker/workerdeployment/version_workflow.go b/service/worker/workerdeployment/version_workflow.go index 1bd9a4abbf4..f0a11e29574 100644 --- a/service/worker/workerdeployment/version_workflow.go +++ b/service/worker/workerdeployment/version_workflow.go @@ -26,9 +26,10 @@ package workerdeployment import ( "fmt" + "time" + taskqueuepb "go.temporal.io/api/taskqueue/v1" "go.temporal.io/server/common/worker_versioning" - "time" "github.com/pborman/uuid" deploymentpb "go.temporal.io/api/deployment/v1" @@ -77,10 +78,12 @@ func VersionWorkflow(ctx workflow.Context, versionWorkflowArgs *deploymentspb.Wo metrics: workflow.GetMetricsHandler(ctx).WithTags(map[string]string{"namespace": versionWorkflowArgs.NamespaceName}), lock: workflow.NewMutex(ctx), } + return versionWorkflowRunner.run(ctx) } func (d *VersionWorkflowRunner) listenToSignals(ctx workflow.Context) { + // Fetch signal channels forceCANSignalChannel := workflow.GetSignalChannel(ctx, ForceCANSignalName) forceCAN := false @@ -225,6 +228,8 @@ func (d *VersionWorkflowRunner) validateDeleteVersion() error { } func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context) error { + // TODO (Shivam): add `skip_drainage` flag + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -245,28 +250,37 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context) error } state := d.GetVersionState() + activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) - // describe all task queues in the deployment, if any have pollers, then cannot delete - var tqs []*taskqueuepb.TaskQueue - for tqName, _ := range state.TaskQueueFamilies { - tqs = append(tqs, &taskqueuepb.TaskQueue{ - Name: tqName, - Kind: enumspb.TASK_QUEUE_KIND_NORMAL, // TODO (Carly): could this be sticky? - }) + // Manual deletion of versions is only possible when: + // 1. The version is not current or ramping + // 2. The version is drained. (check skipped when `skip-drainage=true` ) + // 3. The version has no active pollers. + + // 1. Check if the version is not current or ramping. + if state.GetCurrentSinceTime() != nil || state.GetRampingSinceTime() != nil { + // activity won't retry on this error since version not eligible for deletion + return serviceerror.NewFailedPrecondition(errVersionIsCurrentOrRamping) } - activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) - checkPollersReq := &deploymentspb.CheckTaskQueuesHaveNoPollersActivityArgs{ - TaskQueues: tqs, - BuildId: d.VersionState.Version.BuildId, + + // 2. Check if the version is drained. + if state.GetDrainageInfo() == nil || state.GetDrainageInfo().Status != enumspb.VERSION_DRAINAGE_STATUS_DRAINED { + // activity won't retry on this error since version not eligible for deletion + return serviceerror.NewFailedPrecondition(errVersionNotDrained) + } + + // 3. Check if the version has any active pollers. + hasPollers, err := d.doesVersionHaveActivePollers(ctx) + if hasPollers { + // activity won't retry on this error since version not eligible for deletion + return serviceerror.NewFailedPrecondition(errVersionHasPollers) } - var hasPollers bool - err = workflow.ExecuteActivity(activityCtx, d.a.CheckIfTaskQueuesHavePollers, checkPollersReq).Get(ctx, &hasPollers) if err != nil { + // some other error allowing activity retries return err } - if hasPollers { - return serviceerror.NewFailedPrecondition("cannot delete, task queues in this version still have pollers") - } + + d.logger.Info("Version is eligible for deletion") // sync version removal to task queues syncReq := &deploymentspb.SyncDeploymentVersionUserDataRequest{ @@ -308,6 +322,28 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context) error return nil } +// doesVersionHaveActivePollers returns true if the version has active pollers. +func (d *VersionWorkflowRunner) doesVersionHaveActivePollers(ctx workflow.Context) (bool, error) { + var tqs []*taskqueuepb.TaskQueue + for tqName := range d.VersionState.TaskQueueFamilies { + tqs = append(tqs, &taskqueuepb.TaskQueue{ + Name: tqName, + Kind: enumspb.TASK_QUEUE_KIND_NORMAL, // TODO (Carly): could this be sticky? + }) + } + activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) + checkPollersReq := &deploymentspb.CheckTaskQueuesHaveNoPollersActivityArgs{ + TaskQueues: tqs, + WorkerDeploymentVersion: d.VersionState.Version, + } + var hasPollers bool + err := workflow.ExecuteActivity(activityCtx, d.a.CheckIfTaskQueuesHavePollers, checkPollersReq).Get(ctx, &hasPollers) + if err != nil { + return false, err + } + return hasPollers, nil +} + func (d *VersionWorkflowRunner) validateRegisterWorker(args *deploymentspb.RegisterWorkerInVersionArgs) error { if _, ok := d.VersionState.TaskQueueFamilies[args.TaskQueueName].GetTaskQueues()[int32(args.TaskQueueType)]; ok { return temporal.NewApplicationError("task queue already exists in deployment", errNoChangeType) @@ -503,7 +539,6 @@ func (d *VersionWorkflowRunner) handleSyncState(ctx workflow.Context, args *depl // stopped accepting new workflows --> start drainage child wf if wasAcceptingNewWorkflows && !isAcceptingNewWorkflows { - state.DrainageInfo = &deploymentpb.VersionDrainageInfo{} d.startDrainage(ctx, true) } diff --git a/service/worker/workerdeployment/workflow.go b/service/worker/workerdeployment/workflow.go index f4056048fa7..986d9665c7e 100644 --- a/service/worker/workerdeployment/workflow.go +++ b/service/worker/workerdeployment/workflow.go @@ -25,6 +25,7 @@ package workerdeployment import ( + "fmt" "slices" "time" @@ -196,7 +197,20 @@ func (d *WorkflowRunner) handleSetRampingVersion(ctx workflow.Context, args *dep rampingSinceTime = d.State.RoutingConfig.RampingVersionChangedTime rampingVersionUpdateTime = d.State.RoutingConfig.RampingVersionChangedTime } else { - rampingSinceTime = routingUpdateTime // version ramping for the first time + // version ramping for the first time + + currentVersion := d.State.RoutingConfig.CurrentVersion + if !args.IgnoreMissingTaskQueues && currentVersion != "" { + isMissingTaskQueues, err := d.isVersionMissingTaskQueues(ctx, currentVersion, newRampingVersion) + if err != nil { + d.logger.Info("Error verifying poller presence in version", "error", err) + return nil, err + } + if isMissingTaskQueues { + return nil, serviceerror.NewFailedPrecondition("New ramping version does not have all the task queues from the previous current version and some missing task queues are active and would become unversioned after this operation") + } + } + rampingSinceTime = routingUpdateTime rampingVersionUpdateTime = routingUpdateTime } @@ -241,7 +255,7 @@ func (d *WorkflowRunner) handleSetRampingVersion(ctx workflow.Context, args *dep func (d *WorkflowRunner) validateDeleteVersion(args *deploymentspb.DeleteVersionArgs) error { if !slices.Contains(d.State.Versions, args.Version) { - return serviceerror.NewNotFound("version not found in deployment") + return serviceerror.NewNotFound(fmt.Sprintf("version %s not found in deployment", args.Version)) } return nil } @@ -307,6 +321,17 @@ func (d *WorkflowRunner) handleSetCurrent(ctx workflow.Context, args *deployment newCurrentVersion := args.Version updateTime := timestamppb.New(workflow.Now(ctx)) + if !args.IgnoreMissingTaskQueues && prevCurrentVersion != "" { + isMissingTaskQueues, err := d.isVersionMissingTaskQueues(ctx, prevCurrentVersion, newCurrentVersion) + if err != nil { + d.logger.Info("Error verifying poller presence in version", "error", err) + return nil, err + } + if isMissingTaskQueues { + return nil, serviceerror.NewFailedPrecondition("New current version does not have all the task queues from the previous current version and some missing task queues are active and would become unversioned after this operation") + } + } + // tell new current that it's current currUpdateArgs := &deploymentspb.SyncVersionStateUpdateArgs{ RoutingUpdateTime: updateTime, @@ -377,6 +402,7 @@ func (d *WorkflowRunner) handleAddVersionToWorkerDeployment(ctx workflow.Context if d.State.Versions == nil { d.State.Versions = make([]string, 0) } + d.State.Versions = append(d.State.Versions, version) return nil } @@ -393,6 +419,16 @@ func (d *WorkflowRunner) syncVersion(ctx workflow.Context, targetVersion string, return res.VersionState, err } +func (d *WorkflowRunner) isVersionMissingTaskQueues(ctx workflow.Context, prevCurrentVersion string, newCurrentVersion string) (bool, error) { + activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) + var res deploymentspb.IsVersionMissingTaskQueuesResult + err := workflow.ExecuteActivity(activityCtx, d.a.IsVersionMissingTaskQueues, &deploymentspb.IsVersionMissingTaskQueuesArgs{ + PrevCurrentVersion: prevCurrentVersion, + NewCurrentVersion: newCurrentVersion, + }).Get(ctx, &res) + return res.IsMissingTaskQueues, err +} + func (d *WorkflowRunner) newUUID(ctx workflow.Context) string { var val string _ = workflow.SideEffect(ctx, func(ctx workflow.Context) any { diff --git a/tests/activity_api_reset_test.go b/tests/activity_api_reset_test.go index 8156b5fc379..ca8701d290d 100644 --- a/tests/activity_api_reset_test.go +++ b/tests/activity_api_reset_test.go @@ -1,330 +1 @@ -// // The MIT License -// // -// // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. -// // -// // Copyright (c) 2020 Uber Technologies, Inc. -// // -// // Permission is hereby granted, free of charge, to any person obtaining a copy -// // of this software and associated documentation files (the "Software"), to deal -// // in the Software without restriction, including without limitation the rights -// // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// // copies of the Software, and to permit persons to whom the Software is -// // furnished to do so, subject to the following conditions: -// // -// // The above copyright notice and this permission notice shall be included in -// // all copies or substantial portions of the Software. -// // -// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// // THE SOFTWARE. package tests - -// -//import ( -// "context" -// "errors" -// "sync/atomic" -// "testing" -// "time" -// -// "github.com/stretchr/testify/assert" -// "github.com/stretchr/testify/suite" -// enumspb "go.temporal.io/api/enums/v1" -// "go.temporal.io/api/workflowservice/v1" -// sdkclient "go.temporal.io/sdk/client" -// "go.temporal.io/sdk/temporal" -// "go.temporal.io/sdk/workflow" -// "go.temporal.io/server/common/dynamicconfig" -// "go.temporal.io/server/common/testing/testvars" -// "go.temporal.io/server/common/util" -// "go.temporal.io/server/tests/testcore" -//) -// -//type ActivityApiResetClientTestSuite struct { -// testcore.FunctionalTestSdkSuite -// tv *testvars.TestVars -// initialRetryInterval time.Duration -// scheduleToCloseTimeout time.Duration -// startToCloseTimeout time.Duration -// -// activityRetryPolicy *temporal.RetryPolicy -//} -// -//func (s *ActivityApiResetClientTestSuite) SetupSuite() { -// s.FunctionalTestSdkSuite.SetupSuite() -// s.OverrideDynamicConfig(dynamicconfig.ActivityAPIsEnabled, true) -// s.tv = testvars.New(s.T()).WithTaskQueue(s.TaskQueue()).WithNamespaceName(s.Namespace()) -//} -// -//func (s *ActivityApiResetClientTestSuite) SetupTest() { -// s.FunctionalTestSdkSuite.SetupTest() -// -// s.initialRetryInterval = 1 * time.Second -// s.scheduleToCloseTimeout = 30 * time.Minute -// s.startToCloseTimeout = 15 * time.Minute -// -// s.activityRetryPolicy = &temporal.RetryPolicy{ -// InitialInterval: s.initialRetryInterval, -// BackoffCoefficient: 1, -// } -//} -// -//func TestActivityApiResetClientTestSuite(t *testing.T) { -// s := new(ActivityApiResetClientTestSuite) -// suite.Run(t, s) -//} -// -//func (s *ActivityApiResetClientTestSuite) makeWorkflowFunc(activityFunction ActivityFunctions) WorkflowFunction { -// return func(ctx workflow.Context) error { -// -// var ret string -// err := workflow.ExecuteActivity(workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ -// ActivityID: "activity-id", -// DisableEagerExecution: true, -// StartToCloseTimeout: s.startToCloseTimeout, -// ScheduleToCloseTimeout: s.scheduleToCloseTimeout, -// RetryPolicy: s.activityRetryPolicy, -// }), activityFunction).Get(ctx, &ret) -// return err -// } -//} -// -//func (s *ActivityApiResetClientTestSuite) TestActivityResetApi_AfterRetry() { -// // activity reset is called after multiple attempts, -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// var activityWasReset atomic.Bool -// activityCompleteCh := make(chan struct{}) -// var startedActivityCount atomic.Int32 -// -// activityFunction := func() (string, error) { -// startedActivityCount.Add(1) -// -// if activityWasReset.Load() == false { -// activityErr := errors.New("bad-luck-please-retry") -// return "", activityErr -// } -// -// s.WaitForChannel(ctx, activityCompleteCh) -// return "done!", nil -// } -// -// workflowFn := s.makeWorkflowFunc(activityFunction) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// wfId := testcore.RandomizeStr("wfid-" + s.T().Name()) -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: wfId, -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// // wait for activity to start/fail few times -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Greater(t, startedActivityCount.Load(), int32(1)) -// }, 5*time.Second, 200*time.Millisecond) -// -// resetRequest := &workflowservice.ResetActivityByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// NoWait: true, -// } -// resp, err := s.FrontendClient().ResetActivityById(ctx, resetRequest) -// s.NoError(err) -// s.NotNil(resp) -// -// activityWasReset.Store(true) -// -// // wait for activity to be running -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, enumspb.PENDING_ACTIVITY_STATE_STARTED, description.PendingActivities[0].State) -// // also verify that the number of attempts was reset -// assert.Equal(t, int32(1), description.PendingActivities[0].Attempt) -// -// } -// }, 5*time.Second, 100*time.Millisecond) -// -// // let activity finish -// activityCompleteCh <- struct{}{} -// -// // wait for workflow to complete -// var out string -// err = workflowRun.Get(ctx, &out) -// s.NoError(err) -//} -// -//func (s *ActivityApiResetClientTestSuite) TestActivityResetApi_WithRunningAndNoWait() { -// // activity reset is called while activity is running, with NoWait=true to start new activity immediately -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// activityCompleteCh1 := make(chan struct{}) -// activityCompleteCh2 := make(chan struct{}) -// var activityAboutToReset atomic.Bool -// -// activityFunction := func() (string, error) { -// if activityAboutToReset.Load() == false { -// activityErr := errors.New("bad-luck-please-retry") -// s.WaitForChannel(ctx, activityCompleteCh1) -// return "", activityErr -// } -// -// s.WaitForChannel(ctx, activityCompleteCh2) -// return "done!", nil -// } -// -// workflowFn := s.makeWorkflowFunc(activityFunction) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: s.tv.WorkflowID(), -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// // wait for activity to start -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, enumspb.PENDING_ACTIVITY_STATE_STARTED, description.PendingActivities[0].State) -// }, 5*time.Second, 200*time.Millisecond) -// -// activityAboutToReset.Store(true) -// resetRequest := &workflowservice.ResetActivityByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// NoWait: true, -// } -// resp, err := s.FrontendClient().ResetActivityById(ctx, resetRequest) -// s.NoError(err) -// s.NotNil(resp) -// -// // let previous activity complete -// activityCompleteCh1 <- struct{}{} -// // wait a bit to make sure previous activity is completed -// util.InterruptibleSleep(ctx, 1*time.Second) -// -// // check if workflow and activity are still running -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, enumspb.PENDING_ACTIVITY_STATE_STARTED, description.PendingActivities[0].State) -// // also verify that the number of attempts was reset -// assert.Equal(t, int32(1), description.PendingActivities[0].Attempt) -// } -// }, 5*time.Second, 100*time.Millisecond) -// -// // let activity finish -// activityCompleteCh2 <- struct{}{} -// -// // wait for workflow to complete -// var out string -// err = workflowRun.Get(ctx, &out) -// s.NoError(err) -//} -// -//func (s *ActivityApiResetClientTestSuite) TestActivityResetApi_InRetry() { -// // reset is called while activity is in retry -// s.initialRetryInterval = 1 * time.Minute -// s.activityRetryPolicy = &temporal.RetryPolicy{ -// InitialInterval: s.initialRetryInterval, -// BackoffCoefficient: 1, -// } -// -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// var startedActivityCount atomic.Int32 -// activityCompleteCh := make(chan struct{}) -// -// activityFunction := func() (string, error) { -// startedActivityCount.Add(1) -// -// if startedActivityCount.Load() == 1 { -// activityErr := errors.New("bad-luck-please-retry") -// return "", activityErr -// } -// -// s.WaitForChannel(ctx, activityCompleteCh) -// return "done!", nil -// } -// -// workflowFn := s.makeWorkflowFunc(activityFunction) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// wfId := testcore.RandomizeStr("wf_id-" + s.T().Name()) -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: wfId, -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// // wait for activity to start, fail and wait for retry -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// assert.Equal(t, 1, len(description.PendingActivities)) -// assert.Equal(t, enumspb.PENDING_ACTIVITY_STATE_SCHEDULED, description.PendingActivities[0].State) -// assert.Equal(t, int32(1), startedActivityCount.Load()) -// }, 5*time.Second, 200*time.Millisecond) -// -// resetRequest := &workflowservice.ResetActivityByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// NoWait: true, -// } -// resp, err := s.FrontendClient().ResetActivityById(ctx, resetRequest) -// s.NoError(err) -// s.NotNil(resp) -// -// // wait for activity to start. Wait time is shorter than original retry interval -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, enumspb.PENDING_ACTIVITY_STATE_STARTED, description.PendingActivities[0].State) -// assert.Equal(t, int32(2), startedActivityCount.Load()) -// // also verify that the number of attempts was reset -// assert.Equal(t, int32(1), description.PendingActivities[0].Attempt) -// } -// }, 2*time.Second, 200*time.Millisecond) -// -// // let previous activity complete -// activityCompleteCh <- struct{}{} -// -// // wait for workflow to complete -// var out string -// err = workflowRun.Get(ctx, &out) -// s.NoError(err) -//} diff --git a/tests/activity_api_update_test.go b/tests/activity_api_update_test.go index 6f7903fe708..ca8701d290d 100644 --- a/tests/activity_api_update_test.go +++ b/tests/activity_api_update_test.go @@ -1,331 +1 @@ -// // The MIT License -// // -// // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. -// // -// // Copyright (c) 2020 Uber Technologies, Inc. -// // -// // Permission is hereby granted, free of charge, to any person obtaining a copy -// // of this software and associated documentation files (the "Software"), to deal -// // in the Software without restriction, including without limitation the rights -// // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// // copies of the Software, and to permit persons to whom the Software is -// // furnished to do so, subject to the following conditions: -// // -// // The above copyright notice and this permission notice shall be included in -// // all copies or substantial portions of the Software. -// // -// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// // THE SOFTWARE. package tests - -// -//import ( -// "context" -// "errors" -// "sync/atomic" -// "testing" -// "time" -// -// "github.com/stretchr/testify/assert" -// "github.com/stretchr/testify/suite" -// activitypb "go.temporal.io/api/activity/v1" -// commonpb "go.temporal.io/api/common/v1" -// enumspb "go.temporal.io/api/enums/v1" -// "go.temporal.io/api/workflowservice/v1" -// sdkclient "go.temporal.io/sdk/client" -// "go.temporal.io/sdk/temporal" -// "go.temporal.io/sdk/workflow" -// "go.temporal.io/server/common/dynamicconfig" -// "go.temporal.io/server/common/testing/testvars" -// "go.temporal.io/server/tests/testcore" -// "google.golang.org/protobuf/types/known/durationpb" -// "google.golang.org/protobuf/types/known/fieldmaskpb" -//) -// -//type ActivityApiUpdateClientTestSuite struct { -// testcore.FunctionalTestSdkSuite -// tv *testvars.TestVars -//} -// -//func (s *ActivityApiUpdateClientTestSuite) SetupSuite() { -// s.FunctionalTestSdkSuite.SetupSuite() -// s.OverrideDynamicConfig(dynamicconfig.ActivityAPIsEnabled, true) -// s.tv = testvars.New(s.T()).WithTaskQueue(s.TaskQueue()).WithNamespaceName(s.Namespace()) -//} -// -//func (s *ActivityApiUpdateClientTestSuite) SetupTest() { -// s.FunctionalTestSdkSuite.SetupTest() -//} -// -//func TestActivityApiUpdateClientTestSuite(t *testing.T) { -// s := new(ActivityApiUpdateClientTestSuite) -// suite.Run(t, s) -//} -// -//type ( -// ActivityFunctions func() (string, error) -// WorkflowFunction func(context2 workflow.Context) error -//) -// -//func (s *ActivityApiUpdateClientTestSuite) makeWorkflowFunc( -// activityFunction ActivityFunctions, -// scheduleToCloseTimeout time.Duration, -// initialRetryInterval time.Duration, -//) WorkflowFunction { -// return func(ctx workflow.Context) error { -// -// activityRetryPolicy := &temporal.RetryPolicy{ -// InitialInterval: initialRetryInterval, -// BackoffCoefficient: 1, -// } -// -// var ret string -// err := workflow.ExecuteActivity(workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ -// ActivityID: "activity-id", -// DisableEagerExecution: true, -// ScheduleToCloseTimeout: scheduleToCloseTimeout, -// StartToCloseTimeout: scheduleToCloseTimeout, -// RetryPolicy: activityRetryPolicy, -// }), activityFunction).Get(ctx, &ret) -// return err -// } -//} -// -//func (s *ActivityApiUpdateClientTestSuite) TestActivityUpdateApi_ChangeRetryInterval() { -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// activityUpdated := make(chan struct{}) -// -// var startedActivityCount atomic.Int32 -// activityFunction := func() (string, error) { -// startedActivityCount.Add(1) -// if startedActivityCount.Load() == 1 { -// activityErr := errors.New("bad-luck-please-retry") -// -// return "", activityErr -// } -// -// s.WaitForChannel(ctx, activityUpdated) -// return "done!", nil -// } -// -// scheduleToCloseTimeout := 30 * time.Minute -// retryTimeout := 10 * time.Minute -// workflowFn := s.makeWorkflowFunc(activityFunction, scheduleToCloseTimeout, retryTimeout) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: s.tv.WorkflowID(), -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, int32(1), startedActivityCount.Load()) -// } -// }, 10*time.Second, 500*time.Millisecond) -// -// updateRequest := &workflowservice.UpdateActivityOptionsByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// ActivityOptions: &activitypb.ActivityOptions{ -// RetryPolicy: &commonpb.RetryPolicy{ -// InitialInterval: durationpb.New(1 * time.Second), -// }, -// }, -// UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"retry_policy.initial_interval"}}, -// } -// resp, err := s.FrontendClient().UpdateActivityOptionsById(ctx, updateRequest) -// s.NoError(err) -// s.NotNil(resp) -// -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// s.NoError(err) -// s.Equal(1, len(description.PendingActivities)) -// -// activityUpdated <- struct{}{} -// -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err = s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 0) -// assert.Equal(t, int32(2), startedActivityCount.Load()) -// } -// }, 3*time.Second, 100*time.Millisecond) -// -// var out string -// err = workflowRun.Get(ctx, &out) -// -// s.NoError(err) -//} -// -//func (s *ActivityApiUpdateClientTestSuite) TestActivityUpdateApi_ChangeScheduleToClose() { -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// var startedActivityCount atomic.Int32 -// activityFunction := func() (string, error) { -// startedActivityCount.Add(1) -// if startedActivityCount.Load() == 1 { -// activityErr := errors.New("bad-luck-please-retry") -// return "", activityErr -// } -// return "done!", nil -// } -// -// scheduleToCloseTimeout := 30 * time.Minute -// retryTimeout := 10 * time.Minute -// -// workflowFn := s.makeWorkflowFunc(activityFunction, scheduleToCloseTimeout, retryTimeout) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: s.tv.WorkflowID(), -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// // wait for activity to start (and fail) -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 1) -// assert.Equal(t, int32(1), startedActivityCount.Load()) -// } -// -// }, 2*time.Second, 200*time.Millisecond) -// -// // update schedule_to_close_timeout -// updateRequest := &workflowservice.UpdateActivityOptionsByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// ActivityOptions: &activitypb.ActivityOptions{ -// ScheduleToCloseTimeout: durationpb.New(1 * time.Second), -// }, -// UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"schedule_to_close_timeout"}}, -// } -// resp, err := s.FrontendClient().UpdateActivityOptionsById(ctx, updateRequest) -// s.NoError(err) -// s.NotNil(resp) -// -// // activity should fail immediately -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// if err != nil { -// assert.Len(t, description.GetPendingActivities(), 0) -// assert.Equal(t, int32(1), startedActivityCount.Load()) -// } -// }, 2*time.Second, 200*time.Millisecond) -// -// var out string -// err = workflowRun.Get(ctx, &out) -// var activityError *temporal.ActivityError -// s.True(errors.As(err, &activityError)) -// s.Equal(enumspb.RETRY_STATE_NON_RETRYABLE_FAILURE, activityError.RetryState()) -// var timeoutError *temporal.TimeoutError -// s.True(errors.As(activityError.Unwrap(), &timeoutError)) -// s.Equal(enumspb.TIMEOUT_TYPE_SCHEDULE_TO_CLOSE, timeoutError.TimeoutType()) -// s.Equal(int32(1), startedActivityCount.Load()) -//} -// -//func (s *ActivityApiUpdateClientTestSuite) TestActivityUpdateApi_ChangeScheduleToCloseAndRetry() { -// // change both schedule to close and retry policy -// // initial values are chosen in such a way that activity will fail due to schedule to close timeout -// // we change schedule to close to a longer value and retry policy to a shorter value -// // after that activity should succeed -// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) -// defer cancel() -// -// var startedActivityCount atomic.Int32 -// activityFunction := func() (string, error) { -// startedActivityCount.Add(1) -// if startedActivityCount.Load() == 1 { -// activityErr := errors.New("bad-luck-please-retry") -// -// return "", activityErr -// } -// return "done!", nil -// } -// -// // make scheduleToClose shorter than retry 2nd retry interval -// scheduleToCloseTimeout := 8 * time.Second -// retryInterval := 5 * time.Second -// -// workflowFn := s.makeWorkflowFunc( -// activityFunction, scheduleToCloseTimeout, retryInterval) -// -// s.Worker().RegisterWorkflow(workflowFn) -// s.Worker().RegisterActivity(activityFunction) -// -// workflowOptions := sdkclient.StartWorkflowOptions{ -// ID: s.tv.WorkflowID(), -// TaskQueue: s.TaskQueue(), -// } -// -// workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) -// s.NoError(err) -// -// // wait for activity to start (and fail) -// s.EventuallyWithT(func(t *assert.CollectT) { -// assert.True(t, startedActivityCount.Load() > 0) -// }, 2*time.Second, 200*time.Millisecond) -// -// // update schedule_to_close_timeout, make it longer -// // also update retry policy interval, make it shorter -// newScheduleToCloseTimeout := 10 * time.Second -// updateRequest := &workflowservice.UpdateActivityOptionsByIdRequest{ -// Namespace: s.Namespace().String(), -// WorkflowId: workflowRun.GetID(), -// ActivityId: "activity-id", -// ActivityOptions: &activitypb.ActivityOptions{ -// ScheduleToCloseTimeout: durationpb.New(newScheduleToCloseTimeout), -// RetryPolicy: &commonpb.RetryPolicy{ -// InitialInterval: durationpb.New(1 * time.Second), -// }, -// }, -// UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"schedule_to_close_timeout", "retry_policy.initial_interval"}}, -// } -// -// resp, err := s.FrontendClient().UpdateActivityOptionsById(ctx, updateRequest) -// s.NoError(err) -// s.NotNil(resp) -// // check that the update was successful -// s.Equal(int64(newScheduleToCloseTimeout.Seconds()), resp.GetActivityOptions().ScheduleToCloseTimeout.GetSeconds()) -// // check that field we didn't update is the same -// s.Equal(int64(scheduleToCloseTimeout.Seconds()), resp.GetActivityOptions().StartToCloseTimeout.GetSeconds()) -// -// // now activity should succeed -// s.EventuallyWithT(func(t *assert.CollectT) { -// description, err := s.SdkClient().DescribeWorkflowExecution(ctx, workflowRun.GetID(), workflowRun.GetRunID()) -// assert.NoError(t, err) -// assert.Len(t, description.GetPendingActivities(), 0) -// assert.Equal(t, int32(2), startedActivityCount.Load()) -// }, 5*time.Second, 200*time.Millisecond) -// -// var out string -// err = workflowRun.Get(ctx, &out) -// s.NoError(err) -//} diff --git a/tests/deployment_version_test.go b/tests/deployment_version_test.go index d27bd7264ce..a2a30298a72 100644 --- a/tests/deployment_version_test.go +++ b/tests/deployment_version_test.go @@ -42,7 +42,10 @@ import ( "go.temporal.io/server/common/dynamicconfig" "go.temporal.io/server/common/testing/testvars" "go.temporal.io/server/common/tqid" + "go.temporal.io/server/common/worker_versioning" + "go.temporal.io/server/service/worker/workerdeployment" "go.temporal.io/server/tests/testcore" + "google.golang.org/protobuf/types/known/timestamppb" ) const ( @@ -231,29 +234,31 @@ func (s *DeploymentVersionSuite) TestDrainageStatus_SetCurrentVersion_NoOpenWFs( }, time.Second*5, time.Millisecond*200) // non-current deployments have never been used and have no drainage info - s.checkVersionDrainage(ctx, tv1, nil) - s.checkVersionDrainage(ctx, tv2, nil) + s.checkVersionDrainage(ctx, tv1, &deploymentpb.VersionDrainageInfo{}) + s.checkVersionDrainage(ctx, tv2, &deploymentpb.VersionDrainageInfo{}) // SetCurrent tv1 _, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv1.DeploymentSeries(), - Version: tv1.DeploymentVersionString(), - Identity: tv1.ClientIdentity(), + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + Identity: tv1.ClientIdentity(), + IgnoreMissingTaskQueues: true, }) s.Nil(err) s.checkVersionIsCurrent(ctx, tv1) // both still nil since neither are draining - s.checkVersionDrainage(ctx, tv1, nil) - s.checkVersionDrainage(ctx, tv2, nil) + s.checkVersionDrainage(ctx, tv1, &deploymentpb.VersionDrainageInfo{}) + s.checkVersionDrainage(ctx, tv2, &deploymentpb.VersionDrainageInfo{}) // SetCurrent tv2 --> tv1 starts the child drainage workflow _, err = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv2.DeploymentSeries(), - Version: tv2.DeploymentVersionString(), - Identity: tv2.ClientIdentity(), + Namespace: s.Namespace().String(), + DeploymentName: tv2.DeploymentSeries(), + Version: tv2.DeploymentVersionString(), + Identity: tv2.ClientIdentity(), + IgnoreMissingTaskQueues: true, }) s.Nil(err) @@ -288,12 +293,185 @@ func (s *DeploymentVersionSuite) TestDrainageStatus_SetRampingVersion_YesOpenWFs // todo carly: test with open workflows on the draining version that then complete } -//nolint:forbidigo -func (s *DeploymentVersionSuite) TestDeleteVersion_NoOpenWFs() { +func (s *DeploymentVersionSuite) TestDeleteVersion_DeleteCurrentVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv1 := testvars.New(s).WithBuildIDNumber(1) + + // set version as current + _, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv1.ClientIdentity(), + }) + s.Nil(err) + + // deleting this version should fail since the version is current + s.tryDeleteVersion(ctx, tv1, false) + +} + +func (s *DeploymentVersionSuite) TestDeleteVersion_DeleteRampedVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv1 := testvars.New(s).WithBuildIDNumber(1) + + // set version as current + _, err := s.FrontendClient().SetWorkerDeploymentRampingVersion(ctx, &workflowservice.SetWorkerDeploymentRampingVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv1.ClientIdentity(), + }) + s.Nil(err) + +} + +func (s *DeploymentVersionSuite) TestDeleteVersion_NotDrained() { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel() tv1 := testvars.New(s).WithBuildIDNumber(1) + // Start deployment workflow 1 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // Version is not "drained" so delete should fail + s.tryDeleteVersion(ctx, tv1, false) + +} +func (s *DeploymentVersionSuite) TestDeleteVersion_Drained_But_Pollers_Exist() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv1 := testvars.New(s).WithBuildIDNumber(1) + + // Start deployment workflow 1 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // Signal the first version to be drained. Only do this in tests. + versionWorkflowID := worker_versioning.GenerateVersionWorkflowID(tv1.DeploymentSeries(), tv1.BuildID()) + workflowExecution := &commonpb.WorkflowExecution{ + WorkflowId: versionWorkflowID, + } + input := &deploymentpb.VersionDrainageInfo{ + Status: enumspb.VERSION_DRAINAGE_STATUS_DRAINED, + LastChangedTime: timestamppb.New(time.Now()), + LastCheckedTime: timestamppb.New(time.Now()), + } + marshaledData, err := input.Marshal() + s.NoError(err) + signalPayload := &commonpb.Payloads{ + Payloads: []*commonpb.Payload{ + { + Metadata: map[string][]byte{ + "encoding": []byte("binary/protobuf"), + }, + Data: marshaledData, + }, + }, + } + + error := s.SendSignal(s.Namespace().String(), workflowExecution, workerdeployment.SyncDrainageSignalName, signalPayload, tv1.ClientIdentity()) + s.Nil(error) + + // Version will bypass "drained" check but delete should still fail since we have active pollers. + s.tryDeleteVersion(ctx, tv1, false) + +} + +func (s *DeploymentVersionSuite) TestDeleteVersion_ValidDelete() { + s.T().Skip("skipping this test for now until I make TTL of pollerHistoryTTL configurable by dynamic config.") + + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv1 := testvars.New(s).WithBuildIDNumber(1) + + // Start deployment workflow 1 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // Signal the first version to be drained. Only do this in tests. + versionWorkflowID := worker_versioning.GenerateVersionWorkflowID(tv1.DeploymentSeries(), tv1.BuildID()) + workflowExecution := &commonpb.WorkflowExecution{ + WorkflowId: versionWorkflowID, + } + input := &deploymentpb.VersionDrainageInfo{ + Status: enumspb.VERSION_DRAINAGE_STATUS_DRAINED, + LastChangedTime: timestamppb.New(time.Now()), + LastCheckedTime: timestamppb.New(time.Now()), + } + marshaledData, err := input.Marshal() + s.NoError(err) + signalPayload := &commonpb.Payloads{ + Payloads: []*commonpb.Payload{ + { + Metadata: map[string][]byte{ + "encoding": []byte("binary/protobuf"), + }, + Data: marshaledData, + }, + }, + } + + error := s.SendSignal(s.Namespace().String(), workflowExecution, workerdeployment.SyncDrainageSignalName, signalPayload, tv1.ClientIdentity()) + s.Nil(error) + + time.Sleep(10 * time.Second) // Simulate pollers going away + + // delete succeeds + s.tryDeleteVersion(ctx, tv1, true) + + // deployment version does not exist in the deployment list + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + }) + a.NoError(err) + if resp != nil { + for _, vs := range resp.GetWorkerDeploymentInfo().GetVersionSummaries() { + a.NotEqual(tv1.DeploymentVersionString(), vs.Version) + } + } + }, time.Second*5, time.Millisecond*200) +} + +// VersionMissingTaskQueues +func (s *DeploymentVersionSuite) TestVersionMissingTaskQueues_InvalidSetCurrentVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv := testvars.New(s) + tv1 := tv.WithBuildIDNumber(1).WithTaskQueue(tv.Any().String()) + // Start deployment workflow 1 and wait for the deployment version to exist pollerCtx1, pollerCancel1 := context.WithCancel(ctx) go s.pollFromDeployment(pollerCtx1, tv1) @@ -317,78 +495,242 @@ func (s *DeploymentVersionSuite) TestDeleteVersion_NoOpenWFs() { }) s.Nil(err) - // describe tq and confirm that the current version is our version (so we can check that it was removed later) + // new version with a different registered task-queue + tv2 := testvars.New(s).WithBuildIDNumber(2).WithTaskQueue(testvars.New(s.T()).Any().String()) + + // Start deployment workflow 2 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv2) s.EventuallyWithT(func(t *assert.CollectT) { a := assert.New(t) - resp, err := s.FrontendClient().DescribeTaskQueue(ctx, &workflowservice.DescribeTaskQueueRequest{ + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ Namespace: s.Namespace().String(), - TaskQueue: tv1.TaskQueue(), + Version: tv2.DeploymentVersionString(), }) a.NoError(err) if resp != nil { - a.NotNil(resp.GetVersioningInfo().GetCurrentVersion()) - a.Equal(tv1.DeploymentVersionString(), resp.GetVersioningInfo().GetCurrentVersion()) + a.Equal(tv2.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) } }, time.Second*5, time.Millisecond*200) - // Version has active pollers so delete should fail - s.tryDeleteVersion(ctx, tv1, false) + // Cancel pollers on task_queue_1 to increase the backlog of tasks + pollerCancel1() + + // Start a workflow on task_queue_1 to increase the add rate + s.startWorkflow(tv1, tv1.VersioningOverridePinned()) + + // SetCurrent tv2 + _, err = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv2.DeploymentSeries(), + Version: tv2.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv2.ClientIdentity(), + IgnoreMissingTaskQueues: false, + }) + + // SetCurrent should fail since task_queue_1 does not have a current version than the deployment's existing current version + // and it either has a backlog of tasks being present or an add rate > 0. + s.Error(err) + +} + +func (s *DeploymentVersionSuite) TestVersionMissingTaskQueues_ValidSetCurrentVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv := testvars.New(s) + + tv1 := tv.WithBuildIDNumber(1).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 1 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // SetCurrent so that the task queue puts the version in its versions info + _, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv1.ClientIdentity(), + }) + s.Nil(err) - // Stop the pollers + // new version with a different registered task-queue + tv2 := tv.WithBuildIDNumber(2).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 2 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv2) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv2.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv2.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // SetCurrent tv2 + _, err = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv2.DeploymentSeries(), + Version: tv2.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv2.ClientIdentity(), + IgnoreMissingTaskQueues: false, + }) + + // SetCurrent tv2 should succeed as task_queue_1, despite missing from the new current version, has no backlogged tasks/add-rate > 0 + s.Nil(err) +} + +func (s *DeploymentVersionSuite) TestVersionMissingTaskQueues_InvalidSetRampingVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv := testvars.New(s) + tv1 := tv.WithBuildIDNumber(1).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 1 and wait for the deployment version to exist + pollerCtx1, pollerCancel1 := context.WithCancel(ctx) + go s.pollFromDeployment(pollerCtx1, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // SetCurrent so that the task queue puts the version in its versions info + _, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv1.ClientIdentity(), + }) + s.Nil(err) + + // new version with a different registered task-queue + tv2 := tv.WithBuildIDNumber(2).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 2 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv2) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv2.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv2.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // Cancel pollers on task_queue_1 to increase the backlog of tasks pollerCancel1() - // TODO (Shivam): Figure out how long to wait in this test for the task queue to forget the pollers. Can we accelerate the retention during test? - // below code passes when there are hard-coded no pollers, so the challenge is just to get the pollers to go away in the test. - //// Wait some time? - // - //// Version has no active pollers so delete should succeed - //s.tryDeleteVersion(ctx, tv1, true) - // - //// describe deployment and expect that the versions list does NOT contain the deleted version - //s.EventuallyWithT(func(t *assert.CollectT) { - // a := assert.New(t) - // resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ - // Namespace: s.Namespace().String(), - // DeploymentName: tv1.DeploymentSeries(), - // }) - // a.NoError(err) - // if resp != nil { - // for _, vs := range resp.GetWorkerDeploymentInfo().GetVersionSummaries() { - // a.NotEqual(tv1.DeploymentVersionString(), vs.Version) - // } - // } - //}, time.Second*5, time.Millisecond*200) - // - //// Note: turns out you can successfully DescribeVersion even after that version has been deleted, because closed workflows can still answer queries - // - //// list workflows with deployment-version workflow id and expect it to be closed - //s.EventuallyWithT(func(t *assert.CollectT) { - // a := assert.New(t) - // resp, err := s.FrontendClient().DescribeWorkflowExecution(ctx, &workflowservice.DescribeWorkflowExecutionRequest{ - // Namespace: s.Namespace().String(), - // Execution: &commonpb.WorkflowExecution{ - // WorkflowId: worker_versioning.GenerateVersionWorkflowID(tv1.DeploymentSeries(), tv1.BuildID()), - // RunId: "", - // }, - // }) - // a.NoError(err) - // if resp != nil { - // a.Equal(enumspb.WORKFLOW_EXECUTION_STATUS_COMPLETED, resp.GetWorkflowExecutionInfo().GetStatus()) - // } - //}, time.Second*5, time.Millisecond*200) - // - //// describe TQ and expect no version - //s.EventuallyWithT(func(t *assert.CollectT) { - // a := assert.New(t) - // resp, err := s.FrontendClient().DescribeTaskQueue(ctx, &workflowservice.DescribeTaskQueueRequest{ - // Namespace: s.Namespace().String(), - // TaskQueue: tv1.TaskQueue(), - // }) - // a.NoError(err) - // if resp != nil { - // a.Nil(resp.GetVersioningInfo().GetCurrentVersion()) - // } - //}, time.Second*5, time.Millisecond*200) + // Start a workflow on task_queue_1 to increase the add rate + s.startWorkflow(tv1, tv1.VersioningOverridePinned()) + + // SetRampingVersion to tv2 + _, err = s.FrontendClient().SetWorkerDeploymentRampingVersion(ctx, &workflowservice.SetWorkerDeploymentRampingVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv2.DeploymentSeries(), + Version: tv2.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv2.ClientIdentity(), + IgnoreMissingTaskQueues: false, + }) + + // SetRampingVersion should fail since task_queue_1 does not have a current version than the deployment's existing current version + // and it either has a backlog of tasks being present or an add rate > 0. + s.Error(err) +} + +func (s *DeploymentVersionSuite) TestVersionMissingTaskQueues_ValidSetRampingVersion() { + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + tv := testvars.New(s) + tv1 := tv.WithBuildIDNumber(1).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 1 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv1) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv1.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv1.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // SetCurrent so that the task queue puts the version in its versions info + _, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv1.DeploymentSeries(), + Version: tv1.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv1.ClientIdentity(), + }) + s.Nil(err) + + // new version with a different registered task-queue + tv2 := tv.WithBuildIDNumber(2).WithTaskQueue(tv.Any().String()) + + // Start deployment workflow 2 and wait for the deployment version to exist + go s.pollFromDeployment(ctx, tv2) + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv2.DeploymentVersionString(), + }) + a.NoError(err) + a.Equal(tv2.DeploymentVersionString(), resp.GetWorkerDeploymentVersionInfo().GetVersion()) + }, time.Second*5, time.Millisecond*200) + + // SetRampingVersion to tv2 + _, err = s.FrontendClient().SetWorkerDeploymentRampingVersion(ctx, &workflowservice.SetWorkerDeploymentRampingVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv2.DeploymentSeries(), + Version: tv2.DeploymentVersionString(), + ConflictToken: nil, + Identity: tv2.ClientIdentity(), + IgnoreMissingTaskQueues: false, + }) + + // SetRampingVersion to tv2 should succeed as task_queue_1, despite missing from the new current version, has no backlogged tasks/add-rate > 0 + s.Nil(err) +} + +func (s *DeploymentVersionSuite) startWorkflow( + tv *testvars.TestVars, + override *workflowpb.VersioningOverride, +) string { + request := &workflowservice.StartWorkflowExecutionRequest{ + RequestId: tv.Any().String(), + Namespace: s.Namespace().String(), + WorkflowId: tv.WorkflowID(), + WorkflowType: tv.WorkflowType(), + TaskQueue: tv.TaskQueue(), + Identity: tv.WorkerIdentity(), + VersioningOverride: override, + } + + we, err0 := s.FrontendClient().StartWorkflowExecution(testcore.NewContext(), request) + s.NoError(err0) + return we.GetRunId() } func (s *DeploymentVersionSuite) tryDeleteVersion( @@ -396,18 +738,15 @@ func (s *DeploymentVersionSuite) tryDeleteVersion( tv *testvars.TestVars, expectSuccess bool, ) { - s.EventuallyWithT(func(t *assert.CollectT) { - a := assert.New(t) - _, err := s.FrontendClient().DeleteWorkerDeploymentVersion(ctx, &workflowservice.DeleteWorkerDeploymentVersionRequest{ - Namespace: s.Namespace().String(), - Version: tv.DeploymentVersionString(), - }) - if expectSuccess { - a.NoError(err) - } else { - a.Error(err) - } - }, 5*time.Second, time.Millisecond*100) + _, err := s.FrontendClient().DeleteWorkerDeploymentVersion(ctx, &workflowservice.DeleteWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + Version: tv.DeploymentVersionString(), + }) + if expectSuccess { + s.Nil(err) + } else { + s.Error(err) + } } func (s *DeploymentVersionSuite) checkVersionDrainage( @@ -425,11 +764,6 @@ func (s *DeploymentVersionSuite) checkVersionDrainage( dInfo := resp.GetWorkerDeploymentVersionInfo().GetDrainageInfo() - if expectedDrainageInfo == nil { - a.Nil(dInfo) - return - } - a.Equal(expectedDrainageInfo.Status, dInfo.GetStatus()) if expectedDrainageInfo.LastCheckedTime != nil { a.Equal(expectedDrainageInfo.LastCheckedTime, dInfo.GetLastCheckedTime()) diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index b0e14deb3e7..8ed17905b7a 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -165,11 +165,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_SetCurrentVersion() }, time.Second*10, time.Millisecond*1000) // Set first version as current version - _, _ = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentSeries(), - Version: firstVersion.DeploymentVersionString(), - }) + s.setCurrentVersion(ctx, firstVersion, "", true) s.EventuallyWithT(func(t *assert.CollectT) { a := assert.New(t) @@ -183,11 +179,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_SetCurrentVersion() }, time.Second*10, time.Millisecond*1000) // Set second version as current version - _, _ = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentSeries(), - Version: secondVersion.DeploymentVersionString(), - }) + s.setCurrentVersion(ctx, secondVersion, firstVersion.DeploymentVersionString(), true) s.EventuallyWithT(func(t *assert.CollectT) { a := assert.New(t) @@ -209,24 +201,10 @@ func (s *WorkerDeploymentSuite) TestSetCurrentVersion_Idempotent() { firstVersion := tv.WithBuildIDNumber(1) // Set first version as current version - resp, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentSeries(), - Version: firstVersion.DeploymentVersionString(), - }) - s.NoError(err) - s.NotNil(resp.PreviousVersion) - s.Equal("", resp.PreviousVersion) + s.setCurrentVersion(ctx, firstVersion, "", true) // Set first version as current version again - resp, err = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentSeries(), - Version: firstVersion.DeploymentVersionString(), - }) - s.NoError(err) - s.NotNil(resp.PreviousVersion) - s.Equal(firstVersion.DeploymentVersionString(), resp.PreviousVersion) + s.setCurrentVersion(ctx, firstVersion, firstVersion.DeploymentVersionString(), true) } // TestConcurrentSetCurrentVersion_Poll tests that no error is thrown when concurrent operations @@ -239,7 +217,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentSetCurrentVersion_Poll() { go s.pollFromDeployment(ctx, tv) // Set current version concurrently - s.setCurrentVersion(ctx, tv, "") + s.setCurrentVersion(ctx, tv, "", true) } // Testing ListWorkerDeployments @@ -275,8 +253,8 @@ func (s *WorkerDeploymentSuite) TestListWorkerDeployments_TwoVersions_SameDeploy CurrentVersionChangedTime: timestamppb.Now(), } - s.setCurrentVersion(ctx, firstVersion, "") // starts first version's version workflow - go s.pollFromDeployment(ctx, secondVersion) // starts second version's version workflow + s.setCurrentVersion(ctx, firstVersion, "", true) // starts first version's version workflow + go s.pollFromDeployment(ctx, secondVersion) // starts second version's version workflow expectedDeploymentSummary := s.buildWorkerDeploymentSummary( tv.DeploymentSeries(), @@ -307,8 +285,8 @@ func (s *WorkerDeploymentSuite) TestListWorkerDeployments_TwoVersions_SameDeploy RampingVersionChangedTime: timestamppb.Now(), } - s.setCurrentVersion(ctx, currentVersionVars, "") // starts first version's version workflow + set it to current - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setCurrentVersion(ctx, currentVersionVars, "", true) // starts first version's version workflow + set it to current + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: "", PreviousPercentage: 0, }) // starts second version's version workflow + set it to ramping @@ -333,7 +311,7 @@ func (s *WorkerDeploymentSuite) TestListWorkerDeployments_RampingVersionPercenta rampingVersionChangedTime := timestamppb.Now() rampingVersionVars := tv.WithBuildIDNumber(2) - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", nil) // set version as ramping + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", nil) // set version as ramping routingInfo := &deploymentpb.RoutingConfig{ CurrentVersion: "", @@ -348,7 +326,7 @@ func (s *WorkerDeploymentSuite) TestListWorkerDeployments_RampingVersionPercenta time.Sleep(2 * time.Second) // modify ramping version percentage - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 75, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 75, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: rampingVersionVars.DeploymentVersionString(), PreviousPercentage: 50, }) @@ -406,7 +384,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_Ramping_Wi currentVersionVars := tv.WithBuildIDNumber(2) // set version as ramping - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: "", PreviousPercentage: 0, }) @@ -429,7 +407,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_Ramping_Wi }) // set current version - s.setCurrentVersion(ctx, currentVersionVars, "") + s.setCurrentVersion(ctx, currentVersionVars, "", true) // fresh DescribeWorkerDeployment call resp, err = s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ @@ -457,7 +435,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_DuplicateR rampingVersionVars := testvars.New(s).WithBuildIDNumber(1) // set version as ramping - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: "", PreviousPercentage: 0, }) @@ -480,7 +458,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_DuplicateR }) // setting version as ramping again - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: rampingVersionVars.DeploymentVersionString(), PreviousPercentage: 50, }) @@ -491,10 +469,10 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_Invalid_Se defer cancel() currentVersionVars := testvars.New(s).WithBuildIDNumber(1) - s.setCurrentVersion(ctx, currentVersionVars, "") + s.setCurrentVersion(ctx, currentVersionVars, "", true) expectedError := fmt.Errorf("Ramping version %s is already current", currentVersionVars.DeploymentVersionString()) - s.setAndVerifyRampingVersion(ctx, currentVersionVars, false, 50, expectedError.Error(), nil) // setting current version to ramping should fails + s.setAndVerifyRampingVersion(ctx, currentVersionVars, false, 50, true, expectedError.Error(), nil) // setting current version to ramping should fails resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ Namespace: s.Namespace().String(), @@ -521,10 +499,10 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_ModifyExis tv := testvars.New(s) rampingVersionVars := tv.WithBuildIDNumber(1) - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", nil) // set version as ramping + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", nil) // set version as ramping // modify ramping version percentage - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 75, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 75, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: rampingVersionVars.DeploymentVersionString(), PreviousPercentage: 50, }) @@ -539,8 +517,8 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_WithCurren rampingVersionVars := tv.WithBuildIDNumber(1) currentVersionVars := tv.WithBuildIDNumber(2) - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", nil) // set version as ramping - s.setCurrentVersion(ctx, currentVersionVars, "") // set version as curent + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", nil) // set version as ramping + s.setCurrentVersion(ctx, currentVersionVars, "", true) // set version as curent resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ Namespace: s.Namespace().String(), @@ -561,7 +539,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_WithCurren }) // unset ramping version - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, true, 0, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, true, 0, true, "", &workflowservice.SetWorkerDeploymentRampingVersionResponse{ PreviousVersion: rampingVersionVars.DeploymentVersionString(), PreviousPercentage: 50, }) @@ -578,6 +556,7 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_WithCurren RampingVersion: "", RampingVersionPercentage: 0, RampingVersionChangedTime: nil, + CurrentVersion: currentVersionVars.DeploymentVersionString(), CurrentVersionChangedTime: timestamppb.Now(), }, @@ -591,10 +570,10 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_SetRamping tv := testvars.New(s) rampingVersionVars := tv.WithBuildIDNumber(1) - s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, "", nil) + s.setAndVerifyRampingVersion(ctx, rampingVersionVars, false, 50, true, "", nil) // set ramping version as current - s.setCurrentVersion(ctx, rampingVersionVars, "") + s.setCurrentVersion(ctx, rampingVersionVars, "", true) resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ Namespace: s.Namespace().String(), @@ -620,6 +599,56 @@ func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_SetRamping func (s *WorkerDeploymentSuite) TestSetWorkerDeploymentRampingVersion_NoCurrent_Unset_Ramp() { } +// Tests testing set current version +func (s *WorkerDeploymentSuite) TestSetWorkerCurrentVersion_MissingTaskQueuesInNewVersion() { + //ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + //defer cancel() + //tv1 := testvars.New(s).WithBuildIDNumber(1).WithTaskQueue("task_queue_1") + //tv2 := testvars.New(s).WithBuildIDNumber(2).WithTaskQueue("task_queue_2") + // + //// Start deployment workflow 1 and wait for the deployment version to exist + //go s.pollFromDeployment(ctx, tv1) + //s.EventuallyWithT(func(t *assert.CollectT) { + // a := assert.New(t) + // resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + // Namespace: s.Namespace().String(), + // Version: &deploymentpb.WorkerDeploymentVersion{ + // DeploymentName: tv1.DeploymentSeries(), + // BuildId: tv1.BuildID(), + // }, + // }) + // a.NoError(err) + // a.Equal(tv1.DeploymentSeries(), resp.GetWorkerDeploymentVersionInfo().GetVersion().GetDeploymentName()) + // a.Equal(tv1.BuildID(), resp.GetWorkerDeploymentVersionInfo().GetVersion().GetBuildId()) + //}, time.Second*5, time.Millisecond*200) + // + //// Start deployment workflow 2 and wait for the deployment version to exist + //go s.pollFromDeployment(ctx, tv2) + //s.EventuallyWithT(func(t *assert.CollectT) { + // a := assert.New(t) + // resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(ctx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + // Namespace: s.Namespace().String(), + // Version: &deploymentpb.WorkerDeploymentVersion{ + // DeploymentName: tv2.DeploymentSeries(), + // BuildId: tv2.BuildID(), + // }, + // }) + // a.NoError(err) + // a.Equal(tv2.DeploymentSeries(), resp.GetWorkerDeploymentVersionInfo().GetVersion().GetDeploymentName()) + // a.Equal(tv2.BuildID(), resp.GetWorkerDeploymentVersionInfo().GetVersion().GetBuildId()) + //}, time.Second*5, time.Millisecond*200) + // + //// Set version 1 to be current + //s.setCurrentVersion(ctx, tv1, "", false) + // + //// Use the Delete API to delete version1 from the deployment, which shall remove the + //// version from the task-queue + // + //// Set version 2 to be current + //// this should error out since "task-queue_1" is unversioned now! + //s.setCurrentVersion(ctx, tv2, tv1.BuildID(), false) +} + // todo: add validations for VersionSummaries func (s *WorkerDeploymentSuite) verifyDescribeWorkerDeployment( actualResp *workflowservice.DescribeWorkerDeploymentResponse, @@ -647,19 +676,27 @@ func (s *WorkerDeploymentSuite) verifyDescribeWorkerDeployment( } -func (s *WorkerDeploymentSuite) setAndVerifyRampingVersion(ctx context.Context, tv *testvars.TestVars, unset bool, percentage int, expectedError string, expectedResp *workflowservice.SetWorkerDeploymentRampingVersionResponse) { +func (s *WorkerDeploymentSuite) setAndVerifyRampingVersion( + ctx context.Context, + tv *testvars.TestVars, + unset bool, + percentage int, + ignoreMissingTaskQueues bool, + expectedError string, + expectedResp *workflowservice.SetWorkerDeploymentRampingVersionResponse, +) { version := tv.DeploymentVersionString() - if unset { version = "" percentage = 0 } resp, err := s.FrontendClient().SetWorkerDeploymentRampingVersion(ctx, &workflowservice.SetWorkerDeploymentRampingVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentVersion().GetDeploymentName(), - Version: version, - Percentage: float32(percentage), - Identity: tv.Any().String(), + Namespace: s.Namespace().String(), + DeploymentName: tv.DeploymentVersion().GetDeploymentName(), + Version: version, + Percentage: float32(percentage), + Identity: tv.Any().String(), + IgnoreMissingTaskQueues: ignoreMissingTaskQueues, }) if expectedError != "" { s.Error(err) @@ -671,11 +708,12 @@ func (s *WorkerDeploymentSuite) setAndVerifyRampingVersion(ctx context.Context, s.Equal(expectedResp.GetPreviousPercentage(), resp.GetPreviousPercentage()) } -func (s *WorkerDeploymentSuite) setCurrentVersion(ctx context.Context, tv *testvars.TestVars, previousCurrent string) { +func (s *WorkerDeploymentSuite) setCurrentVersion(ctx context.Context, tv *testvars.TestVars, previousCurrent string, ignoreMissingTaskQueues bool) { resp, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ - Namespace: s.Namespace().String(), - DeploymentName: tv.DeploymentVersion().GetDeploymentName(), - Version: tv.DeploymentVersionString(), + Namespace: s.Namespace().String(), + DeploymentName: tv.DeploymentVersion().GetDeploymentName(), + Version: tv.DeploymentVersionString(), + IgnoreMissingTaskQueues: ignoreMissingTaskQueues, }) s.NoError(err) s.NotNil(resp.PreviousVersion) @@ -689,7 +727,7 @@ func (s *WorkerDeploymentSuite) createVersionsInDeployments(ctx context.Context, deployment := tv.WithDeploymentSeriesNumber(i) version := deployment.WithBuildIDNumber(i) - s.setCurrentVersion(ctx, version, "") + s.setCurrentVersion(ctx, version, "", true) expectedDeployment := s.buildWorkerDeploymentSummary( deployment.DeploymentSeries(),