From ba22f7b5b8f21a39685017d2d8522456ce528c4c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:10:26 +0000 Subject: [PATCH] feat(maps/routeoptimization): minor fields and documentation update (#10861) - [ ] Regenerate this pull request now. feat(maps/routeoptimization): A new message `RouteModifiers` is added feat(maps/routeoptimization): A new field `route_modifiers` is added to message `.google.maps.routeoptimization.v1.Vehicle` feat(maps/routeoptimization): A new field `cost_per_kilometer_below_soft_max` is added to message `.google.maps.routeoptimization.v1.DistanceLimit` docs(maps/routeoptimization): A comment for method `BatchOptimizeTours` in service `RouteOptimization` is changed docs(maps/routeoptimization): A comment for enum value `DEFAULT_SOLVE` in enum `SolvingMode` is changed docs(maps/routeoptimization): A comment for field `validation_errors` in message `.google.maps.routeoptimization.v1.OptimizeToursResponse` is changed docs(maps/routeoptimization): A comment for message `TimeWindow` is changed docs(maps/routeoptimization): A comment for enum value `CODE_UNSPECIFIED` in enum `Code` is changed docs(maps/routeoptimization): A comment for field `reasons` in message `.google.maps.routeoptimization.v1.SkippedShipment` is changed docs(maps/routeoptimization): A comment for enum value `RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD` in enum `Level` is changed docs(maps/routeoptimization): A comment for message `OptimizeToursValidationError` is changed docs(maps/routeoptimization): A comment for field `code` in message `.google.maps.routeoptimization.v1.OptimizeToursValidationError` is changed PiperOrigin-RevId: 674021227 Source-Link: https://togithub.com/googleapis/googleapis/commit/a83432038474bbff69f79a4360a60330bf7eaaa9 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/13dfeeb21d7dd16c6f80f7196e07a2a2ace35eb4 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTNkZmVlYjIxZDdkZDE2YzZmODBmNzE5NmUwN2EyYTJhY2UzNWViNCJ9 BEGIN_NESTED_COMMIT feat(aiplatform): add file_id to SharePointSource feat(aiplatform): add share_point_sources to RagFile PiperOrigin-RevId: 673921028 Source-Link: https://togithub.com/googleapis/googleapis/commit/9382d7406b9ccc54a5b68beeaa6bded7d03a35f6 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/7cb8810d2eae5a61d4972e1e70b7c3eefdb1c96b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2NiODgxMGQyZWFlNWE2MWQ0OTcyZTFlNzBiN2MzZWVmZGIxYzk2YiJ9 END_NESTED_COMMIT --- aiplatform/apiv1beta1/aiplatformpb/io.pb.go | 51 +- .../aiplatformpb/vertex_rag_data.pb.go | 344 +-- ...data.google.maps.routeoptimization.v1.json | 2 +- .../apiv1/route_optimization_client.go | 24 + .../route_optimization_service.pb.go | 2320 +++++++++-------- 5 files changed, 1498 insertions(+), 1243 deletions(-) diff --git a/aiplatform/apiv1beta1/aiplatformpb/io.pb.go b/aiplatform/apiv1beta1/aiplatformpb/io.pb.go index 46f9720389f1..c577c886adfc 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/io.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/io.pb.go @@ -1101,6 +1101,8 @@ type SharePointSources_SharePointSource struct { // The name of the SharePoint site to download from. This can be the site // name or the site id. SharepointSiteName string `protobuf:"bytes,4,opt,name=sharepoint_site_name,json=sharepointSiteName,proto3" json:"sharepoint_site_name,omitempty"` + // Output only. The SharePoint file id. Output only. + FileId string `protobuf:"bytes,9,opt,name=file_id,json=fileId,proto3" json:"file_id,omitempty"` } func (x *SharePointSources_SharePointSource) Reset() { @@ -1205,6 +1207,13 @@ func (x *SharePointSources_SharePointSource) GetSharepointSiteName() string { return "" } +func (x *SharePointSources_SharePointSource) GetFileId() string { + if x != nil { + return x.FileId + } + return "" +} + type isSharePointSources_SharePointSource_FolderSource interface { isSharePointSources_SharePointSource_FolderSource() } @@ -1383,7 +1392,7 @@ var file_google_cloud_aiplatform_v1beta1_io_proto_rawDesc = []byte{ 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, 0x2e, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x61, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb0, 0x04, 0x0a, 0x11, 0x53, + 0x69, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xce, 0x04, 0x0a, 0x11, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, @@ -1392,7 +1401,7 @@ var file_google_cloud_aiplatform_v1beta1_io_proto_rawDesc = []byte{ 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0xa5, 0x03, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0xc3, 0x03, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x68, 0x61, 0x72, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x73, 0x68, @@ -1416,24 +1425,26 @@ var file_google_cloud_aiplatform_v1beta1_io_proto_rawDesc = []byte{ 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x68, 0x61, 0x72, 0x65, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x0f, 0x0a, 0x0d, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, - 0x0c, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0xde, 0x01, - 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x66, 0x6f, + 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x64, + 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0xde, 0x01, 0x0a, 0x23, + 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x42, 0x07, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, + 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, + 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index ba3a943985f9..11f4a5500f75 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -679,6 +679,7 @@ type RagFile struct { // *RagFile_DirectUploadSource // *RagFile_SlackSource // *RagFile_JiraSource + // *RagFile_SharePointSources RagFileSource isRagFile_RagFileSource `protobuf_oneof:"rag_file_source"` // Output only. The resource name of the RagFile. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -774,6 +775,13 @@ func (x *RagFile) GetJiraSource() *JiraSource { return nil } +func (x *RagFile) GetSharePointSources() *SharePointSources { + if x, ok := x.GetRagFileSource().(*RagFile_SharePointSources); ok { + return x.SharePointSources + } + return nil +} + func (x *RagFile) GetName() string { if x != nil { return x.Name @@ -862,6 +870,11 @@ type RagFile_JiraSource struct { JiraSource *JiraSource `protobuf:"bytes,12,opt,name=jira_source,json=jiraSource,proto3,oneof"` } +type RagFile_SharePointSources struct { + // The RagFile is imported from a SharePoint source. + SharePointSources *SharePointSources `protobuf:"bytes,14,opt,name=share_point_sources,json=sharePointSources,proto3,oneof"` +} + func (*RagFile_GcsSource) isRagFile_RagFileSource() {} func (*RagFile_GoogleDriveSource) isRagFile_RagFileSource() {} @@ -872,6 +885,8 @@ func (*RagFile_SlackSource) isRagFile_RagFileSource() {} func (*RagFile_JiraSource) isRagFile_RagFileSource() {} +func (*RagFile_SharePointSources) isRagFile_RagFileSource() {} + // Specifies the size and overlap of chunks for RagFiles. type RagFileChunkingConfig struct { state protoimpl.MessageState @@ -2005,7 +2020,7 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, - 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x80, 0x0a, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, @@ -2035,150 +2050,157 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, + 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 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, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, + 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, + 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, + 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, + 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, + 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, + 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, + 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, + 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, + 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, + 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, - 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 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, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, + 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, - 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, - 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, - 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, - 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, - 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, - 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, - 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, - 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, - 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, - 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, - 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, + 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, + 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, + 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, + 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, + 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, - 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, - 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, - 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x14, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, - 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, - 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, - 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, - 0x16, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, - 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, - 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, + 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x14, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, + 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, + 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, + 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x16, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, + 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, + 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, + 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, + 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, + 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2250,28 +2272,29 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32 26, // 17: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource 27, // 18: google.cloud.aiplatform.v1beta1.RagFile.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource 28, // 19: google.cloud.aiplatform.v1beta1.RagFile.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource - 2, // 20: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType - 23, // 21: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp - 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp - 5, // 23: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus - 9, // 24: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 24, // 25: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 25, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 27, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource - 28, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource - 29, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources - 30, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination - 31, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination - 9, // 32: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 10, // 33: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig - 16, // 34: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 - 14, // 35: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig - 13, // 36: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint - 37, // [37:37] is the sub-list for method output_type - 37, // [37:37] is the sub-list for method input_type - 37, // [37:37] is the sub-list for extension type_name - 37, // [37:37] is the sub-list for extension extendee - 0, // [0:37] is the sub-list for field type_name + 29, // 20: google.cloud.aiplatform.v1beta1.RagFile.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources + 2, // 21: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType + 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp + 23, // 23: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp + 5, // 24: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus + 9, // 25: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 24, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 25, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 27, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource + 28, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource + 29, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources + 30, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination + 31, // 32: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination + 9, // 33: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 10, // 34: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig + 16, // 35: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 + 14, // 36: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig + 13, // 37: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint + 38, // [38:38] is the sub-list for method output_type + 38, // [38:38] is the sub-list for method input_type + 38, // [38:38] is the sub-list for extension type_name + 38, // [38:38] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() } @@ -2528,6 +2551,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { (*RagFile_DirectUploadSource)(nil), (*RagFile_SlackSource)(nil), (*RagFile_JiraSource)(nil), + (*RagFile_SharePointSources)(nil), } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[9].OneofWrappers = []any{ (*ImportRagFilesConfig_GcsSource)(nil), diff --git a/internal/generated/snippets/maps/routeoptimization/apiv1/snippet_metadata.google.maps.routeoptimization.v1.json b/internal/generated/snippets/maps/routeoptimization/apiv1/snippet_metadata.google.maps.routeoptimization.v1.json index bca6dda9e2c8..337e78dcfbc3 100644 --- a/internal/generated/snippets/maps/routeoptimization/apiv1/snippet_metadata.google.maps.routeoptimization.v1.json +++ b/internal/generated/snippets/maps/routeoptimization/apiv1/snippet_metadata.google.maps.routeoptimization.v1.json @@ -14,7 +14,7 @@ { "regionTag": "routeoptimization_v1_generated_RouteOptimization_BatchOptimizeTours_sync", "title": "routeoptimization BatchOptimizeTours Sample", - "description": "BatchOptimizeTours optimizes vehicle tours for one or more `OptimizeToursRequest`\nmessages as a batch.\n\nThis method is a Long Running Operation (LRO). The inputs for optimization\n(`OptimizeToursRequest` messages) and outputs (`OptimizeToursResponse`\nmessages) are read/written from/to Cloud Storage in user-specified\nformat. Like the `OptimizeTours` method, each `OptimizeToursRequest`\ncontains a `ShipmentModel` and returns an `OptimizeToursResponse`\ncontaining `ShipmentRoute`s, which are a set of routes to be performed by\nvehicles minimizing the overall cost.", + "description": "BatchOptimizeTours optimizes vehicle tours for one or more `OptimizeToursRequest`\nmessages as a batch.\n\nThis method is a Long Running Operation (LRO). The inputs for optimization\n(`OptimizeToursRequest` messages) and outputs (`OptimizeToursResponse`\nmessages) are read/written from/to Cloud Storage in user-specified\nformat. Like the `OptimizeTours` method, each `OptimizeToursRequest`\ncontains a `ShipmentModel` and returns an `OptimizeToursResponse`\ncontaining `ShipmentRoute`s, which are a set of routes to be performed by\nvehicles minimizing the overall cost.\n\nThe user can poll `operations.get` to check the status of the LRO: \n\nIf the LRO's `done` field is false, then at least one request is still\nbeing processed. Other requests may have completed successfully and their\nresults are available in GCS.\n\nIf the LRO's `done` field is true, then all requests have been processed.\nAny successfully processed requests will have their results available in\nGCS. Any requests that failed will not have their results available in\nGCS. If the LRO's `error` field is set, then it contains the error from\none of the failed requests.", "file": "Client/BatchOptimizeTours/main.go", "language": "GO", "clientMethod": { diff --git a/maps/routeoptimization/apiv1/route_optimization_client.go b/maps/routeoptimization/apiv1/route_optimization_client.go index 5be15854ee1a..34feb79c944e 100755 --- a/maps/routeoptimization/apiv1/route_optimization_client.go +++ b/maps/routeoptimization/apiv1/route_optimization_client.go @@ -207,6 +207,18 @@ func (c *Client) OptimizeTours(ctx context.Context, req *routeoptimizationpb.Opt // contains a ShipmentModel and returns an OptimizeToursResponse // containing ShipmentRoutes, which are a set of routes to be performed by // vehicles minimizing the overall cost. +// +// The user can poll operations.get to check the status of the LRO: +// +// If the LRO’s done field is false, then at least one request is still +// being processed. Other requests may have completed successfully and their +// results are available in GCS. +// +// If the LRO’s done field is true, then all requests have been processed. +// Any successfully processed requests will have their results available in +// GCS. Any requests that failed will not have their results available in +// GCS. If the LRO’s error field is set, then it contains the error from +// one of the failed requests. func (c *Client) BatchOptimizeTours(ctx context.Context, req *routeoptimizationpb.BatchOptimizeToursRequest, opts ...gax.CallOption) (*BatchOptimizeToursOperation, error) { return c.internalClient.BatchOptimizeTours(ctx, req, opts...) } @@ -600,6 +612,18 @@ func (c *restClient) OptimizeTours(ctx context.Context, req *routeoptimizationpb // contains a ShipmentModel and returns an OptimizeToursResponse // containing ShipmentRoutes, which are a set of routes to be performed by // vehicles minimizing the overall cost. +// +// The user can poll operations.get to check the status of the LRO: +// +// If the LRO’s done field is false, then at least one request is still +// being processed. Other requests may have completed successfully and their +// results are available in GCS. +// +// If the LRO’s done field is true, then all requests have been processed. +// Any successfully processed requests will have their results available in +// GCS. Any requests that failed will not have their results available in +// GCS. If the LRO’s error field is set, then it contains the error from +// one of the failed requests. func (c *restClient) BatchOptimizeTours(ctx context.Context, req *routeoptimizationpb.BatchOptimizeToursRequest, opts ...gax.CallOption) (*BatchOptimizeToursOperation, error) { m := protojson.MarshalOptions{AllowPartial: true, UseEnumNumbers: true} jsonReq, err := m.Marshal(req) diff --git a/maps/routeoptimization/apiv1/routeoptimizationpb/route_optimization_service.pb.go b/maps/routeoptimization/apiv1/routeoptimizationpb/route_optimization_service.pb.go index 939430c69758..df7a02bc5238 100755 --- a/maps/routeoptimization/apiv1/routeoptimizationpb/route_optimization_service.pb.go +++ b/maps/routeoptimization/apiv1/routeoptimizationpb/route_optimization_service.pb.go @@ -106,7 +106,8 @@ func (DataFormat) EnumDescriptor() ([]byte, []int) { type OptimizeToursRequest_SolvingMode int32 const ( - // Solve the model. + // Solve the model. Warnings may be issued in + // [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. OptimizeToursRequest_DEFAULT_SOLVE OptimizeToursRequest_SolvingMode = 0 // Only validates the model without solving it: populates as many // [OptimizeToursResponse.validation_errors][google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors] @@ -409,7 +410,7 @@ func (x Vehicle_TravelMode) Number() protoreflect.EnumNumber { // Deprecated: Use Vehicle_TravelMode.Descriptor instead. func (Vehicle_TravelMode) EnumDescriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10, 0} } // Policy on how a vehicle can be unloaded. Applies only to shipments having @@ -467,7 +468,7 @@ func (x Vehicle_UnloadingPolicy) Number() protoreflect.EnumNumber { // Deprecated: Use Vehicle_UnloadingPolicy.Descriptor instead. func (Vehicle_UnloadingPolicy) EnumDescriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 1} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10, 1} } // Code identifying the reason type. The order here is meaningless. In @@ -476,8 +477,7 @@ func (Vehicle_UnloadingPolicy) EnumDescriptor() ([]byte, []int) { type SkippedShipment_Reason_Code int32 const ( - // This should never be used. If we are unable to understand why a - // shipment was skipped, we simply return an empty set of reasons. + // This should never be used. SkippedShipment_Reason_CODE_UNSPECIFIED SkippedShipment_Reason_Code = 0 // There is no vehicle in the model making all shipments infeasible. SkippedShipment_Reason_NO_VEHICLE SkippedShipment_Reason_Code = 1 @@ -559,7 +559,7 @@ func (x SkippedShipment_Reason_Code) Number() protoreflect.EnumNumber { // Deprecated: Use SkippedShipment_Reason_Code.Descriptor instead. func (SkippedShipment_Reason_Code) EnumDescriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 0, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{18, 0, 0} } // Expresses the different constraint relaxation levels, which are @@ -581,7 +581,8 @@ const ( // them. InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_RELAX_VISIT_TIMES_AFTER_THRESHOLD InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 1 // Same as `RELAX_VISIT_TIMES_AFTER_THRESHOLD`, but the visit sequence - // is also relaxed: visits remain simply bound to their vehicle. + // is also relaxed: visits can only be performed by this vehicle, but + // can potentially become unperformed. InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 2 // Same as `RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD`, but the // vehicle is also relaxed: visits are completely free at or after the @@ -629,7 +630,7 @@ func (x InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) Number // Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level.Descriptor instead. func (InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) EnumDescriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0, 0, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20, 0, 0, 0} } // Request to batch optimize tours as an asynchronous operation. @@ -1142,7 +1143,8 @@ type OptimizeToursResponse struct { // List of all the validation errors that we were able to detect // independently. See the "MULTIPLE ERRORS" explanation for the // [OptimizeToursValidationError][google.maps.routeoptimization.v1.OptimizeToursValidationError] - // message. + // message. Instead of errors, this will include warnings in the case + // `solving_mode` is `DEFAULT_SOLVE`. ValidationErrors []*OptimizeToursValidationError `protobuf:"bytes,5,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"` // Duration, distance and usage metrics for this solution. Metrics *OptimizeToursResponse_Metrics `protobuf:"bytes,6,opt,name=metrics,proto3" json:"metrics,omitempty"` @@ -1905,6 +1907,93 @@ func (x *ShipmentTypeRequirement) GetRequirementMode() ShipmentTypeRequirement_R return ShipmentTypeRequirement_REQUIREMENT_MODE_UNSPECIFIED } +// Encapsulates a set of optional conditions to satisfy when calculating +// vehicle routes. This is similar to `RouteModifiers` in the Google Maps +// Platform Routes Preferred API; see: +// https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers. +type RouteModifiers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Specifies whether to avoid toll roads where reasonable. Preference will be + // given to routes not containing toll roads. Applies only to motorized travel + // modes. + AvoidTolls bool `protobuf:"varint,2,opt,name=avoid_tolls,json=avoidTolls,proto3" json:"avoid_tolls,omitempty"` + // Specifies whether to avoid highways where reasonable. Preference will be + // given to routes not containing highways. Applies only to motorized travel + // modes. + AvoidHighways bool `protobuf:"varint,3,opt,name=avoid_highways,json=avoidHighways,proto3" json:"avoid_highways,omitempty"` + // Specifies whether to avoid ferries where reasonable. Preference will be + // given to routes not containing travel by ferries. Applies only to motorized + // travel modes. + AvoidFerries bool `protobuf:"varint,4,opt,name=avoid_ferries,json=avoidFerries,proto3" json:"avoid_ferries,omitempty"` + // Optional. Specifies whether to avoid navigating indoors where reasonable. + // Preference will be given to routes not containing indoor navigation. + // Applies only to the `WALKING` travel mode. + AvoidIndoor bool `protobuf:"varint,5,opt,name=avoid_indoor,json=avoidIndoor,proto3" json:"avoid_indoor,omitempty"` +} + +func (x *RouteModifiers) Reset() { + *x = RouteModifiers{} + if protoimpl.UnsafeEnabled { + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteModifiers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteModifiers) ProtoMessage() {} + +func (x *RouteModifiers) ProtoReflect() protoreflect.Message { + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteModifiers.ProtoReflect.Descriptor instead. +func (*RouteModifiers) Descriptor() ([]byte, []int) { + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9} +} + +func (x *RouteModifiers) GetAvoidTolls() bool { + if x != nil { + return x.AvoidTolls + } + return false +} + +func (x *RouteModifiers) GetAvoidHighways() bool { + if x != nil { + return x.AvoidHighways + } + return false +} + +func (x *RouteModifiers) GetAvoidFerries() bool { + if x != nil { + return x.AvoidFerries + } + return false +} + +func (x *RouteModifiers) GetAvoidIndoor() bool { + if x != nil { + return x.AvoidIndoor + } + return false +} + // Models a vehicle in a shipment problem. Solving a shipment problem will // build a route starting from `start_location` and ending at `end_location` // for this vehicle. A route is a sequence of visits (see `ShipmentRoute`). @@ -1919,6 +2008,9 @@ type Vehicle struct { // The travel mode which affects the roads usable by the vehicle and its // speed. See also `travel_duration_multiple`. TravelMode Vehicle_TravelMode `protobuf:"varint,1,opt,name=travel_mode,json=travelMode,proto3,enum=google.maps.routeoptimization.v1.Vehicle_TravelMode" json:"travel_mode,omitempty"` + // A set of conditions to satisfy that affect the way routes are calculated + // for the given vehicle. + RouteModifiers *RouteModifiers `protobuf:"bytes,2,opt,name=route_modifiers,json=routeModifiers,proto3" json:"route_modifiers,omitempty"` // Geographic location where the vehicle starts before picking up any // shipments. If not specified, the vehicle starts at its first pickup. // If the shipment model has duration and distance matrices, `start_location` @@ -2082,7 +2174,7 @@ type Vehicle struct { func (x *Vehicle) Reset() { *x = Vehicle{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2095,7 +2187,7 @@ func (x *Vehicle) String() string { func (*Vehicle) ProtoMessage() {} func (x *Vehicle) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2108,7 +2200,7 @@ func (x *Vehicle) ProtoReflect() protoreflect.Message { // Deprecated: Use Vehicle.ProtoReflect.Descriptor instead. func (*Vehicle) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10} } func (x *Vehicle) GetDisplayName() string { @@ -2125,6 +2217,13 @@ func (x *Vehicle) GetTravelMode() Vehicle_TravelMode { return Vehicle_TRAVEL_MODE_UNSPECIFIED } +func (x *Vehicle) GetRouteModifiers() *RouteModifiers { + if x != nil { + return x.RouteModifiers + } + return nil +} + func (x *Vehicle) GetStartLocation() *latlng.LatLng { if x != nil { return x.StartLocation @@ -2305,8 +2404,9 @@ func (x *Vehicle) GetIgnore() bool { // and should respect: // ``` // -// 0 <= `start_time` <= `soft_start_time` <= `end_time` and -// 0 <= `start_time` <= `soft_end_time` <= `end_time`. +// 0 <= `start_time` <= `end_time` and +// 0 <= `start_time` <= `soft_start_time` and +// 0 <= `soft_end_time` <= `end_time`. // // ``` type TimeWindow struct { @@ -2357,7 +2457,7 @@ type TimeWindow struct { func (x *TimeWindow) Reset() { *x = TimeWindow{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2370,7 +2470,7 @@ func (x *TimeWindow) String() string { func (*TimeWindow) ProtoMessage() {} func (x *TimeWindow) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2383,7 +2483,7 @@ func (x *TimeWindow) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeWindow.ProtoReflect.Descriptor instead. func (*TimeWindow) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{11} } func (x *TimeWindow) GetStartTime() *timestamppb.Timestamp { @@ -2448,6 +2548,16 @@ type DistanceLimit struct { // If defined soft_max_meters must be less than max_meters and must be // nonnegative. SoftMaxMeters *int64 `protobuf:"varint,2,opt,name=soft_max_meters,json=softMaxMeters,proto3,oneof" json:"soft_max_meters,omitempty"` + // Cost per kilometer incurred, increasing up to `soft_max_meters`, with + // formula: + // ``` + // + // min(distance_meters, soft_max_meters) / 1000.0 * + // cost_per_kilometer_below_soft_max. + // + // ``` + // This cost is not supported in `route_distance_limit`. + CostPerKilometerBelowSoftMax *float64 `protobuf:"fixed64,4,opt,name=cost_per_kilometer_below_soft_max,json=costPerKilometerBelowSoftMax,proto3,oneof" json:"cost_per_kilometer_below_soft_max,omitempty"` // Cost per kilometer incurred if distance is above `soft_max_meters` limit. // The additional cost is 0 if the distance is under the limit, otherwise the // formula used to compute the cost is the following: @@ -2464,7 +2574,7 @@ type DistanceLimit struct { func (x *DistanceLimit) Reset() { *x = DistanceLimit{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2477,7 +2587,7 @@ func (x *DistanceLimit) String() string { func (*DistanceLimit) ProtoMessage() {} func (x *DistanceLimit) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2490,7 +2600,7 @@ func (x *DistanceLimit) ProtoReflect() protoreflect.Message { // Deprecated: Use DistanceLimit.ProtoReflect.Descriptor instead. func (*DistanceLimit) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{11} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{12} } func (x *DistanceLimit) GetMaxMeters() int64 { @@ -2507,6 +2617,13 @@ func (x *DistanceLimit) GetSoftMaxMeters() int64 { return 0 } +func (x *DistanceLimit) GetCostPerKilometerBelowSoftMax() float64 { + if x != nil && x.CostPerKilometerBelowSoftMax != nil { + return *x.CostPerKilometerBelowSoftMax + } + return 0 +} + func (x *DistanceLimit) GetCostPerKilometerAboveSoftMax() float64 { if x != nil && x.CostPerKilometerAboveSoftMax != nil { return *x.CostPerKilometerAboveSoftMax @@ -2568,7 +2685,7 @@ type TransitionAttributes struct { func (x *TransitionAttributes) Reset() { *x = TransitionAttributes{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2581,7 +2698,7 @@ func (x *TransitionAttributes) String() string { func (*TransitionAttributes) ProtoMessage() {} func (x *TransitionAttributes) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2594,7 +2711,7 @@ func (x *TransitionAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use TransitionAttributes.ProtoReflect.Descriptor instead. func (*TransitionAttributes) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{12} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{13} } func (x *TransitionAttributes) GetSrcTag() string { @@ -2679,7 +2796,7 @@ type Waypoint struct { func (x *Waypoint) Reset() { *x = Waypoint{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2692,7 +2809,7 @@ func (x *Waypoint) String() string { func (*Waypoint) ProtoMessage() {} func (x *Waypoint) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2705,7 +2822,7 @@ func (x *Waypoint) ProtoReflect() protoreflect.Message { // Deprecated: Use Waypoint.ProtoReflect.Descriptor instead. func (*Waypoint) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{13} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{14} } func (m *Waypoint) GetLocationType() isWaypoint_LocationType { @@ -2773,7 +2890,7 @@ type Location struct { func (x *Location) Reset() { *x = Location{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2786,7 +2903,7 @@ func (x *Location) String() string { func (*Location) ProtoMessage() {} func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2799,7 +2916,7 @@ func (x *Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Location.ProtoReflect.Descriptor instead. func (*Location) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{14} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15} } func (x *Location) GetLatLng() *latlng.LatLng { @@ -2841,7 +2958,7 @@ type BreakRule struct { func (x *BreakRule) Reset() { *x = BreakRule{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2854,7 +2971,7 @@ func (x *BreakRule) String() string { func (*BreakRule) ProtoMessage() {} func (x *BreakRule) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2867,7 +2984,7 @@ func (x *BreakRule) ProtoReflect() protoreflect.Message { // Deprecated: Use BreakRule.ProtoReflect.Descriptor instead. func (*BreakRule) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16} } func (x *BreakRule) GetBreakRequests() []*BreakRule_BreakRequest { @@ -3055,7 +3172,7 @@ type ShipmentRoute struct { func (x *ShipmentRoute) Reset() { *x = ShipmentRoute{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3068,7 +3185,7 @@ func (x *ShipmentRoute) String() string { func (*ShipmentRoute) ProtoMessage() {} func (x *ShipmentRoute) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,7 +3198,7 @@ func (x *ShipmentRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute.ProtoReflect.Descriptor instead. func (*ShipmentRoute) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17} } func (x *ShipmentRoute) GetVehicleIndex() int32 { @@ -3184,14 +3301,15 @@ type SkippedShipment struct { // specified in the `Shipment`. Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` // A list of reasons that explain why the shipment was skipped. See comment - // above `Reason`. + // above `Reason`. If we are unable to understand why a shipment was skipped, + // reasons will not be set. Reasons []*SkippedShipment_Reason `protobuf:"bytes,3,rep,name=reasons,proto3" json:"reasons,omitempty"` } func (x *SkippedShipment) Reset() { *x = SkippedShipment{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3204,7 +3322,7 @@ func (x *SkippedShipment) String() string { func (*SkippedShipment) ProtoMessage() {} func (x *SkippedShipment) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3217,7 +3335,7 @@ func (x *SkippedShipment) ProtoReflect() protoreflect.Message { // Deprecated: Use SkippedShipment.ProtoReflect.Descriptor instead. func (*SkippedShipment) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{18} } func (x *SkippedShipment) GetIndex() int32 { @@ -3289,7 +3407,7 @@ type AggregatedMetrics struct { func (x *AggregatedMetrics) Reset() { *x = AggregatedMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3302,7 +3420,7 @@ func (x *AggregatedMetrics) String() string { func (*AggregatedMetrics) ProtoMessage() {} func (x *AggregatedMetrics) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3315,7 +3433,7 @@ func (x *AggregatedMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use AggregatedMetrics.ProtoReflect.Descriptor instead. func (*AggregatedMetrics) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{18} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19} } func (x *AggregatedMetrics) GetPerformedShipmentCount() int32 { @@ -3404,7 +3522,7 @@ type InjectedSolutionConstraint struct { func (x *InjectedSolutionConstraint) Reset() { *x = InjectedSolutionConstraint{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3417,7 +3535,7 @@ func (x *InjectedSolutionConstraint) String() string { func (*InjectedSolutionConstraint) ProtoMessage() {} func (x *InjectedSolutionConstraint) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3430,7 +3548,7 @@ func (x *InjectedSolutionConstraint) ProtoReflect() protoreflect.Message { // Deprecated: Use InjectedSolutionConstraint.ProtoReflect.Descriptor instead. func (*InjectedSolutionConstraint) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20} } func (x *InjectedSolutionConstraint) GetRoutes() []*ShipmentRoute { @@ -3454,7 +3572,8 @@ func (x *InjectedSolutionConstraint) GetConstraintRelaxations() []*InjectedSolut return nil } -// Describes an error encountered when validating an `OptimizeToursRequest`. +// Describes an error or warning encountered when validating an +// `OptimizeToursRequest`. type OptimizeToursValidationError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3542,8 +3661,8 @@ type OptimizeToursValidationError struct { // - TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811; // - TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812; // - TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813; - // - TIME_WINDOW_SOFT_START_TIME_AFTER_END_TIME = 2814; - // - TIME_WINDOW_START_TIME_AFTER_SOFT_END_TIME = 2815; + // - TIME_WINDOW_SOFT_START_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2819; + // - TIME_WINDOW_SOFT_END_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2820; // - TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816; // - TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS // = 2817; @@ -3664,6 +3783,14 @@ type OptimizeToursValidationError struct { // - VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405; // // * PRECEDENCE_ERROR = 46; + // - PRECEDENCE_RULE_MISSING_FIRST_INDEX = 4600; + // - PRECEDENCE_RULE_MISSING_SECOND_INDEX = 4601; + // - PRECEDENCE_RULE_FIRST_INDEX_OUT_OF_BOUNDS = 4602; + // - PRECEDENCE_RULE_SECOND_INDEX_OUT_OF_BOUNDS = 4603; + // - PRECEDENCE_RULE_DUPLICATE_INDEX = 4604; + // - PRECEDENCE_RULE_INEXISTENT_FIRST_VISIT_REQUEST = 4605; + // - PRECEDENCE_RULE_INEXISTENT_SECOND_VISIT_REQUEST = 4606; + // // * BREAK_ERROR = 48; // - BREAK_RULE_EMPTY = 4800; // - BREAK_REQUEST_UNSPECIFIED_DURATION = 4801; @@ -3713,6 +3840,13 @@ type OptimizeToursValidationError struct { // * DURATION_SECONDS_MATRIX_ERROR = 56; // - DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600; // - DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601; + // + // * WARNING = 9; + // - WARNING_INJECTED_FIRST_SOLUTION = 90; + // - WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_SHIPMENTS_REMOVED + // = 9000; + // - WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES + // = 9001; Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // The error display name. DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` @@ -3742,7 +3876,7 @@ type OptimizeToursValidationError struct { func (x *OptimizeToursValidationError) Reset() { *x = OptimizeToursValidationError{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3755,7 +3889,7 @@ func (x *OptimizeToursValidationError) String() string { func (*OptimizeToursValidationError) ProtoMessage() {} func (x *OptimizeToursValidationError) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3768,7 +3902,7 @@ func (x *OptimizeToursValidationError) ProtoReflect() protoreflect.Message { // Deprecated: Use OptimizeToursValidationError.ProtoReflect.Descriptor instead. func (*OptimizeToursValidationError) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{21} } func (x *OptimizeToursValidationError) GetCode() int32 { @@ -3826,7 +3960,7 @@ type InputConfig struct { func (x *InputConfig) Reset() { *x = InputConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3839,7 +3973,7 @@ func (x *InputConfig) String() string { func (*InputConfig) ProtoMessage() {} func (x *InputConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3852,7 +3986,7 @@ func (x *InputConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InputConfig.ProtoReflect.Descriptor instead. func (*InputConfig) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{21} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{22} } func (m *InputConfig) GetSource() isInputConfig_Source { @@ -3908,7 +4042,7 @@ type OutputConfig struct { func (x *OutputConfig) Reset() { *x = OutputConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3921,7 +4055,7 @@ func (x *OutputConfig) String() string { func (*OutputConfig) ProtoMessage() {} func (x *OutputConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3934,7 +4068,7 @@ func (x *OutputConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OutputConfig.ProtoReflect.Descriptor instead. func (*OutputConfig) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{22} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{23} } func (m *OutputConfig) GetDestination() isOutputConfig_Destination { @@ -3983,7 +4117,7 @@ type GcsSource struct { func (x *GcsSource) Reset() { *x = GcsSource{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3996,7 +4130,7 @@ func (x *GcsSource) String() string { func (*GcsSource) ProtoMessage() {} func (x *GcsSource) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4009,7 +4143,7 @@ func (x *GcsSource) ProtoReflect() protoreflect.Message { // Deprecated: Use GcsSource.ProtoReflect.Descriptor instead. func (*GcsSource) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{23} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{24} } func (x *GcsSource) GetUri() string { @@ -4033,7 +4167,7 @@ type GcsDestination struct { func (x *GcsDestination) Reset() { *x = GcsDestination{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4046,7 +4180,7 @@ func (x *GcsDestination) String() string { func (*GcsDestination) ProtoMessage() {} func (x *GcsDestination) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4059,7 +4193,7 @@ func (x *GcsDestination) ProtoReflect() protoreflect.Message { // Deprecated: Use GcsDestination.ProtoReflect.Descriptor instead. func (*GcsDestination) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{24} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{25} } func (x *GcsDestination) GetUri() string { @@ -4087,7 +4221,7 @@ type BatchOptimizeToursRequest_AsyncModelConfig struct { func (x *BatchOptimizeToursRequest_AsyncModelConfig) Reset() { *x = BatchOptimizeToursRequest_AsyncModelConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4100,7 +4234,7 @@ func (x *BatchOptimizeToursRequest_AsyncModelConfig) String() string { func (*BatchOptimizeToursRequest_AsyncModelConfig) ProtoMessage() {} func (x *BatchOptimizeToursRequest_AsyncModelConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4179,7 +4313,7 @@ type OptimizeToursResponse_Metrics struct { func (x *OptimizeToursResponse_Metrics) Reset() { *x = OptimizeToursResponse_Metrics{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4192,7 +4326,7 @@ func (x *OptimizeToursResponse_Metrics) String() string { func (*OptimizeToursResponse_Metrics) ProtoMessage() {} func (x *OptimizeToursResponse_Metrics) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4283,7 +4417,7 @@ type ShipmentModel_DurationDistanceMatrix struct { func (x *ShipmentModel_DurationDistanceMatrix) Reset() { *x = ShipmentModel_DurationDistanceMatrix{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4296,7 +4430,7 @@ func (x *ShipmentModel_DurationDistanceMatrix) String() string { func (*ShipmentModel_DurationDistanceMatrix) ProtoMessage() {} func (x *ShipmentModel_DurationDistanceMatrix) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4356,7 +4490,7 @@ type ShipmentModel_PrecedenceRule struct { func (x *ShipmentModel_PrecedenceRule) Reset() { *x = ShipmentModel_PrecedenceRule{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4369,7 +4503,7 @@ func (x *ShipmentModel_PrecedenceRule) String() string { func (*ShipmentModel_PrecedenceRule) ProtoMessage() {} func (x *ShipmentModel_PrecedenceRule) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4438,7 +4572,7 @@ type ShipmentModel_DurationDistanceMatrix_Row struct { func (x *ShipmentModel_DurationDistanceMatrix_Row) Reset() { *x = ShipmentModel_DurationDistanceMatrix_Row{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4451,7 +4585,7 @@ func (x *ShipmentModel_DurationDistanceMatrix_Row) String() string { func (*ShipmentModel_DurationDistanceMatrix_Row) ProtoMessage() {} func (x *ShipmentModel_DurationDistanceMatrix_Row) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4559,7 +4693,7 @@ type Shipment_VisitRequest struct { func (x *Shipment_VisitRequest) Reset() { *x = Shipment_VisitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4572,7 +4706,7 @@ func (x *Shipment_VisitRequest) String() string { func (*Shipment_VisitRequest) ProtoMessage() {} func (x *Shipment_VisitRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4683,7 +4817,7 @@ type Shipment_Load struct { func (x *Shipment_Load) Reset() { *x = Shipment_Load{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4696,7 +4830,7 @@ func (x *Shipment_Load) String() string { func (*Shipment_Load) ProtoMessage() {} func (x *Shipment_Load) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4750,7 +4884,7 @@ type Vehicle_LoadLimit struct { func (x *Vehicle_LoadLimit) Reset() { *x = Vehicle_LoadLimit{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4763,7 +4897,7 @@ func (x *Vehicle_LoadLimit) String() string { func (*Vehicle_LoadLimit) ProtoMessage() {} func (x *Vehicle_LoadLimit) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4776,7 +4910,7 @@ func (x *Vehicle_LoadLimit) ProtoReflect() protoreflect.Message { // Deprecated: Use Vehicle_LoadLimit.ProtoReflect.Descriptor instead. func (*Vehicle_LoadLimit) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10, 0} } func (x *Vehicle_LoadLimit) GetMaxLoad() int64 { @@ -4874,7 +5008,7 @@ type Vehicle_DurationLimit struct { func (x *Vehicle_DurationLimit) Reset() { *x = Vehicle_DurationLimit{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4887,7 +5021,7 @@ func (x *Vehicle_DurationLimit) String() string { func (*Vehicle_DurationLimit) ProtoMessage() {} func (x *Vehicle_DurationLimit) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4900,7 +5034,7 @@ func (x *Vehicle_DurationLimit) ProtoReflect() protoreflect.Message { // Deprecated: Use Vehicle_DurationLimit.ProtoReflect.Descriptor instead. func (*Vehicle_DurationLimit) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 1} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10, 1} } func (x *Vehicle_DurationLimit) GetMaxDuration() *durationpb.Duration { @@ -4962,7 +5096,7 @@ type Vehicle_LoadLimit_Interval struct { func (x *Vehicle_LoadLimit_Interval) Reset() { *x = Vehicle_LoadLimit_Interval{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4975,7 +5109,7 @@ func (x *Vehicle_LoadLimit_Interval) String() string { func (*Vehicle_LoadLimit_Interval) ProtoMessage() {} func (x *Vehicle_LoadLimit_Interval) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4988,7 +5122,7 @@ func (x *Vehicle_LoadLimit_Interval) ProtoReflect() protoreflect.Message { // Deprecated: Use Vehicle_LoadLimit_Interval.ProtoReflect.Descriptor instead. func (*Vehicle_LoadLimit_Interval) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10, 0, 0} } func (x *Vehicle_LoadLimit_Interval) GetMin() int64 { @@ -5026,7 +5160,7 @@ type BreakRule_BreakRequest struct { func (x *BreakRule_BreakRequest) Reset() { *x = BreakRule_BreakRequest{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5039,7 +5173,7 @@ func (x *BreakRule_BreakRequest) String() string { func (*BreakRule_BreakRequest) ProtoMessage() {} func (x *BreakRule_BreakRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5052,7 +5186,7 @@ func (x *BreakRule_BreakRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BreakRule_BreakRequest.ProtoReflect.Descriptor instead. func (*BreakRule_BreakRequest) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 0} } func (x *BreakRule_BreakRequest) GetEarliestStartTime() *timestamppb.Timestamp { @@ -5130,7 +5264,7 @@ type BreakRule_FrequencyConstraint struct { func (x *BreakRule_FrequencyConstraint) Reset() { *x = BreakRule_FrequencyConstraint{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5143,7 +5277,7 @@ func (x *BreakRule_FrequencyConstraint) String() string { func (*BreakRule_FrequencyConstraint) ProtoMessage() {} func (x *BreakRule_FrequencyConstraint) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5156,7 +5290,7 @@ func (x *BreakRule_FrequencyConstraint) ProtoReflect() protoreflect.Message { // Deprecated: Use BreakRule_FrequencyConstraint.ProtoReflect.Descriptor instead. func (*BreakRule_FrequencyConstraint) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15, 1} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 1} } func (x *BreakRule_FrequencyConstraint) GetMinBreakDuration() *durationpb.Duration { @@ -5227,7 +5361,7 @@ type ShipmentRoute_Visit struct { func (x *ShipmentRoute_Visit) Reset() { *x = ShipmentRoute_Visit{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5240,7 +5374,7 @@ func (x *ShipmentRoute_Visit) String() string { func (*ShipmentRoute_Visit) ProtoMessage() {} func (x *ShipmentRoute_Visit) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5253,7 +5387,7 @@ func (x *ShipmentRoute_Visit) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute_Visit.ProtoReflect.Descriptor instead. func (*ShipmentRoute_Visit) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 0} } func (x *ShipmentRoute_Visit) GetShipmentIndex() int32 { @@ -5380,7 +5514,7 @@ type ShipmentRoute_Transition struct { func (x *ShipmentRoute_Transition) Reset() { *x = ShipmentRoute_Transition{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5393,7 +5527,7 @@ func (x *ShipmentRoute_Transition) String() string { func (*ShipmentRoute_Transition) ProtoMessage() {} func (x *ShipmentRoute_Transition) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5406,7 +5540,7 @@ func (x *ShipmentRoute_Transition) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute_Transition.ProtoReflect.Descriptor instead. func (*ShipmentRoute_Transition) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 1} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 1} } func (x *ShipmentRoute_Transition) GetTravelDuration() *durationpb.Duration { @@ -5496,7 +5630,7 @@ type ShipmentRoute_VehicleLoad struct { func (x *ShipmentRoute_VehicleLoad) Reset() { *x = ShipmentRoute_VehicleLoad{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5509,7 +5643,7 @@ func (x *ShipmentRoute_VehicleLoad) String() string { func (*ShipmentRoute_VehicleLoad) ProtoMessage() {} func (x *ShipmentRoute_VehicleLoad) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5522,7 +5656,7 @@ func (x *ShipmentRoute_VehicleLoad) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute_VehicleLoad.ProtoReflect.Descriptor instead. func (*ShipmentRoute_VehicleLoad) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 2} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 2} } func (x *ShipmentRoute_VehicleLoad) GetAmount() int64 { @@ -5548,7 +5682,7 @@ type ShipmentRoute_EncodedPolyline struct { func (x *ShipmentRoute_EncodedPolyline) Reset() { *x = ShipmentRoute_EncodedPolyline{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5561,7 +5695,7 @@ func (x *ShipmentRoute_EncodedPolyline) String() string { func (*ShipmentRoute_EncodedPolyline) ProtoMessage() {} func (x *ShipmentRoute_EncodedPolyline) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5574,7 +5708,7 @@ func (x *ShipmentRoute_EncodedPolyline) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute_EncodedPolyline.ProtoReflect.Descriptor instead. func (*ShipmentRoute_EncodedPolyline) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 3} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 3} } func (x *ShipmentRoute_EncodedPolyline) GetPoints() string { @@ -5599,7 +5733,7 @@ type ShipmentRoute_Break struct { func (x *ShipmentRoute_Break) Reset() { *x = ShipmentRoute_Break{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5612,7 +5746,7 @@ func (x *ShipmentRoute_Break) String() string { func (*ShipmentRoute_Break) ProtoMessage() {} func (x *ShipmentRoute_Break) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5625,7 +5759,7 @@ func (x *ShipmentRoute_Break) ProtoReflect() protoreflect.Message { // Deprecated: Use ShipmentRoute_Break.ProtoReflect.Descriptor instead. func (*ShipmentRoute_Break) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 4} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 4} } func (x *ShipmentRoute_Break) GetStartTime() *timestamppb.Timestamp { @@ -5690,7 +5824,7 @@ type SkippedShipment_Reason struct { func (x *SkippedShipment_Reason) Reset() { *x = SkippedShipment_Reason{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5703,7 +5837,7 @@ func (x *SkippedShipment_Reason) String() string { func (*SkippedShipment_Reason) ProtoMessage() {} func (x *SkippedShipment_Reason) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5716,7 +5850,7 @@ func (x *SkippedShipment_Reason) ProtoReflect() protoreflect.Message { // Deprecated: Use SkippedShipment_Reason.ProtoReflect.Descriptor instead. func (*SkippedShipment_Reason) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{18, 0} } func (x *SkippedShipment_Reason) GetCode() SkippedShipment_Reason_Code { @@ -5770,7 +5904,7 @@ type InjectedSolutionConstraint_ConstraintRelaxation struct { func (x *InjectedSolutionConstraint_ConstraintRelaxation) Reset() { *x = InjectedSolutionConstraint_ConstraintRelaxation{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5783,7 +5917,7 @@ func (x *InjectedSolutionConstraint_ConstraintRelaxation) String() string { func (*InjectedSolutionConstraint_ConstraintRelaxation) ProtoMessage() {} func (x *InjectedSolutionConstraint_ConstraintRelaxation) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5796,7 +5930,7 @@ func (x *InjectedSolutionConstraint_ConstraintRelaxation) ProtoReflect() protore // Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation.ProtoReflect.Descriptor instead. func (*InjectedSolutionConstraint_ConstraintRelaxation) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20, 0} } func (x *InjectedSolutionConstraint_ConstraintRelaxation) GetRelaxations() []*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation { @@ -5873,7 +6007,7 @@ type InjectedSolutionConstraint_ConstraintRelaxation_Relaxation struct { func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) Reset() { *x = InjectedSolutionConstraint_ConstraintRelaxation_Relaxation{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5886,7 +6020,7 @@ func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) String() st func (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) ProtoMessage() {} func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5899,7 +6033,7 @@ func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) ProtoReflec // Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation_Relaxation.ProtoReflect.Descriptor instead. func (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20, 0, 0} } func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) GetLevel() InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level { @@ -5951,7 +6085,7 @@ type OptimizeToursValidationError_FieldReference struct { func (x *OptimizeToursValidationError_FieldReference) Reset() { *x = OptimizeToursValidationError_FieldReference{} if protoimpl.UnsafeEnabled { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5964,7 +6098,7 @@ func (x *OptimizeToursValidationError_FieldReference) String() string { func (*OptimizeToursValidationError_FieldReference) ProtoMessage() {} func (x *OptimizeToursValidationError_FieldReference) ProtoReflect() protoreflect.Message { - mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54] + mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5977,7 +6111,7 @@ func (x *OptimizeToursValidationError_FieldReference) ProtoReflect() protoreflec // Deprecated: Use OptimizeToursValidationError_FieldReference.ProtoReflect.Descriptor instead. func (*OptimizeToursValidationError_FieldReference) Descriptor() ([]byte, []int) { - return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20, 0} + return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{21, 0} } func (x *OptimizeToursValidationError_FieldReference) GetName() string { @@ -6522,757 +6656,781 @@ var file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDe 0x5f, 0x41, 0x54, 0x5f, 0x50, 0x49, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x41, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, - 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x22, 0xfb, 0x17, 0x0a, 0x07, 0x56, 0x65, 0x68, 0x69, - 0x63, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, - 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, - 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0e, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x0c, - 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x77, 0x61, 0x79, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, - 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x57, 0x61, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x61, 0x67, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x61, - 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x73, 0x12, 0x5a, 0x0a, - 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, + 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x22, 0xa5, 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x76, + 0x6f, 0x69, 0x64, 0x5f, 0x74, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x54, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x61, + 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, + 0x79, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x66, 0x65, 0x72, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x76, 0x6f, 0x69, 0x64, + 0x46, 0x65, 0x72, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x61, 0x76, 0x6f, 0x69, 0x64, + 0x5f, 0x69, 0x6e, 0x64, 0x6f, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x0b, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x49, 0x6e, 0x64, 0x6f, 0x6f, 0x72, 0x22, + 0xd6, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, + 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x73, 0x12, 0x3d, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, - 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5a, 0x0a, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, - 0x6f, 0x75, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x73, 0x74, 0x50, - 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x75, 0x72, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x54, - 0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x63, - 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, - 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x64, - 0x5f, 0x69, 0x66, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x73, 0x65, 0x64, 0x49, 0x66, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x69, 0x0a, 0x14, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, - 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x6b, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x76, 0x65, - 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, - 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, - 0x13, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x61, 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, - 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, - 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x72, 0x75, - 0x6c, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x65, 0x61, - 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x1a, 0xb0, - 0x03, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x08, - 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, - 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0d, - 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, - 0x12, 0x3d, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, - 0x74, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x55, - 0x6e, 0x69, 0x74, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x12, - 0x6c, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x76, 0x65, + 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x12, 0x3a, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0e, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, + 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x36, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x77, + 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x57, 0x61, + 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x73, + 0x12, 0x5a, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x68, 0x0a, - 0x11, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x12, 0x56, 0x0a, 0x10, + 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x12, 0x3d, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5a, 0x0a, 0x0b, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x61, 0x64, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, + 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x63, 0x6f, + 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x73, + 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x68, + 0x6f, 0x75, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x63, 0x6f, 0x73, 0x74, 0x50, + 0x65, 0x72, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2c, + 0x0a, 0x12, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, + 0x50, 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x09, 0x66, 0x69, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x16, 0x75, + 0x73, 0x65, 0x64, 0x5f, 0x69, 0x66, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x5f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x73, 0x65, + 0x64, 0x49, 0x66, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x69, 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x6b, 0x0a, 0x15, 0x74, 0x72, + 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, + 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x13, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x61, 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, + 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x23, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, - 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x3b, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, - 0x64, 0x1a, 0xe9, 0x03, 0x0a, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x63, 0x6c, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, + 0x73, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, + 0x73, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x62, 0x72, 0x65, 0x61, 0x6b, + 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, + 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x1a, 0xb0, 0x03, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x1e, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x22, 0x0a, 0x0d, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x4c, + 0x6f, 0x61, 0x64, 0x12, 0x3d, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, + 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, + 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x53, 0x6f, 0x66, 0x74, 0x4d, + 0x61, 0x78, 0x12, 0x6c, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x11, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x12, 0x68, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x4c, 0x6f, + 0x61, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x3b, 0x0a, 0x08, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x61, 0x78, 0x5f, + 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0xe9, 0x03, 0x0a, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, - 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, - 0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x1b, - 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x71, 0x75, - 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x2d, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, - 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, - 0x26, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x48, 0x6f, - 0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x51, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x63, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, + 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, + 0x4d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x30, 0x0a, 0x2e, 0x5f, - 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, - 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x61, 0x64, 0x72, - 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x1a, 0x72, 0x0a, - 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x6c, 0x0a, 0x23, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x43, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, - 0x17, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x52, - 0x49, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x4c, 0x4b, 0x49, - 0x4e, 0x47, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x4e, 0x4c, 0x4f, 0x41, - 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x41, 0x53, - 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x01, - 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x46, 0x49, 0x52, - 0x53, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x74, 0x72, 0x61, - 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0xf1, 0x03, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, + 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, + 0x58, 0x0a, 0x1b, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, + 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x18, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, + 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x2d, 0x63, 0x6f, 0x73, + 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x75, + 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, + 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, + 0x48, 0x01, 0x52, 0x26, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x72, + 0x65, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x51, 0x75, 0x61, 0x64, 0x72, 0x61, + 0x74, 0x69, 0x63, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, + 0x1d, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, + 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x30, + 0x0a, 0x2e, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, + 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, + 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, + 0x1a, 0x72, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, + 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, + 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6c, 0x0a, 0x23, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, + 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, + 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x43, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x44, 0x52, 0x49, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, + 0x4c, 0x4b, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x4e, + 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, + 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4f, 0x55, + 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x5f, + 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x42, 0x1b, 0x0a, 0x19, 0x5f, + 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0xf1, 0x03, 0x0a, 0x0a, 0x54, 0x69, 0x6d, + 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 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, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x6f, 0x66, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 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, 0x0d, + 0x73, 0x6f, 0x66, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, + 0x0d, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 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, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, + 0x24, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x63, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x53, 0x6f, 0x66, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x4b, 0x0a, 0x21, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, + 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x1b, 0x63, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, + 0x6f, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x27, 0x0a, + 0x25, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, + 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x24, 0x0a, 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, + 0x6f, 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xeb, 0x02, 0x0a, + 0x0d, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, + 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, + 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0d, 0x73, + 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, + 0x4c, 0x0a, 0x21, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x6f, 0x66, 0x74, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x1c, 0x63, 0x6f, + 0x73, 0x74, 0x50, 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x65, + 0x6c, 0x6f, 0x77, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, + 0x21, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, + 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x03, 0x52, 0x1c, 0x63, 0x6f, 0x73, 0x74, + 0x50, 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x62, 0x6f, 0x76, + 0x65, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, + 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x24, + 0x0a, 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x6f, 0x66, 0x74, + 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x24, 0x0a, 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, + 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, + 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0xe7, 0x02, 0x0a, 0x14, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x72, 0x63, 0x54, 0x61, 0x67, 0x12, 0x28, 0x0a, 0x10, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, + 0x53, 0x72, 0x63, 0x54, 0x61, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x73, 0x74, 0x54, 0x61, 0x67, 0x12, + 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x64, 0x73, 0x74, 0x5f, + 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x64, 0x44, 0x73, 0x74, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x2c, 0x0a, + 0x12, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x50, + 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x64, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, + 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x48, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, + 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x07, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0c, 0x73, 0x69, 0x64, 0x65, + 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x73, 0x69, 0x64, 0x65, 0x4f, 0x66, 0x52, 0x6f, 0x61, 0x64, 0x42, + 0x0f, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x63, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x07, + 0x6c, 0x61, 0x74, 0x5f, 0x6c, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, + 0x6e, 0x67, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x93, 0x05, 0x0a, 0x09, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, + 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x12, 0x74, 0x0a, 0x15, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, + 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, + 0x2e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0xef, 0x01, 0x0a, 0x0c, 0x42, + 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x13, 0x65, + 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x35, 0x0a, 0x08, 0x65, 0x6e, 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, 0x07, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 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, 0x0d, 0x73, 0x6f, 0x66, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x6f, - 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 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, 0x0b, 0x73, - 0x6f, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x24, 0x63, 0x6f, - 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x62, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x63, 0x6f, 0x73, 0x74, - 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x6f, 0x66, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, - 0x21, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x1b, 0x63, 0x6f, 0x73, 0x74, - 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x6f, 0x66, 0x74, - 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x27, 0x0a, 0x25, 0x5f, 0x63, - 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x62, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x24, 0x0a, 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, - 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0d, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x6d, - 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x2b, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x6f, 0x66, 0x74, - 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x21, - 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, - 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x50, - 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x62, 0x6f, 0x76, 0x65, - 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x6f, - 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x24, 0x0a, - 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, - 0x6d, 0x61, 0x78, 0x22, 0xe7, 0x02, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, - 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x72, 0x63, 0x54, 0x61, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x64, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x53, 0x72, 0x63, 0x54, 0x61, 0x67, 0x12, - 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x73, 0x74, 0x54, 0x61, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x64, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x44, 0x73, 0x74, 0x54, - 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x11, 0x65, 0x61, 0x72, 0x6c, 0x69, + 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x11, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 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, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, + 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbc, 0x01, 0x0a, + 0x13, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x65, 0x61, + 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x18, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x72, + 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, 0x13, 0x0a, 0x0d, + 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, + 0x6c, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x48, 0x0a, 0x12, 0x76, 0x65, 0x68, 0x69, 0x63, + 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 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, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x44, 0x0a, 0x10, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, + 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, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, + 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x76, 0x69, 0x73, 0x69, 0x74, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x06, + 0x76, 0x69, 0x73, 0x69, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x66, + 0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x66, 0x66, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0d, 0x64, - 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2f, 0x0a, 0x05, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x22, 0xa9, 0x01, - 0x0a, 0x08, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, + 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x4d, 0x0a, 0x06, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x25, 0x0a, 0x0c, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x6f, 0x61, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x73, 0x69, - 0x64, 0x65, 0x4f, 0x66, 0x52, 0x6f, 0x61, 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x63, 0x0a, 0x08, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6c, 0x61, 0x74, 0x5f, 0x6c, 0x6e, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x06, 0x6c, 0x61, 0x74, - 0x4c, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x88, - 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x93, - 0x05, 0x0a, 0x09, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x5f, 0x0a, 0x0e, - 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, - 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, - 0x65, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, - 0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x74, 0x0a, - 0x15, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, + 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x72, + 0x65, 0x61, 0x6b, 0x52, 0x06, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x12, 0x4d, 0x0a, 0x07, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x66, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x74, 0x73, 0x1a, 0xef, 0x01, 0x0a, 0x0c, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x13, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x72, 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, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x11, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, - 0x73, 0x74, 0x61, 0x72, 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, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbc, 0x01, 0x0a, 0x13, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x4c, 0x0a, - 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x42, 0x72, - 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x18, 0x6d, - 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x6d, - 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, 0x13, 0x0a, 0x0d, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, - 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x76, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x48, 0x0a, 0x12, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 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, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x76, 0x65, - 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 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, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x4d, 0x0a, 0x06, 0x76, 0x69, 0x73, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x06, 0x76, 0x69, 0x73, 0x69, 0x74, 0x73, 0x12, - 0x5c, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, - 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, - 0x1b, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, - 0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x19, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x49, 0x6e, - 0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x66, 0x0a, - 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x1a, 0x8d, 0x04, 0x0a, 0x05, 0x56, 0x69, 0x73, 0x69, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x69, + 0x63, 0x6b, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x69, + 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x11, 0x76, 0x69, 0x73, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x69, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x06, 0x62, 0x72, - 0x65, 0x61, 0x6b, 0x73, 0x12, 0x4d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x73, - 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, - 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x43, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x1a, - 0x8d, 0x04, 0x0a, 0x05, 0x56, 0x69, 0x73, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x69, - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2e, 0x0a, - 0x13, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x76, 0x69, 0x73, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x39, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 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, 0x09, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x69, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, - 0x56, 0x69, 0x73, 0x69, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x64, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x1a, 0x6f, - 0x0a, 0x10, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, - 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0xda, 0x06, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, - 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x14, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x74, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, + 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x64, 0x65, + 0x74, 0x6f, 0x75, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x74, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x1a, 0x6f, 0x0a, 0x10, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, + 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xda, 0x06, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x71, 0x0a, 0x0d, 0x76, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, - 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0x7c, - 0x0a, 0x11, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, - 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, - 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x25, 0x0a, 0x0b, - 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x1a, 0x29, 0x0a, 0x0f, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x79, - 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x65, + 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x72, 0x61, + 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x72, 0x61, 0x76, 0x65, + 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x38, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x16, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x6e, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, + 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, + 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x05, 0x0a, 0x0f, 0x53, 0x6b, 0x69, - 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x52, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x0c, 0x77, 0x61, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, + 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 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, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, + 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x12, 0x71, 0x0a, 0x0d, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, - 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x52, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x1a, 0xc1, 0x04, 0x0a, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x1e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x43, 0x61, 0x70, 0x61, - 0x63, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcb, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x56, 0x45, - 0x48, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x45, 0x4d, 0x41, 0x4e, - 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, - 0x45, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x59, 0x10, 0x02, 0x12, 0x35, 0x0a, 0x31, - 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, - 0x4c, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, - 0x54, 0x10, 0x03, 0x12, 0x35, 0x0a, 0x31, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, + 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, + 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0x7c, 0x0a, 0x11, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, + 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, + 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x25, 0x0a, 0x0b, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, + 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x29, 0x0a, 0x0f, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x79, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x12, 0x39, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 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, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xd5, 0x05, 0x0a, 0x0f, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, + 0x52, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x07, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x73, 0x1a, 0xc1, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x51, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, + 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, + 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x1e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x5f, 0x63, + 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x1b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x78, 0x63, 0x65, 0x65, + 0x64, 0x65, 0x64, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, + 0xcb, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x44, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, + 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x23, + 0x0a, 0x1f, 0x44, 0x45, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x53, + 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, + 0x59, 0x10, 0x02, 0x12, 0x35, 0x0a, 0x31, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, - 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x04, 0x12, 0x3c, 0x0a, 0x38, 0x43, 0x41, + 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x12, 0x35, 0x0a, 0x31, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, - 0x5f, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x12, 0x33, 0x0a, 0x2f, 0x43, 0x41, 0x4e, 0x4e, - 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, - 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x54, - 0x49, 0x4d, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x10, 0x06, 0x12, 0x17, 0x0a, - 0x13, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x4c, 0x4c, - 0x4f, 0x57, 0x45, 0x44, 0x10, 0x07, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x22, 0xe9, 0x05, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x42, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x76, 0x69, 0x73, 0x69, - 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, + 0x04, 0x12, 0x3c, 0x0a, 0x38, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, + 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, + 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x44, + 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x12, + 0x33, 0x0a, 0x2f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, + 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, + 0x57, 0x53, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x07, 0x42, 0x18, 0x0a, + 0x16, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, + 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xe9, 0x05, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, + 0x18, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x16, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, + 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x76, 0x69, 0x73, - 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, + 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, - 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x72, - 0x61, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x5e, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x61, 0x78, 0x4c, 0x6f, - 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, - 0x64, 0x73, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, - 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, - 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xad, 0x07, 0x0a, - 0x1a, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, + 0x61, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, + 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, + 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x40, 0x0a, 0x0e, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0d, 0x76, 0x69, 0x73, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5e, 0x0a, 0x09, 0x6d, 0x61, 0x78, + 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x4d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x78, + 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, - 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, - 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, - 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0xda, 0x04, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, - 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, - 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x6c, - 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x65, 0x68, 0x69, - 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x1a, 0x98, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x78, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x62, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 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, 0x0d, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, - 0x15, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x56, 0x69, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c, - 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49, - 0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, - 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x32, 0x0a, 0x2e, 0x52, 0x45, 0x4c, - 0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41, - 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45, - 0x52, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, - 0x19, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, - 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x03, 0x22, 0xdb, 0x03, 0x0a, - 0x1c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, + 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, + 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xad, 0x07, 0x0a, 0x1a, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, + 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x11, 0x73, + 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, + 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x70, + 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x16, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x78, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x15, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xda, 0x04, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x7e, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, + 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, + 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x98, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, + 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x62, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, + 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 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, 0x0d, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x56, 0x69, + 0x73, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x52, 0x45, 0x4c, + 0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41, + 0x46, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x01, + 0x12, 0x32, 0x0a, 0x2e, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x54, 0x5f, + 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, + 0x43, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, + 0x4c, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x41, 0x4c, + 0x4c, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, + 0x44, 0x10, 0x03, 0x22, 0xdb, 0x03, 0x0a, 0x1c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0xcc, 0x01, 0x0a, 0x0e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6a, - 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, - 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x08, 0x73, 0x75, 0x62, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x0a, 0x67, 0x63, - 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, - 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, - 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x08, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5b, 0x0a, 0x0f, 0x67, 0x63, 0x73, 0x5f, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x66, 0x66, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x1a, 0xcc, 0x01, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x12, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6a, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x73, 0x75, 0x62, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, + 0x79, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x4c, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, + 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x52, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, + 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xce, 0x01, + 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5b, + 0x0a, 0x0f, 0x67, 0x63, 0x73, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x63, 0x73, + 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x0b, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x64, 0x61, - 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x22, 0x0a, 0x09, 0x47, 0x63, 0x73, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x27, 0x0a, 0x0e, 0x47, - 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, - 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x03, 0x75, 0x72, 0x69, 0x2a, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, - 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, 0x32, 0xf9, 0x04, 0x0a, 0x11, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0xea, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, - 0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x62, 0x3a, 0x01, 0x2a, 0x5a, 0x2a, 0x3a, - 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x22, 0x31, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x12, 0xa0, 0x02, 0x0a, - 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, - 0x75, 0x72, 0x73, 0x12, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, - 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, + 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x22, + 0x0a, 0x09, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x75, + 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x75, + 0x72, 0x69, 0x22, 0x27, 0x0a, 0x0e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x75, 0x72, 0x69, 0x2a, 0x43, 0x0a, 0x0a, 0x44, + 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, + 0x41, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, + 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, + 0x32, 0xf9, 0x04, 0x0a, 0x11, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xea, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0xad, 0x01, 0xca, 0x41, 0x38, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, - 0x54, 0x6f, 0x75, 0x72, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x6c, 0x3a, 0x01, 0x2a, 0x5a, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, - 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x22, 0x36, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x1a, - 0x54, 0xca, 0x41, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x8d, 0x02, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x1d, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x58, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, - 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xaa, 0x02, 0x20, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x20, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x4d, 0x61, 0x70, 0x73, 0x5c, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xea, - 0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x4d, 0x61, 0x70, 0x73, 0x3a, 0x3a, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x62, 0x3a, 0x01, 0x2a, 0x5a, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x7b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x2a, 0x7d, 0x3a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, + 0x22, 0x31, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, + 0x75, 0x72, 0x73, 0x12, 0xa0, 0x02, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0xca, 0x41, 0x38, 0x0a, 0x1a, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x3a, 0x01, 0x2a, 0x5a, 0x2f, 0x3a, + 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x22, 0x36, + 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x1a, 0x54, 0xca, 0x41, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x8d, 0x02, 0x0a, + 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, + 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x1d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x58, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x61, 0x70, 0x73, + 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x3b, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, + 0xaa, 0x02, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x4d, 0x61, 0x70, + 0x73, 0x5c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, + 0x3a, 0x4d, 0x61, 0x70, 0x73, 0x3a, 0x3a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7288,7 +7446,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawD } var file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes = make([]protoimpl.MessageInfo, 55) +var file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_google_maps_routeoptimization_v1_route_optimization_service_proto_goTypes = []any{ (DataFormat)(0), // 0: google.maps.routeoptimization.v1.DataFormat (OptimizeToursRequest_SolvingMode)(0), // 1: google.maps.routeoptimization.v1.OptimizeToursRequest.SolvingMode @@ -7308,194 +7466,196 @@ var file_google_maps_routeoptimization_v1_route_optimization_service_proto_goTyp (*Shipment)(nil), // 15: google.maps.routeoptimization.v1.Shipment (*ShipmentTypeIncompatibility)(nil), // 16: google.maps.routeoptimization.v1.ShipmentTypeIncompatibility (*ShipmentTypeRequirement)(nil), // 17: google.maps.routeoptimization.v1.ShipmentTypeRequirement - (*Vehicle)(nil), // 18: google.maps.routeoptimization.v1.Vehicle - (*TimeWindow)(nil), // 19: google.maps.routeoptimization.v1.TimeWindow - (*DistanceLimit)(nil), // 20: google.maps.routeoptimization.v1.DistanceLimit - (*TransitionAttributes)(nil), // 21: google.maps.routeoptimization.v1.TransitionAttributes - (*Waypoint)(nil), // 22: google.maps.routeoptimization.v1.Waypoint - (*Location)(nil), // 23: google.maps.routeoptimization.v1.Location - (*BreakRule)(nil), // 24: google.maps.routeoptimization.v1.BreakRule - (*ShipmentRoute)(nil), // 25: google.maps.routeoptimization.v1.ShipmentRoute - (*SkippedShipment)(nil), // 26: google.maps.routeoptimization.v1.SkippedShipment - (*AggregatedMetrics)(nil), // 27: google.maps.routeoptimization.v1.AggregatedMetrics - (*InjectedSolutionConstraint)(nil), // 28: google.maps.routeoptimization.v1.InjectedSolutionConstraint - (*OptimizeToursValidationError)(nil), // 29: google.maps.routeoptimization.v1.OptimizeToursValidationError - (*InputConfig)(nil), // 30: google.maps.routeoptimization.v1.InputConfig - (*OutputConfig)(nil), // 31: google.maps.routeoptimization.v1.OutputConfig - (*GcsSource)(nil), // 32: google.maps.routeoptimization.v1.GcsSource - (*GcsDestination)(nil), // 33: google.maps.routeoptimization.v1.GcsDestination - (*BatchOptimizeToursRequest_AsyncModelConfig)(nil), // 34: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig - (*OptimizeToursResponse_Metrics)(nil), // 35: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics - nil, // 36: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry - (*ShipmentModel_DurationDistanceMatrix)(nil), // 37: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix - (*ShipmentModel_PrecedenceRule)(nil), // 38: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule - (*ShipmentModel_DurationDistanceMatrix_Row)(nil), // 39: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row - (*Shipment_VisitRequest)(nil), // 40: google.maps.routeoptimization.v1.Shipment.VisitRequest - (*Shipment_Load)(nil), // 41: google.maps.routeoptimization.v1.Shipment.Load - nil, // 42: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry - nil, // 43: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry - (*Vehicle_LoadLimit)(nil), // 44: google.maps.routeoptimization.v1.Vehicle.LoadLimit - (*Vehicle_DurationLimit)(nil), // 45: google.maps.routeoptimization.v1.Vehicle.DurationLimit - nil, // 46: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry - nil, // 47: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry - (*Vehicle_LoadLimit_Interval)(nil), // 48: google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval - (*BreakRule_BreakRequest)(nil), // 49: google.maps.routeoptimization.v1.BreakRule.BreakRequest - (*BreakRule_FrequencyConstraint)(nil), // 50: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint - (*ShipmentRoute_Visit)(nil), // 51: google.maps.routeoptimization.v1.ShipmentRoute.Visit - (*ShipmentRoute_Transition)(nil), // 52: google.maps.routeoptimization.v1.ShipmentRoute.Transition - (*ShipmentRoute_VehicleLoad)(nil), // 53: google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad - (*ShipmentRoute_EncodedPolyline)(nil), // 54: google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline - (*ShipmentRoute_Break)(nil), // 55: google.maps.routeoptimization.v1.ShipmentRoute.Break - nil, // 56: google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry - nil, // 57: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry - nil, // 58: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry - (*SkippedShipment_Reason)(nil), // 59: google.maps.routeoptimization.v1.SkippedShipment.Reason - nil, // 60: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry - (*InjectedSolutionConstraint_ConstraintRelaxation)(nil), // 61: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation - (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation)(nil), // 62: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation - (*OptimizeToursValidationError_FieldReference)(nil), // 63: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference - (*durationpb.Duration)(nil), // 64: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 65: google.protobuf.Timestamp - (*latlng.LatLng)(nil), // 66: google.type.LatLng - (*longrunningpb.Operation)(nil), // 67: google.longrunning.Operation + (*RouteModifiers)(nil), // 18: google.maps.routeoptimization.v1.RouteModifiers + (*Vehicle)(nil), // 19: google.maps.routeoptimization.v1.Vehicle + (*TimeWindow)(nil), // 20: google.maps.routeoptimization.v1.TimeWindow + (*DistanceLimit)(nil), // 21: google.maps.routeoptimization.v1.DistanceLimit + (*TransitionAttributes)(nil), // 22: google.maps.routeoptimization.v1.TransitionAttributes + (*Waypoint)(nil), // 23: google.maps.routeoptimization.v1.Waypoint + (*Location)(nil), // 24: google.maps.routeoptimization.v1.Location + (*BreakRule)(nil), // 25: google.maps.routeoptimization.v1.BreakRule + (*ShipmentRoute)(nil), // 26: google.maps.routeoptimization.v1.ShipmentRoute + (*SkippedShipment)(nil), // 27: google.maps.routeoptimization.v1.SkippedShipment + (*AggregatedMetrics)(nil), // 28: google.maps.routeoptimization.v1.AggregatedMetrics + (*InjectedSolutionConstraint)(nil), // 29: google.maps.routeoptimization.v1.InjectedSolutionConstraint + (*OptimizeToursValidationError)(nil), // 30: google.maps.routeoptimization.v1.OptimizeToursValidationError + (*InputConfig)(nil), // 31: google.maps.routeoptimization.v1.InputConfig + (*OutputConfig)(nil), // 32: google.maps.routeoptimization.v1.OutputConfig + (*GcsSource)(nil), // 33: google.maps.routeoptimization.v1.GcsSource + (*GcsDestination)(nil), // 34: google.maps.routeoptimization.v1.GcsDestination + (*BatchOptimizeToursRequest_AsyncModelConfig)(nil), // 35: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig + (*OptimizeToursResponse_Metrics)(nil), // 36: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics + nil, // 37: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry + (*ShipmentModel_DurationDistanceMatrix)(nil), // 38: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix + (*ShipmentModel_PrecedenceRule)(nil), // 39: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule + (*ShipmentModel_DurationDistanceMatrix_Row)(nil), // 40: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row + (*Shipment_VisitRequest)(nil), // 41: google.maps.routeoptimization.v1.Shipment.VisitRequest + (*Shipment_Load)(nil), // 42: google.maps.routeoptimization.v1.Shipment.Load + nil, // 43: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry + nil, // 44: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry + (*Vehicle_LoadLimit)(nil), // 45: google.maps.routeoptimization.v1.Vehicle.LoadLimit + (*Vehicle_DurationLimit)(nil), // 46: google.maps.routeoptimization.v1.Vehicle.DurationLimit + nil, // 47: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry + nil, // 48: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry + (*Vehicle_LoadLimit_Interval)(nil), // 49: google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval + (*BreakRule_BreakRequest)(nil), // 50: google.maps.routeoptimization.v1.BreakRule.BreakRequest + (*BreakRule_FrequencyConstraint)(nil), // 51: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint + (*ShipmentRoute_Visit)(nil), // 52: google.maps.routeoptimization.v1.ShipmentRoute.Visit + (*ShipmentRoute_Transition)(nil), // 53: google.maps.routeoptimization.v1.ShipmentRoute.Transition + (*ShipmentRoute_VehicleLoad)(nil), // 54: google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad + (*ShipmentRoute_EncodedPolyline)(nil), // 55: google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline + (*ShipmentRoute_Break)(nil), // 56: google.maps.routeoptimization.v1.ShipmentRoute.Break + nil, // 57: google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry + nil, // 58: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry + nil, // 59: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry + (*SkippedShipment_Reason)(nil), // 60: google.maps.routeoptimization.v1.SkippedShipment.Reason + nil, // 61: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry + (*InjectedSolutionConstraint_ConstraintRelaxation)(nil), // 62: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation + (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation)(nil), // 63: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation + (*OptimizeToursValidationError_FieldReference)(nil), // 64: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference + (*durationpb.Duration)(nil), // 65: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 66: google.protobuf.Timestamp + (*latlng.LatLng)(nil), // 67: google.type.LatLng + (*longrunningpb.Operation)(nil), // 68: google.longrunning.Operation } var file_google_maps_routeoptimization_v1_route_optimization_service_proto_depIdxs = []int32{ - 34, // 0: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.model_configs:type_name -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig - 64, // 1: google.maps.routeoptimization.v1.OptimizeToursRequest.timeout:type_name -> google.protobuf.Duration + 35, // 0: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.model_configs:type_name -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig + 65, // 1: google.maps.routeoptimization.v1.OptimizeToursRequest.timeout:type_name -> google.protobuf.Duration 14, // 2: google.maps.routeoptimization.v1.OptimizeToursRequest.model:type_name -> google.maps.routeoptimization.v1.ShipmentModel 1, // 3: google.maps.routeoptimization.v1.OptimizeToursRequest.solving_mode:type_name -> google.maps.routeoptimization.v1.OptimizeToursRequest.SolvingMode 2, // 4: google.maps.routeoptimization.v1.OptimizeToursRequest.search_mode:type_name -> google.maps.routeoptimization.v1.OptimizeToursRequest.SearchMode - 25, // 5: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_first_solution_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute - 28, // 6: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_solution_constraint:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint - 25, // 7: google.maps.routeoptimization.v1.OptimizeToursRequest.refresh_details_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute - 25, // 8: google.maps.routeoptimization.v1.OptimizeToursResponse.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute - 26, // 9: google.maps.routeoptimization.v1.OptimizeToursResponse.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment - 29, // 10: google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError - 35, // 11: google.maps.routeoptimization.v1.OptimizeToursResponse.metrics:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics + 26, // 5: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_first_solution_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute + 29, // 6: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_solution_constraint:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint + 26, // 7: google.maps.routeoptimization.v1.OptimizeToursRequest.refresh_details_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute + 26, // 8: google.maps.routeoptimization.v1.OptimizeToursResponse.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute + 27, // 9: google.maps.routeoptimization.v1.OptimizeToursResponse.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment + 30, // 10: google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError + 36, // 11: google.maps.routeoptimization.v1.OptimizeToursResponse.metrics:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics 15, // 12: google.maps.routeoptimization.v1.ShipmentModel.shipments:type_name -> google.maps.routeoptimization.v1.Shipment - 18, // 13: google.maps.routeoptimization.v1.ShipmentModel.vehicles:type_name -> google.maps.routeoptimization.v1.Vehicle - 65, // 14: google.maps.routeoptimization.v1.ShipmentModel.global_start_time:type_name -> google.protobuf.Timestamp - 65, // 15: google.maps.routeoptimization.v1.ShipmentModel.global_end_time:type_name -> google.protobuf.Timestamp - 37, // 16: google.maps.routeoptimization.v1.ShipmentModel.duration_distance_matrices:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix - 21, // 17: google.maps.routeoptimization.v1.ShipmentModel.transition_attributes:type_name -> google.maps.routeoptimization.v1.TransitionAttributes + 19, // 13: google.maps.routeoptimization.v1.ShipmentModel.vehicles:type_name -> google.maps.routeoptimization.v1.Vehicle + 66, // 14: google.maps.routeoptimization.v1.ShipmentModel.global_start_time:type_name -> google.protobuf.Timestamp + 66, // 15: google.maps.routeoptimization.v1.ShipmentModel.global_end_time:type_name -> google.protobuf.Timestamp + 38, // 16: google.maps.routeoptimization.v1.ShipmentModel.duration_distance_matrices:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix + 22, // 17: google.maps.routeoptimization.v1.ShipmentModel.transition_attributes:type_name -> google.maps.routeoptimization.v1.TransitionAttributes 16, // 18: google.maps.routeoptimization.v1.ShipmentModel.shipment_type_incompatibilities:type_name -> google.maps.routeoptimization.v1.ShipmentTypeIncompatibility 17, // 19: google.maps.routeoptimization.v1.ShipmentModel.shipment_type_requirements:type_name -> google.maps.routeoptimization.v1.ShipmentTypeRequirement - 38, // 20: google.maps.routeoptimization.v1.ShipmentModel.precedence_rules:type_name -> google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule - 40, // 21: google.maps.routeoptimization.v1.Shipment.pickups:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest - 40, // 22: google.maps.routeoptimization.v1.Shipment.deliveries:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest - 42, // 23: google.maps.routeoptimization.v1.Shipment.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry - 64, // 24: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_absolute_detour_limit:type_name -> google.protobuf.Duration - 64, // 25: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_time_limit:type_name -> google.protobuf.Duration + 39, // 20: google.maps.routeoptimization.v1.ShipmentModel.precedence_rules:type_name -> google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule + 41, // 21: google.maps.routeoptimization.v1.Shipment.pickups:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest + 41, // 22: google.maps.routeoptimization.v1.Shipment.deliveries:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest + 43, // 23: google.maps.routeoptimization.v1.Shipment.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry + 65, // 24: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_absolute_detour_limit:type_name -> google.protobuf.Duration + 65, // 25: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_time_limit:type_name -> google.protobuf.Duration 3, // 26: google.maps.routeoptimization.v1.ShipmentTypeIncompatibility.incompatibility_mode:type_name -> google.maps.routeoptimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode 4, // 27: google.maps.routeoptimization.v1.ShipmentTypeRequirement.requirement_mode:type_name -> google.maps.routeoptimization.v1.ShipmentTypeRequirement.RequirementMode 5, // 28: google.maps.routeoptimization.v1.Vehicle.travel_mode:type_name -> google.maps.routeoptimization.v1.Vehicle.TravelMode - 66, // 29: google.maps.routeoptimization.v1.Vehicle.start_location:type_name -> google.type.LatLng - 22, // 30: google.maps.routeoptimization.v1.Vehicle.start_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint - 66, // 31: google.maps.routeoptimization.v1.Vehicle.end_location:type_name -> google.type.LatLng - 22, // 32: google.maps.routeoptimization.v1.Vehicle.end_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint - 19, // 33: google.maps.routeoptimization.v1.Vehicle.start_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow - 19, // 34: google.maps.routeoptimization.v1.Vehicle.end_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow - 6, // 35: google.maps.routeoptimization.v1.Vehicle.unloading_policy:type_name -> google.maps.routeoptimization.v1.Vehicle.UnloadingPolicy - 46, // 36: google.maps.routeoptimization.v1.Vehicle.load_limits:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry - 45, // 37: google.maps.routeoptimization.v1.Vehicle.route_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit - 45, // 38: google.maps.routeoptimization.v1.Vehicle.travel_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit - 20, // 39: google.maps.routeoptimization.v1.Vehicle.route_distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit - 47, // 40: google.maps.routeoptimization.v1.Vehicle.extra_visit_duration_for_visit_type:type_name -> google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry - 24, // 41: google.maps.routeoptimization.v1.Vehicle.break_rule:type_name -> google.maps.routeoptimization.v1.BreakRule - 65, // 42: google.maps.routeoptimization.v1.TimeWindow.start_time:type_name -> google.protobuf.Timestamp - 65, // 43: google.maps.routeoptimization.v1.TimeWindow.end_time:type_name -> google.protobuf.Timestamp - 65, // 44: google.maps.routeoptimization.v1.TimeWindow.soft_start_time:type_name -> google.protobuf.Timestamp - 65, // 45: google.maps.routeoptimization.v1.TimeWindow.soft_end_time:type_name -> google.protobuf.Timestamp - 20, // 46: google.maps.routeoptimization.v1.TransitionAttributes.distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit - 64, // 47: google.maps.routeoptimization.v1.TransitionAttributes.delay:type_name -> google.protobuf.Duration - 23, // 48: google.maps.routeoptimization.v1.Waypoint.location:type_name -> google.maps.routeoptimization.v1.Location - 66, // 49: google.maps.routeoptimization.v1.Location.lat_lng:type_name -> google.type.LatLng - 49, // 50: google.maps.routeoptimization.v1.BreakRule.break_requests:type_name -> google.maps.routeoptimization.v1.BreakRule.BreakRequest - 50, // 51: google.maps.routeoptimization.v1.BreakRule.frequency_constraints:type_name -> google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint - 65, // 52: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time:type_name -> google.protobuf.Timestamp - 65, // 53: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time:type_name -> google.protobuf.Timestamp - 51, // 54: google.maps.routeoptimization.v1.ShipmentRoute.visits:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit - 52, // 55: google.maps.routeoptimization.v1.ShipmentRoute.transitions:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition - 54, // 56: google.maps.routeoptimization.v1.ShipmentRoute.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline - 55, // 57: google.maps.routeoptimization.v1.ShipmentRoute.breaks:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Break - 27, // 58: google.maps.routeoptimization.v1.ShipmentRoute.metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics - 56, // 59: google.maps.routeoptimization.v1.ShipmentRoute.route_costs:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry - 59, // 60: google.maps.routeoptimization.v1.SkippedShipment.reasons:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason - 64, // 61: google.maps.routeoptimization.v1.AggregatedMetrics.travel_duration:type_name -> google.protobuf.Duration - 64, // 62: google.maps.routeoptimization.v1.AggregatedMetrics.wait_duration:type_name -> google.protobuf.Duration - 64, // 63: google.maps.routeoptimization.v1.AggregatedMetrics.delay_duration:type_name -> google.protobuf.Duration - 64, // 64: google.maps.routeoptimization.v1.AggregatedMetrics.break_duration:type_name -> google.protobuf.Duration - 64, // 65: google.maps.routeoptimization.v1.AggregatedMetrics.visit_duration:type_name -> google.protobuf.Duration - 64, // 66: google.maps.routeoptimization.v1.AggregatedMetrics.total_duration:type_name -> google.protobuf.Duration - 60, // 67: google.maps.routeoptimization.v1.AggregatedMetrics.max_loads:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry - 25, // 68: google.maps.routeoptimization.v1.InjectedSolutionConstraint.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute - 26, // 69: google.maps.routeoptimization.v1.InjectedSolutionConstraint.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment - 61, // 70: google.maps.routeoptimization.v1.InjectedSolutionConstraint.constraint_relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation - 63, // 71: google.maps.routeoptimization.v1.OptimizeToursValidationError.fields:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference - 32, // 72: google.maps.routeoptimization.v1.InputConfig.gcs_source:type_name -> google.maps.routeoptimization.v1.GcsSource - 0, // 73: google.maps.routeoptimization.v1.InputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat - 33, // 74: google.maps.routeoptimization.v1.OutputConfig.gcs_destination:type_name -> google.maps.routeoptimization.v1.GcsDestination - 0, // 75: google.maps.routeoptimization.v1.OutputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat - 30, // 76: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.input_config:type_name -> google.maps.routeoptimization.v1.InputConfig - 31, // 77: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.output_config:type_name -> google.maps.routeoptimization.v1.OutputConfig - 27, // 78: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.aggregated_route_metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics - 65, // 79: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.earliest_vehicle_start_time:type_name -> google.protobuf.Timestamp - 65, // 80: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.latest_vehicle_end_time:type_name -> google.protobuf.Timestamp - 36, // 81: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.costs:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry - 39, // 82: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.rows:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row - 64, // 83: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule.offset_duration:type_name -> google.protobuf.Duration - 64, // 84: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row.durations:type_name -> google.protobuf.Duration - 66, // 85: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_location:type_name -> google.type.LatLng - 22, // 86: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint - 66, // 87: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_location:type_name -> google.type.LatLng - 22, // 88: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint - 19, // 89: google.maps.routeoptimization.v1.Shipment.VisitRequest.time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow - 64, // 90: google.maps.routeoptimization.v1.Shipment.VisitRequest.duration:type_name -> google.protobuf.Duration - 43, // 91: google.maps.routeoptimization.v1.Shipment.VisitRequest.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry - 41, // 92: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load - 41, // 93: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load - 48, // 94: google.maps.routeoptimization.v1.Vehicle.LoadLimit.start_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval - 48, // 95: google.maps.routeoptimization.v1.Vehicle.LoadLimit.end_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval - 64, // 96: google.maps.routeoptimization.v1.Vehicle.DurationLimit.max_duration:type_name -> google.protobuf.Duration - 64, // 97: google.maps.routeoptimization.v1.Vehicle.DurationLimit.soft_max_duration:type_name -> google.protobuf.Duration - 64, // 98: google.maps.routeoptimization.v1.Vehicle.DurationLimit.quadratic_soft_max_duration:type_name -> google.protobuf.Duration - 44, // 99: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry.value:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit - 64, // 100: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry.value:type_name -> google.protobuf.Duration - 65, // 101: google.maps.routeoptimization.v1.BreakRule.BreakRequest.earliest_start_time:type_name -> google.protobuf.Timestamp - 65, // 102: google.maps.routeoptimization.v1.BreakRule.BreakRequest.latest_start_time:type_name -> google.protobuf.Timestamp - 64, // 103: google.maps.routeoptimization.v1.BreakRule.BreakRequest.min_duration:type_name -> google.protobuf.Duration - 64, // 104: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.min_break_duration:type_name -> google.protobuf.Duration - 64, // 105: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.max_inter_break_duration:type_name -> google.protobuf.Duration - 65, // 106: google.maps.routeoptimization.v1.ShipmentRoute.Visit.start_time:type_name -> google.protobuf.Timestamp - 57, // 107: google.maps.routeoptimization.v1.ShipmentRoute.Visit.load_demands:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry - 64, // 108: google.maps.routeoptimization.v1.ShipmentRoute.Visit.detour:type_name -> google.protobuf.Duration - 64, // 109: google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_duration:type_name -> google.protobuf.Duration - 64, // 110: google.maps.routeoptimization.v1.ShipmentRoute.Transition.delay_duration:type_name -> google.protobuf.Duration - 64, // 111: google.maps.routeoptimization.v1.ShipmentRoute.Transition.break_duration:type_name -> google.protobuf.Duration - 64, // 112: google.maps.routeoptimization.v1.ShipmentRoute.Transition.wait_duration:type_name -> google.protobuf.Duration - 64, // 113: google.maps.routeoptimization.v1.ShipmentRoute.Transition.total_duration:type_name -> google.protobuf.Duration - 65, // 114: google.maps.routeoptimization.v1.ShipmentRoute.Transition.start_time:type_name -> google.protobuf.Timestamp - 54, // 115: google.maps.routeoptimization.v1.ShipmentRoute.Transition.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline - 58, // 116: google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry - 65, // 117: google.maps.routeoptimization.v1.ShipmentRoute.Break.start_time:type_name -> google.protobuf.Timestamp - 64, // 118: google.maps.routeoptimization.v1.ShipmentRoute.Break.duration:type_name -> google.protobuf.Duration - 41, // 119: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load - 53, // 120: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad - 7, // 121: google.maps.routeoptimization.v1.SkippedShipment.Reason.code:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason.Code - 53, // 122: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad - 62, // 123: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation - 8, // 124: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.level:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level - 65, // 125: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.threshold_time:type_name -> google.protobuf.Timestamp - 63, // 126: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference.sub_field:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference - 12, // 127: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:input_type -> google.maps.routeoptimization.v1.OptimizeToursRequest - 9, // 128: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:input_type -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest - 13, // 129: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:output_type -> google.maps.routeoptimization.v1.OptimizeToursResponse - 67, // 130: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:output_type -> google.longrunning.Operation - 129, // [129:131] is the sub-list for method output_type - 127, // [127:129] is the sub-list for method input_type - 127, // [127:127] is the sub-list for extension type_name - 127, // [127:127] is the sub-list for extension extendee - 0, // [0:127] is the sub-list for field type_name + 18, // 29: google.maps.routeoptimization.v1.Vehicle.route_modifiers:type_name -> google.maps.routeoptimization.v1.RouteModifiers + 67, // 30: google.maps.routeoptimization.v1.Vehicle.start_location:type_name -> google.type.LatLng + 23, // 31: google.maps.routeoptimization.v1.Vehicle.start_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint + 67, // 32: google.maps.routeoptimization.v1.Vehicle.end_location:type_name -> google.type.LatLng + 23, // 33: google.maps.routeoptimization.v1.Vehicle.end_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint + 20, // 34: google.maps.routeoptimization.v1.Vehicle.start_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow + 20, // 35: google.maps.routeoptimization.v1.Vehicle.end_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow + 6, // 36: google.maps.routeoptimization.v1.Vehicle.unloading_policy:type_name -> google.maps.routeoptimization.v1.Vehicle.UnloadingPolicy + 47, // 37: google.maps.routeoptimization.v1.Vehicle.load_limits:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry + 46, // 38: google.maps.routeoptimization.v1.Vehicle.route_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit + 46, // 39: google.maps.routeoptimization.v1.Vehicle.travel_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit + 21, // 40: google.maps.routeoptimization.v1.Vehicle.route_distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit + 48, // 41: google.maps.routeoptimization.v1.Vehicle.extra_visit_duration_for_visit_type:type_name -> google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry + 25, // 42: google.maps.routeoptimization.v1.Vehicle.break_rule:type_name -> google.maps.routeoptimization.v1.BreakRule + 66, // 43: google.maps.routeoptimization.v1.TimeWindow.start_time:type_name -> google.protobuf.Timestamp + 66, // 44: google.maps.routeoptimization.v1.TimeWindow.end_time:type_name -> google.protobuf.Timestamp + 66, // 45: google.maps.routeoptimization.v1.TimeWindow.soft_start_time:type_name -> google.protobuf.Timestamp + 66, // 46: google.maps.routeoptimization.v1.TimeWindow.soft_end_time:type_name -> google.protobuf.Timestamp + 21, // 47: google.maps.routeoptimization.v1.TransitionAttributes.distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit + 65, // 48: google.maps.routeoptimization.v1.TransitionAttributes.delay:type_name -> google.protobuf.Duration + 24, // 49: google.maps.routeoptimization.v1.Waypoint.location:type_name -> google.maps.routeoptimization.v1.Location + 67, // 50: google.maps.routeoptimization.v1.Location.lat_lng:type_name -> google.type.LatLng + 50, // 51: google.maps.routeoptimization.v1.BreakRule.break_requests:type_name -> google.maps.routeoptimization.v1.BreakRule.BreakRequest + 51, // 52: google.maps.routeoptimization.v1.BreakRule.frequency_constraints:type_name -> google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint + 66, // 53: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time:type_name -> google.protobuf.Timestamp + 66, // 54: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time:type_name -> google.protobuf.Timestamp + 52, // 55: google.maps.routeoptimization.v1.ShipmentRoute.visits:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit + 53, // 56: google.maps.routeoptimization.v1.ShipmentRoute.transitions:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition + 55, // 57: google.maps.routeoptimization.v1.ShipmentRoute.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline + 56, // 58: google.maps.routeoptimization.v1.ShipmentRoute.breaks:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Break + 28, // 59: google.maps.routeoptimization.v1.ShipmentRoute.metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics + 57, // 60: google.maps.routeoptimization.v1.ShipmentRoute.route_costs:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry + 60, // 61: google.maps.routeoptimization.v1.SkippedShipment.reasons:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason + 65, // 62: google.maps.routeoptimization.v1.AggregatedMetrics.travel_duration:type_name -> google.protobuf.Duration + 65, // 63: google.maps.routeoptimization.v1.AggregatedMetrics.wait_duration:type_name -> google.protobuf.Duration + 65, // 64: google.maps.routeoptimization.v1.AggregatedMetrics.delay_duration:type_name -> google.protobuf.Duration + 65, // 65: google.maps.routeoptimization.v1.AggregatedMetrics.break_duration:type_name -> google.protobuf.Duration + 65, // 66: google.maps.routeoptimization.v1.AggregatedMetrics.visit_duration:type_name -> google.protobuf.Duration + 65, // 67: google.maps.routeoptimization.v1.AggregatedMetrics.total_duration:type_name -> google.protobuf.Duration + 61, // 68: google.maps.routeoptimization.v1.AggregatedMetrics.max_loads:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry + 26, // 69: google.maps.routeoptimization.v1.InjectedSolutionConstraint.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute + 27, // 70: google.maps.routeoptimization.v1.InjectedSolutionConstraint.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment + 62, // 71: google.maps.routeoptimization.v1.InjectedSolutionConstraint.constraint_relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation + 64, // 72: google.maps.routeoptimization.v1.OptimizeToursValidationError.fields:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference + 33, // 73: google.maps.routeoptimization.v1.InputConfig.gcs_source:type_name -> google.maps.routeoptimization.v1.GcsSource + 0, // 74: google.maps.routeoptimization.v1.InputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat + 34, // 75: google.maps.routeoptimization.v1.OutputConfig.gcs_destination:type_name -> google.maps.routeoptimization.v1.GcsDestination + 0, // 76: google.maps.routeoptimization.v1.OutputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat + 31, // 77: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.input_config:type_name -> google.maps.routeoptimization.v1.InputConfig + 32, // 78: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.output_config:type_name -> google.maps.routeoptimization.v1.OutputConfig + 28, // 79: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.aggregated_route_metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics + 66, // 80: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.earliest_vehicle_start_time:type_name -> google.protobuf.Timestamp + 66, // 81: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.latest_vehicle_end_time:type_name -> google.protobuf.Timestamp + 37, // 82: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.costs:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry + 40, // 83: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.rows:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row + 65, // 84: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule.offset_duration:type_name -> google.protobuf.Duration + 65, // 85: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row.durations:type_name -> google.protobuf.Duration + 67, // 86: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_location:type_name -> google.type.LatLng + 23, // 87: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint + 67, // 88: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_location:type_name -> google.type.LatLng + 23, // 89: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint + 20, // 90: google.maps.routeoptimization.v1.Shipment.VisitRequest.time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow + 65, // 91: google.maps.routeoptimization.v1.Shipment.VisitRequest.duration:type_name -> google.protobuf.Duration + 44, // 92: google.maps.routeoptimization.v1.Shipment.VisitRequest.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry + 42, // 93: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load + 42, // 94: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load + 49, // 95: google.maps.routeoptimization.v1.Vehicle.LoadLimit.start_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval + 49, // 96: google.maps.routeoptimization.v1.Vehicle.LoadLimit.end_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval + 65, // 97: google.maps.routeoptimization.v1.Vehicle.DurationLimit.max_duration:type_name -> google.protobuf.Duration + 65, // 98: google.maps.routeoptimization.v1.Vehicle.DurationLimit.soft_max_duration:type_name -> google.protobuf.Duration + 65, // 99: google.maps.routeoptimization.v1.Vehicle.DurationLimit.quadratic_soft_max_duration:type_name -> google.protobuf.Duration + 45, // 100: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry.value:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit + 65, // 101: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry.value:type_name -> google.protobuf.Duration + 66, // 102: google.maps.routeoptimization.v1.BreakRule.BreakRequest.earliest_start_time:type_name -> google.protobuf.Timestamp + 66, // 103: google.maps.routeoptimization.v1.BreakRule.BreakRequest.latest_start_time:type_name -> google.protobuf.Timestamp + 65, // 104: google.maps.routeoptimization.v1.BreakRule.BreakRequest.min_duration:type_name -> google.protobuf.Duration + 65, // 105: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.min_break_duration:type_name -> google.protobuf.Duration + 65, // 106: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.max_inter_break_duration:type_name -> google.protobuf.Duration + 66, // 107: google.maps.routeoptimization.v1.ShipmentRoute.Visit.start_time:type_name -> google.protobuf.Timestamp + 58, // 108: google.maps.routeoptimization.v1.ShipmentRoute.Visit.load_demands:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry + 65, // 109: google.maps.routeoptimization.v1.ShipmentRoute.Visit.detour:type_name -> google.protobuf.Duration + 65, // 110: google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_duration:type_name -> google.protobuf.Duration + 65, // 111: google.maps.routeoptimization.v1.ShipmentRoute.Transition.delay_duration:type_name -> google.protobuf.Duration + 65, // 112: google.maps.routeoptimization.v1.ShipmentRoute.Transition.break_duration:type_name -> google.protobuf.Duration + 65, // 113: google.maps.routeoptimization.v1.ShipmentRoute.Transition.wait_duration:type_name -> google.protobuf.Duration + 65, // 114: google.maps.routeoptimization.v1.ShipmentRoute.Transition.total_duration:type_name -> google.protobuf.Duration + 66, // 115: google.maps.routeoptimization.v1.ShipmentRoute.Transition.start_time:type_name -> google.protobuf.Timestamp + 55, // 116: google.maps.routeoptimization.v1.ShipmentRoute.Transition.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline + 59, // 117: google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry + 66, // 118: google.maps.routeoptimization.v1.ShipmentRoute.Break.start_time:type_name -> google.protobuf.Timestamp + 65, // 119: google.maps.routeoptimization.v1.ShipmentRoute.Break.duration:type_name -> google.protobuf.Duration + 42, // 120: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load + 54, // 121: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad + 7, // 122: google.maps.routeoptimization.v1.SkippedShipment.Reason.code:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason.Code + 54, // 123: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad + 63, // 124: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation + 8, // 125: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.level:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level + 66, // 126: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.threshold_time:type_name -> google.protobuf.Timestamp + 64, // 127: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference.sub_field:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference + 12, // 128: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:input_type -> google.maps.routeoptimization.v1.OptimizeToursRequest + 9, // 129: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:input_type -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest + 13, // 130: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:output_type -> google.maps.routeoptimization.v1.OptimizeToursResponse + 68, // 131: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:output_type -> google.longrunning.Operation + 130, // [130:132] is the sub-list for method output_type + 128, // [128:130] is the sub-list for method input_type + 128, // [128:128] is the sub-list for extension type_name + 128, // [128:128] is the sub-list for extension extendee + 0, // [0:128] is the sub-list for field type_name } func init() { file_google_maps_routeoptimization_v1_route_optimization_service_proto_init() } @@ -7613,7 +7773,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*Vehicle); i { + switch v := v.(*RouteModifiers); i { case 0: return &v.state case 1: @@ -7625,7 +7785,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*TimeWindow); i { + switch v := v.(*Vehicle); i { case 0: return &v.state case 1: @@ -7637,7 +7797,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DistanceLimit); i { + switch v := v.(*TimeWindow); i { case 0: return &v.state case 1: @@ -7649,7 +7809,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*TransitionAttributes); i { + switch v := v.(*DistanceLimit); i { case 0: return &v.state case 1: @@ -7661,7 +7821,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*Waypoint); i { + switch v := v.(*TransitionAttributes); i { case 0: return &v.state case 1: @@ -7673,7 +7833,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*Location); i { + switch v := v.(*Waypoint); i { case 0: return &v.state case 1: @@ -7685,7 +7845,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*BreakRule); i { + switch v := v.(*Location); i { case 0: return &v.state case 1: @@ -7697,7 +7857,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*ShipmentRoute); i { + switch v := v.(*BreakRule); i { case 0: return &v.state case 1: @@ -7709,7 +7869,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*SkippedShipment); i { + switch v := v.(*ShipmentRoute); i { case 0: return &v.state case 1: @@ -7721,7 +7881,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*AggregatedMetrics); i { + switch v := v.(*SkippedShipment); i { case 0: return &v.state case 1: @@ -7733,7 +7893,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*InjectedSolutionConstraint); i { + switch v := v.(*AggregatedMetrics); i { case 0: return &v.state case 1: @@ -7745,7 +7905,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*OptimizeToursValidationError); i { + switch v := v.(*InjectedSolutionConstraint); i { case 0: return &v.state case 1: @@ -7757,7 +7917,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*InputConfig); i { + switch v := v.(*OptimizeToursValidationError); i { case 0: return &v.state case 1: @@ -7769,7 +7929,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*OutputConfig); i { + switch v := v.(*InputConfig); i { case 0: return &v.state case 1: @@ -7781,7 +7941,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*GcsSource); i { + switch v := v.(*OutputConfig); i { case 0: return &v.state case 1: @@ -7793,7 +7953,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*GcsDestination); i { + switch v := v.(*GcsSource); i { case 0: return &v.state case 1: @@ -7805,7 +7965,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*BatchOptimizeToursRequest_AsyncModelConfig); i { + switch v := v.(*GcsDestination); i { case 0: return &v.state case 1: @@ -7817,6 +7977,18 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init } } file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*BatchOptimizeToursRequest_AsyncModelConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*OptimizeToursResponse_Metrics); i { case 0: return &v.state @@ -7828,7 +8000,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*ShipmentModel_DurationDistanceMatrix); i { case 0: return &v.state @@ -7840,7 +8012,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*ShipmentModel_PrecedenceRule); i { case 0: return &v.state @@ -7852,7 +8024,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*ShipmentModel_DurationDistanceMatrix_Row); i { case 0: return &v.state @@ -7864,7 +8036,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*Shipment_VisitRequest); i { case 0: return &v.state @@ -7876,7 +8048,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*Shipment_Load); i { case 0: return &v.state @@ -7888,7 +8060,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*Vehicle_LoadLimit); i { case 0: return &v.state @@ -7900,7 +8072,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*Vehicle_DurationLimit); i { case 0: return &v.state @@ -7912,7 +8084,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*Vehicle_LoadLimit_Interval); i { case 0: return &v.state @@ -7924,7 +8096,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*BreakRule_BreakRequest); i { case 0: return &v.state @@ -7936,7 +8108,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*BreakRule_FrequencyConstraint); i { case 0: return &v.state @@ -7948,7 +8120,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*ShipmentRoute_Visit); i { case 0: return &v.state @@ -7960,7 +8132,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*ShipmentRoute_Transition); i { case 0: return &v.state @@ -7972,7 +8144,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*ShipmentRoute_VehicleLoad); i { case 0: return &v.state @@ -7984,7 +8156,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*ShipmentRoute_EncodedPolyline); i { case 0: return &v.state @@ -7996,7 +8168,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*ShipmentRoute_Break); i { case 0: return &v.state @@ -8008,7 +8180,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*SkippedShipment_Reason); i { case 0: return &v.state @@ -8020,7 +8192,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53].Exporter = func(v any, i int) any { switch v := v.(*InjectedSolutionConstraint_ConstraintRelaxation); i { case 0: return &v.state @@ -8032,7 +8204,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54].Exporter = func(v any, i int) any { switch v := v.(*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation); i { case 0: return &v.state @@ -8044,7 +8216,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init return nil } } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54].Exporter = func(v any, i int) any { + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[55].Exporter = func(v any, i int) any { switch v := v.(*OptimizeToursValidationError_FieldReference); i { case 0: return &v.state @@ -8060,26 +8232,26 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[3].OneofWrappers = []any{} file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[5].OneofWrappers = []any{} file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[6].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9].OneofWrappers = []any{} file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10].OneofWrappers = []any{} file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13].OneofWrappers = []any{ + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14].OneofWrappers = []any{ (*Waypoint_Location)(nil), (*Waypoint_PlaceId)(nil), } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21].OneofWrappers = []any{ + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22].OneofWrappers = []any{ (*InputConfig_GcsSource)(nil), } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22].OneofWrappers = []any{ + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23].OneofWrappers = []any{ (*OutputConfig_GcsDestination)(nil), } - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30].OneofWrappers = []any{} file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50].OneofWrappers = []any{} - file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54].OneofWrappers = []any{ + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[37].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[51].OneofWrappers = []any{} + file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[55].OneofWrappers = []any{ (*OptimizeToursValidationError_FieldReference_Index)(nil), (*OptimizeToursValidationError_FieldReference_Key)(nil), } @@ -8089,7 +8261,7 @@ func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDesc, NumEnums: 9, - NumMessages: 55, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, @@ -8141,6 +8313,18 @@ type RouteOptimizationClient interface { // contains a `ShipmentModel` and returns an `OptimizeToursResponse` // containing `ShipmentRoute`s, which are a set of routes to be performed by // vehicles minimizing the overall cost. + // + // The user can poll `operations.get` to check the status of the LRO: + // + // If the LRO's `done` field is false, then at least one request is still + // being processed. Other requests may have completed successfully and their + // results are available in GCS. + // + // If the LRO's `done` field is true, then all requests have been processed. + // Any successfully processed requests will have their results available in + // GCS. Any requests that failed will not have their results available in + // GCS. If the LRO's `error` field is set, then it contains the error from + // one of the failed requests. BatchOptimizeTours(ctx context.Context, in *BatchOptimizeToursRequest, opts ...grpc.CallOption) (*longrunningpb.Operation, error) } @@ -8197,6 +8381,18 @@ type RouteOptimizationServer interface { // contains a `ShipmentModel` and returns an `OptimizeToursResponse` // containing `ShipmentRoute`s, which are a set of routes to be performed by // vehicles minimizing the overall cost. + // + // The user can poll `operations.get` to check the status of the LRO: + // + // If the LRO's `done` field is false, then at least one request is still + // being processed. Other requests may have completed successfully and their + // results are available in GCS. + // + // If the LRO's `done` field is true, then all requests have been processed. + // Any successfully processed requests will have their results available in + // GCS. Any requests that failed will not have their results available in + // GCS. If the LRO's `error` field is set, then it contains the error from + // one of the failed requests. BatchOptimizeTours(context.Context, *BatchOptimizeToursRequest) (*longrunningpb.Operation, error) }